一、类与对象

面向对象相关

①面向对象学习的三条主线

1.类及类的成员:属性、方法、构造器、内部类、代码块
2.面向对象的三大特征:封装、继承、多态
3.其他关键字:this,super,abstract,interface,static,final,package,import等
“大处着眼,小处着手”

②面向对象与面向过程(理解)

面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做
面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做

③面向对象的编程思想

(类、对象;面向对象的三大特征;。。。)

④面向对象中类与对象的理解以及二者的关系

理解
类:对一类事务的描述,抽象的、概念上的定义
对象:实实在在存在的一个个体,也称为实例(instance)

面向对象程序设计的重点是类的设计 设计类,就是设计类的成员

关系
对象是类的一个实例,是由类派生出来的

⑤面向对象思想落地实现的规则

1.创建类,设计类的成员
2.创建类的对象
3.通过”对象.属性”或”对象.方法”调用对象的结构

几个概念的使用说明 属性 = 成员变量 = field = 域、字段 方法 = 成员方法 = 函数 = method 创建类的对象 = 类的实例化 = 实例化类

⑥万事万物皆对象

1.在Java语言范畴中,我们都将功能、结构封装到类中,通过类的实例化,来调用具体的功能结构
2.涉及到Java语言与前端Html、后端数据库交互时,前后端的结构在Java层面交互时,都体现为类、对象

Java对象内存结构

①类加载的过程

编译完源程序之后,生成一个或多个字节码文件(.class)
我们使用JVM中的类的加载器和解释器对生成的字节码文件进行解释运行。意味着需要将字节码文件对应的类加载到内存中,设计到内存解析
image.png

②说明

堆(Heap)
此内存区域的唯一目的就是存放对象实例,激活所有的对象实例都是在这里分配内存。这一点在JVM规范中的描述是:所有的对象实例以及数组都要在堆上分配
※对象的非static属性(成员变量)在堆内存中
栈(Stack)
通常所说的栈是指虚拟机栈。虚拟机栈用于存储局部变量等。局部变量表存放了编译期可知长度的各种基本数据类型(8大)、对象引用(reference类型,它不等同于对象本身,只是对象在堆内存的首地址)。方法执行完,自动释放
方法区(Method Area)
用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据

匿名对象

①理解

我们创建的对象,没有显式的赋给一个变量名,即为匿名对象

②特征

匿名对象只能调用一次
new 类().方法
new 类().属性 = xxx

二、属性与方法

属性

属性 vs 局部变量

相同点
定义变量的格式:数据类型 变量名 = 变量值
先声明,后使用
变量都有其对应的作用域
不同点
类中声明位置不同
属性:直接定义在类的一对{}内
局部变量:声明在方法内、方法形参、构造器形参、构造器内部的变量
关于权限修饰符的不同
属性:可以在声明属性时,指明其权限,使用权限修饰符
局部变量:不可以使用权限修饰符
默认初始化值的情况
属性:类的属性,根据其类型,都默认初始化值
整形(byte、short、int、long):0
浮点型(float、double):0.0
字符型(char):0或’\u0000’
布尔型(boolean):false
局部变量:没默认初始化值

意味着,我们在调用局部变量之前,一定要显式赋值 特别的,形参在调用时,我们赋值即可

方法

定义

描述类应该具有的功能

方法的声明

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

return关键字

使用范围:使用在方法体中
作用:1.结束方法2.针对于返回值类型的方法,使用”return 数据”方法返回所要的数据
注意点:return关键字后面不可以声明执行语句、

方法的重载(overload)

在同一个类中,允许存在一个以上的同名方法,只要他们的参数个数或者参数类型不同即可

“两同一不同”:同一个类同一个方法名,参数列表不同(参数个数、类型不同)

※跟方法的权限修饰符、返回值类型、形参变量名、方法体没关系!

最常用的地方是构造器的重载

可变个数形参

JavaSE 5.0中提供了Varargs(variable number of arguments)机制,允许直接定义能和多个实 参相匹配的形参。从而可以用一种更简单的方式来传递个数可变的形参
例:test(String … strs)

第一点 可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载 可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载。换句话说,二者不能共存 例:test(String[] strs) 与 test(String … strs) 不能共存 第二点 可变个数形参必须放到形参列表最后面 可变个数形参在方法中最多只有一个

方法参数的值传递机制

最基本原理
如果变量是基本数据类型,此时赋值的是变量所保存的数据值
如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值

三、面向对象特征一:封装

定义

将对象的属性和具体操作结合为一个独立的整体,尽可能隐藏对象的内部实现细节。

把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思路

优点

高内聚:封装细节,内部数据操作细节自己完成,不允许外部干涉
低耦合:简化外部调用,仅对外暴露少量的方法用于使用
提高代码安全性、复用性

代码体现

1.将类的属性私有化(private),同时提供公共的(public)方法来获取(getXXX)和设置(setXXX)类的属性
2.不对外暴露的私有的方法
3.单例模式

权限修饰符

封装性的体现需要权限修饰符来配合

Java规定的4种权限(从小到大排列)
private、缺省(啥也不写)、protected、public
image.png

4种权限都可以用来修饰类的内部结构:属性、方法、构造器、内部类 修饰类的话,只能使用缺省、public

四、类的结构:构造器(构造方法)(Constructor)

作用

创建对象
初始化对象的信息

使用说明

如果没显式的定义类的构造器的话,则系统默认提供一个空参的构造器
定义构造器的格式
权限修饰符 类名(形参列表) {}
一个类中定义的多个构造器,彼此构成重载
一旦我们显式的定义了类的构造器之后,系统不再提供默认的空参构造器
一个类中,至少会有一个构造器

属性赋值的先后顺序

①默认初始化
②显式初始化
③构造器中初始化
④通过”对象.方法” 或 “对象.属性”的方式,赋值
⑤代码块初始化

以上操作的先后顺序:① - ② / ⑤ - ③ - ④ ②与⑤要看声明的位置,谁先声明谁先执行

JavaBean的概念

定义
是一种Java语言写成的可重用组件
特点
类是公共的;有一个无参的公共构造器;有属性,且有对应的get、set方法

五、关键字:this

使用场景

修饰(调用)属性、方法、构造器
修饰(调用)属性、方法
this理解为当前对象 或 当前正在创建的对象(构造器场景)
修饰(调用)构造器
①在类的构造器中,可以显式的使用”this(形参列表)”的方式,调用本类种指定的其他构造器
②构造器中不能通过”this(形参列表)”的方式调用自己
③如果一个类中有n个构造器,则最多有n-1个构造器中使用了”this(形参列表)”的方式
④规定:”this(形参列表)”必须声明在当前构造器的首行
⑤构造器内部,最多只能声明一个”this(形参列表)”的方式来调用其他构造器

六、关键字:import/package

package关键字

为了更好的实现项目中类的管理,提供包的概念
使用package声明类或接口所属的包,声明在源文件首行
包,属于标识符,遵循标识符的命名规则、规范、”见名知意”
每”.”一次,就代表一层文件目录

同一个包下不能命名同名的接口、类 不同的包下可以命名同名的接口、类

image.png

import关键字

import:导入
在源文件中显式的使用import结构导入指定包下的类、接口

声明在包的声明和类的声明之间 源文件中,使用了不同包下的同名的类,则必须至少有一个类需要以全类名的方式显示