面向对象编程主线一

news2024/9/26 5:23:41

面向对象编程

一、Java面向对象学习的三条主线

  1. Java类及类的成员:属性、方法、构造器;代码块、内部类
  2. 面向对象的三大特征:封装性、继承性、多态性、(抽象性)
  3. 其他关键字:this、super、static、final、abstract、interference、package、import

“大处着眼,小处着手”

1.1、面向过程与面向对象

面向过程(POP,Procedure Oriented Programming):强调的是功能行为,以函数为最小单位,考虑怎么做。

面向对象(OOP,Object Oriented Progamming):将功能封装进对象,强调了具备功能的对象,以类/对象为最小单位,考虑谁来做。

举例:

问题描述:“人把大象装进冰箱”

1.面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。
① 把冰箱门打开
② 抬起大象,塞进冰箱
③ 把冰箱门关闭
2.面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
人{
    打开(冰箱){
    冰箱.开开();
    }

    抬起(大象){
    大象.进入(冰箱);
    }

    关闭(冰箱){
    冰箱.闭合();
    }
}

冰箱{
    开开(){}
    闭合(){}
}

大象{
    进入(冰箱){}
}

1.2、面向对象的两个要素

:对一类事物的描述,是抽象的、概念上的定义

对象:是实际存在的该类事物的每个个体,因而也称为实例(instance)

  • 面向对象程序设计的重点是类的设计
  • 设计类,就是设计类的成员,常见的类的成员有:
    • 属性:field(可翻译为 ”域“ 或 ”字段“ ),对应类中的成员变量
    • 行为:method,对应类中的成员方法

类创建好后如何使用?----类的实例化,即创建类的对象

image.png

1.3、类和对象的使用

(面向对象思想落地的实现):

步骤:

1.创建类,设计类的成员

2.创建类的对象

3.通过 ”对象.属性“ 或 "对象.方法” 调用对象的结构

public class PersonTest {
    public static void main(String[] args) {
        //创建Person类的对象
        Person p1 = new Person();
//        Scanner scanner = new Scanner(System.in);

        //调用对象的结构:属性、方法
        //调用属性:对象.属性
        p1.age = 1;
        p1.isMale = true;
        p1.name = "Cute";
        System.out.println(p1.age);

        //调用方法:对象.方法
        p1.eat();
        p1.sleep();
        p1.talk(Chinese);

    }
    public class Person{
        //属性
        String name;
        int age;
        boolean isMale;

        //方法
        public void eat(){
            System.out.println("人可以吃饭");
        }
        public void sleep(){
            System.out.println("人可以睡觉");
        }
        public void talk(String language){
            System.out.println("人可以说话,使用的是:" + language);
        }
    }
}

如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性(非static的)

1.4、对象的内存解析

  1. 内存结构:栈(局部变量)、堆(new出来的结构:对象(非static成员变量)、数组)
  2. 变量:成员变量 vs 局部变量(方法内、方法形参、构造器内、构造器形参、代码块内)
  • 方法中的变量都是局部变量
  • 引用类型的变量,只可能存储两类值:null 或 地址值(含变量的类型)

重要!!!

虚拟机栈:即为平时提到的栈结构。我们将局部变量存储在栈结构中

:我们将new出来的结构(比如:数组、对象)加载到堆空间中。

​ 补充:对象的属性(非static的)加载到堆空间中

方法区:类的加载信息、常量池、静态域

本地方法栈:一般存储C、C++的东西

image.png

1.5、对象数组的内存解析

引用类型的变量,只可能存储两类值:null 或 地址值(含变量的类型)

image.png

1.5、类中属性的使用

类中属性的使用

​ 属性(成员变量) vs 局部变量

1.相同点:

​ 1.1 定义变量的格式:数据类型 变量名 = 变量值

​ 1.2 先声明、后使用

​ 1.3 变量都有其对应的作用域

2.不同点

​ 2.1 在类中声明的位置不同

属性直接定义在类的一对{}内

局部变量声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量

​ 2.2 关于权限修饰符的不同

​ 属性:可以在声明属性时,指明其权限,使用权限修饰符

​ 常用的权限修饰符:private 、public、缺省、protected---->封装性

​ 局部变量:不可以使用权限修饰符

​ 2.3 默认初始化值的情况

属性:类的属性,根据其类型。都有默认初始化值

​ 整型(byte、short、int、long):0

​ 浮点型(float、double): 0.0

​ 字符型(char): 0(或’\u0000‘)

​ 布尔型(boolean): false

​ 引用数据类型(类、数组、接口):null

局部变量:没有默认初始化值

意味着,我们在调用局部变量之前,一定要显式赋值

​ 特别地,形参在调用时,我们赋值即可。

​ 2.4 在内存中加载的位置

属性:加载到堆空间中(非static)

局部变量:加载到栈空间

具体可见下表:

不同点属性(成员变量)局部变量
相同点1.1 定义变量的格式:数据类型 变量名 = 变量值1.2 先声明、后使用
1.3 变量都有其对应的作用域
2.1 在类中声明的位置不同直接定义在类的一对{}内声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量
2.2关于权限修饰符的不同可以在声明属性时,指明其权限,使用权限修饰符不可以使用权限修饰符
2.3 默认初始化值的情况类的属性,根据其类型。都有默认初始化值没有默认初始化值。意味着,我们在调用局部变量之前,一定要显式赋值。特别地,形参在调用时,我们赋值即可。
2.4 在内存中加载的位置加载到堆空间中(非static)加载到栈空间

1.6、类中方法的声明和使用

方法:描述类应该具有的功能

比如:

  • Math类:sqrt()\random()…
  • Scanner类:nextXxx()…
  • Arrays类:sort()\binarySearch()…

1.6.1、举例

   public void eat()//无返回值,无形参
   public void sleep(int hour)//无返回值,有形参
   public String getName()//有返回值,无形参
   public String getNation(String getNation//有返回值,有形参

1.6.2、方法的声明

权限修饰符 返回值类型 方法名(形参列表){
           方法体
       }

static final abstract 也可以修饰方法

1.6.2.1、成员变量和局部变量

  • 在方法体外,类体内声明的变量称为成员变量
  • 在方法体内部声明的变量成为局部变量

image.png

1.6.3、具体说明

1.6.3.1、权限修饰符

默认权限的修饰符都是public

Java规定的4种修饰符:private、public、protected、缺省

1.6.3.2、返回值类型

可分为 有返回值 vs 无返回值

  • 如果有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中需要使用return关键字来返回指定类型的变量或常量。格式:return 数据;

  • 如果方法没有返回值,则方法声明时,使用void来表示。没有返回值的方法中,就不使用return,但是,如果使用的话,只能"return;"表示结束此方法的意思。

  • 定义方法该不该有返回值?

    ​ ① 题目要求

    ​ ② 凭经验:具体问题具体分析

1.6.3.3、方法名

方法名属于标识符,应该符合标识符的规则和规范, ”见名知意“

1.6.3.4、形参列表

方法可以声明0个,1个,或多个形参、

格式:数据类型1 形参1 ,数据类型2 形参2,…

1.6.3.5、方法体

方法功能的体现

1.6.3.6、return关键字

  1. 使用范围:使用在方法体中

  2. 作用:

    ① 结束方法

    ② 针对于有返回值类型的方法,使用”return 数据“方式返回所要的数据。

    ③ 注意:return 关键字后面不可以声明执行语句

1.6.3.7、如何调用

方法的使用中,方法可以调用当前类的属性或方法

特殊的:方法A中又掉用了方法A:递归方法

方法中,不可以定义方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/731306.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分治法求最近点对问题

目录 蛮力法 分治法 探究分治规模小于一定程度时采用暴力解法 蛮力法 算法思想 蛮力法,顾名思义,即穷举所有点与点之间的距离,两层循环暴力找出最近点对。算法执行可视化如图1所示,word文档GIF静态显示,附件已含动…

BTY Carnival - Task2 | Get the OG Role Win USDT

欢迎来到比特元社区! 比特元是一条兼具平行链与零知识证明技术的EVM兼容区块链。BitYuan的生态系统dns.bityuan.com即将开放公测。用户完成任务即获得白名单资格,可进入到DC群的DNS白名单频道 ,我们将定期开展抽BTY等活动,并且将…

2022年第十三届JAVA B组国赛

文章目录 A.重合次数(模拟)B.数数(数学) A.重合次数(模拟) Answer:494 这个题目比较坑人, public class Main {static BufferedReader br new BufferedReader(new InputStreamReader(System.…

多元回归预测 | Matlab阿基米德算法(AOA)优化极限梯度提升树XGBoost回归预测,AOA-XGBoost回归预测模型,多变输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 阿基米德算法(AOA)优化极限梯度提升树XGBoost回归预测,AOA-XGBoost回归预测模型,多变输入模型,多变量输入模型,多变量输入模型,matlab代码回归预测,多变量输入模型,多变量输入模型 评价指标包括:MAE、RMSE和R2…

一文3000字从0到1带你进行Mock测试(建议收藏)

​什么是mock? ​mock测试是以可控的方式模拟真实的对象行为。程序员通常创造模拟对象来测试对象本身该具备的行为,很类似汽车设计者使用碰撞测试假人来模拟车辆碰撞中人的动态行为 为什么要使用Mock? 之所以使用mock测试,是因…

pdf怎么转换成jpg图片?分享几个实用的方法!

记灵在线工具是一种非常方便的工具,可以帮助我们将PDF文件转换为图片格式。下面介绍三种不同的方法,让我们来了解一下。 方法一:记灵在线工具 1、打开记灵在线工具,在工具列表中选择“PDF转图片”。 2、将需要转换的PDF文件添加…

[C语言][小游戏][猜数游戏]

C语言的奇妙旅行 目录:一、猜数判定二、重复到猜对为止三、随机设定目标数字四、限制输入次数五、保存输入的记录六、测试小游戏 目录: 带着梦想,带着好奇,带着执着,在C语言的世界里旅行。亲爱的朋友们,一…

能源结构变更图,传统能源结构对比新兴能源

以传统的能源(煤、天然气)提供能源,到新兴能源 目前新兴能源以 太阳能,风能为主以及其它行业, 一类企业以新兴能源这种为主,核心是能源接收,以及储存能源,存储通常两种方式&#x…

cmake列表

目录 cmake多行注释 求list长度 demo 获取list的值 demo 插入list demo 追加list demo 查找列表中的字符 demo 删除list list向前删除和向后删除数据 demo 字符串反转 demo 特殊操作 Readinglist(LENGTH <list> <out-var>)list(GET <list> &…

STM32CubeMX开发实战1-LED点灯

目录 点灯选择 MCU引脚设置时钟设置项目配置生成项目项目文件介绍Debugger 设置 点灯 这里将会以一个最简单的一个点灯实验来展示如何使用 STM32CubeMX 快速生成 STM32 工程并上手开发&#xff0c;包括对项目工程建立的详细内容分析解释 接下来使用正点原子探索者开发板 STM32F…

101、基于STM32单片机智能输液器红外点滴液位监控报警系统设计(程序+原理图+PCB源文件+参考论文+硬件设计资料+元器件清单等)

单片机主芯片选择方案 方案一&#xff1a;AT89C51是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元&a…

Python程序设计

很多刚接触Python的同学会觉得Python就和shell语言一样&#xff0c;是一门脚本语言&#xff0c;并不需要设计&#xff0c;只需要关注要实现的功能。确实一门计算机语言的诞生就是为了去更好的解决当前的痛点&#xff0c;功能实现肯定是第一位的。但是如何在功能实现的前提下&am…

【人工智能】您必须了解的最佳聊天机器人框架

在本博客中&#xff0c;我们将讨论 7 大聊天机器人开发框架。 聊天机器人现在已成为许多企业不可或缺的一部分。他们利用聊天机器人提供客户支持服务。聊天机器人增强了人工代理以提供客户服务支持。企业每天都会收到大量查询。手动回答这些问题不仅耗时&#xff0c;而且还会增…

数据结构--由遍历序列构造二叉树

数据结构–由遍历序列构造二叉树 不同二叉树的中序遍历序列 中序遍历:中序遍历 左 \color{red}左 左子树、 根 \color{purple}根 根结点、中序遍历 右 \color{green}右 右子树 中序遍历序列:BDCAE 结论 : 一个中序遍历序列可能对应多种二叉树形态 \color{green}结论:一个中序…

4.4 x64dbg 绕过反调试保护机制

在Windows平台下&#xff0c;应用程序为了保护自己不被调试器调试会通过各种方法限制进程调试自身&#xff0c;通常此类反调试技术会限制我们对其进行软件逆向与漏洞分析&#xff0c;下面是一些常见的反调试保护方法&#xff1a; IsDebuggerPresent&#xff1a;检查当前程序是…

OpenCV 入门教程:图像读取和显示

OpenCV 入门教程&#xff1a;图像读取和显示 导语一、图像读取1.1、导入 OpenCV 库1.2、读取图像文件1.3、图像读取的返回值 二、图像显示2.1、创建窗口2.2、图像显示2.3、等待按键2.4、关闭窗口 三、示例应用总结 导语 在计算机视觉和图像处理领域&#xff0c;读取和显示图像…

非局部均值滤波(磨皮)

note 根据掩膜区域与其他区域的相似程度来赋予掩膜区域像素权重 相似程度由均方差来衡量 code /*\brief 矩阵求邻和\param type1&#xff0c;列方向&#xff1b;type2&#xff0c;行方向 */ static void MyCumSum(Mat& src, Mat& res, int type) {if ((src.channel…

关于impacket套件中的atexec.py在使用的时候报error: unrecognized arguments: 的解决方案

定位到库文件C:\Users\LC\AppData\Local\Programs\Python\Python311\Lib\argparse.py 加一个return args就行了 用完记得改回来&#xff0c;不然会影响其他脚本的功能

算法分析和设计选择和判断

算法分析和设计选择和判断 目录 平时测试 1.算法概述 1.1渐进符号的概念 1.2求时间复杂度 1.3比较时间复杂度 1.4时间复杂度定义 1.5算法的有效性 1.6算法的性质 1.7顺序搜索法 1.8渐进算法分析 2.递归和分治策略 2.1归并排序 2.2归并的空间复杂度 2.3插入排序 2.4递归 2.5归并…

Docker容器与HSM整合的好处

Docker透过容器使创建、部署和运行应用程式变得更加容易。容器允许开发人员可以将一个应用程式与它所需要的所有部分封包&#xff0c;然后将应用程式及其组件作为一个单一的套装软体。 Docker面临的挑战 : ● 遭受特权用户滥用的风险 Docker环境或容器内的权限配置不当可能会导…