前言
1. 学习视频:
尚硅谷Java零基础全套视频教程(宋红康2023版,java入门自学必备)_哔哩哔哩_bilibili
2023最新Java学习路线 - 哔哩哔哩
第二阶段:Java面向对象编程
6.面向对象编程(基础)
7.面向对象编程(进阶)
8.面向对象编程(高级)
正文
6. JAVA面向对象编程(基础)
6.1 面向对象编程的概述
数据类型 | 默认初始化值 |
---|---|
byte、short、int | 0 |
long | 0L |
float、double | 0.0F 和 0.0D |
char | 一个空字符,即 '\u0000' |
boolean | false |
引用数据类型 | null,表示变量不引用任何对象 |
6.2 类的实例化、内存解析
6.2.1 类的实例化
6.2.2 内存解析:
说明:创建类的多个对象时,每个对象在对空间中有一个对象实体。每个对象实体中保存着一份类的属性。如果修改某一个对象的某个属性值时,不会影响其他对象此属性的值。
但是如果,把两个对象的变量指向了堆空间中的同一个对象实体,则修改会影响这两个。如下p1、p3指向了同一个地址值。
6.2.3 类的成员之一:属性
6.2.4 类的成员之一:方法
6.2.4.1 方法的作用与方法的声明
6.2.4.2 对象数组
6.3 方法应用
6.3.1 方法的重载
java允许在一个类中定义多个名称相同的方法,但是参数的类型或个数必须不同,这就是方法的重载。(方法的重载与返回值的类型、形参的名、权限修饰符都无关。)
注意如下,参数类型的顺序不一样,也叫方法的重载!!
例如下面println()方法的重载,在打印char[ ]的时候,打印的是字符数组的值,而不是地址值。
6.3.2 可变个数形参的方法:(int ... nums)必须声明在形参列表的最后,且只有一个
③特例:在同一个类中,可变个数形参的方法与其他方法名相同且形参类型是相同的可变个数类型的数组类型的方法,不构成重载。如 int ...nums 和 int[ ] nums 。
可变个数形参的方法应用场景举例:
6.3.3 方法值传递机制剖析
说明:基本数据类型的变量没有地址值,赋值操作传递的是数据值。引用类型的数据变量传递的是地址值,等号赋值之后,两者都指向同一个地址值。引用类型的数据变量修改一个,就修改了这个地址值中存储的数据值。
这也证明了自己定义的类也是类,是引用数据类型!
6.3.4 递归(Recursion)方法(一定要向已知方向递归)(能循环不递归,递归时间复杂度太高)
方法的递归是指在一个程序的内部调用自身的过程。递归必须要有结束条件,不然就会陷入无限递归的状态,永远无法结束调用。
递归方法练习题:
关与时间复杂度分析:
题解 | #统计每个月兔子的总数# - 牛客网
6.4 package与import关键字的使用
6.4.1 package 包
语法格式: package 顶层包名.子包名;
- 一个源文件只能有一个声明包的package语句。
- package语句作为Java源文件的第一条语句出现。若缺省该语句,则指定为无名包。
- 包名属于标识符,满足标识符命名的规则和规范(全部小写)、见名知意。
- 包通常使用所在公司域名的倒置:com.atguigu.xxx
- 取包名时不要使用 java.xx包。
- 包对应于文件系统的目录,package语句中用“.”来指明(目录)的层次,每“.”一次,就表示一层文件目录。
- 同一个包下可以声明多个结构(类、接口),但是不能定义同名的结构(类、接口)。
- 不同的包下可以定义同名的结构(类、接口)。
6.4.1.1 包的作用
6.4.1.2 包的作用
6.4.1.2 JDK中的主要包
6.4.2 import 导入
6.5 面向对象的特征之一:封装性(Encapsulation)
6.5.1 为什么需要封装性?
6.5.2 如何实现数据封装?
6.5.2.1 权限修饰符 及 权限大小
Java规定了4种权限修饰符:
- private(私有化,仅限于本类内部调用和赋值)、
- 缺省(什么都不写,仅限于本包内和本类内)、
- protected(受保护的,其他包非子类不可调用。)、
- public(公开的、公共的,公开调用和赋值)。
作用:可以使用4种权限修饰符来修饰类及其内部成员。当这些成员被调用时,体现可见性的大小。
注意:
- 类:只能使用public、缺省去修饰。
- 类的内部成员:可以使用这四种去修饰。
例如:当我们把类中的某个属性设置为private时,外界用户就不能使用“类名.属性名”随意设置和获取,而必须使用类中的Set和get方法对属性进行设置和获取。 把Set和get方法分为两个,符合低耦合原则(一个方法,一个作用)。
方法 | 作用 | 修饰符 | 返回值类型 | 参数 | 返回值 |
---|---|---|---|---|---|
set | 设置属性 | public | void | 有参数 | 无 |
get | 获取属性 | public | 各种类型 | 无 | 各种类型 |
6.6 类的成员之三:构造器(Constructor)
什么方法可以称为构造器:
- 方法名与类名相同
- 没有返回值类型的声明(没有void或其他类型声明)
- 没有return语句。
没有空参构造器,创建对象的时候就需要为有参构造器的参数赋值。
因此一个类中如果定义了有参的构造方法,我们最好再定义一个无参的构造方法。
而且为了方便实例化,对象构造方法通常用public来修饰。
类的属性赋值过程:顺序实际上是按代码执行顺序。
6.7 JavaBean的理解
6.8 UML类图
总结:
封装性:将对象的属性和行为封装起来,不需要让外界知道具体实现细节。用四种权限修饰符体现可见性的大小。根据程序设计原则体现了高内聚和低耦合。
企业真题:
类与对象:
用到面向对象的地方有很多,例如创建类、设计类的时候,还有通过创建的这个类进行实例化,然后调用相关功能。
Java内存结构:
JVM虚拟机中内存划分为类加载器子系统、运行时数据区、执行引擎、本地方法接口、本地方法库。其中运行时数据区包括:方法区、堆、程序计数器、本地方法栈、虚拟机栈。
权限修饰符:
构造器:
属性及属性赋值顺序: