JavaSE — 面向对象(上)
一、类和对象
- 构造器不能定义返回类型,也不能使用void声明,因为构造器的返回值是隐式的,有返回值,返回该类的实例
-
this
关键字总是指向调用该方法的对象最大的作用就是,让类中的一个方法调用类中的另一个方法或实例变量,而不需要
new
一个对象(当有些局部变量和成员变量不重名时,this可以省略不写)
二、方法
- 方法是类或者对象
行为
特征的抽象,方法必须属于类或者对象 - 执行方法时,必须以
类.方法
或者对象.方法
来进行调用,之所以同一个类中,可以直接进行方法调用,如果是普通方法,是因为省略的this
关键字,如果是static
修饰的方法,是因为默认使用类作为调用者
方法重载
- 同一个类里,多个同名方法,形参列表不同
- 方法的返回值不能作为区分重载的方法,是因为重载方法的返回值,可以相同,也可以不同
三、成员变量和局部变量

-
类变量生命周期和类一样,实例变量周期和对象一样
-
类在使用前需要经过一下步骤
-
局部变量
局部变量定义后,要经过显示的初始化才能使用,因为系统不会为局部变量执行初始化(内存空也未分配)
不属于方法或者实例,存放在栈内存中,随方法调用完成而结束
-
变量的使用规则
能使用作用域小的就使用作用域小的,例如图方便使用成员变量代替局部变量,作用域在整个对象,造成两个坏处:
1)、增大了变量的生存时间,浪费内存开销
2)、扩大了变量作用域,不利于提高程序的内聚性
四、隐藏和封装
不同修饰符,访问控制级别
同一个类中 | 同一个包中 | 子类中 | 全局范围 | |
---|---|---|---|---|
private | √ | |||
default | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
五、构造器
构造器是一个特殊的方法,用于创建实例时执行初始化
-
构造器是创建Java对象的途径,但是创建Java对象不是完全由构造器负责
因为当程序调用构造器时,系统会先为对象分配内存,并执行默认的初始化,也就是说在构造器之前,对象就存在了,只是不能被外部访问,只能在构造器中通过
this
来引用,在通过构造器的隐式返回值返回该对象 -
构造器重载中,如果一个构造器包含另一个构造器,可以通过
this
关键字进行调用
六、类的继承
Java类的继承通过
extends
关键字实现
1、重写
-
遵循“两同两小一大”规则
两同:方法名相同、形参列表相同
两小:子类返回值类型和异常比父类小或相等
一大:子类方法访问权限比父类更大或者相等
2、super关键字
-
作用:可以在子类中调用父类被覆盖的实例方法
-
当程序创建一个子类对象时,除了会为子类定义的实例变量分配内存,子类继承父类的所有实例变量也会分配内存,即使同名
3、调用父类构造器
-
子类不会获得父类的构造器,但是可以在子类里通过
super
关键字调用父类构造器初始化代码(super必须放在第一行) -
子类调用父类构造器不同情况
1)、子类
super
调用父类,则根据super传参先调父类对应构造方法2)、子类
this
调用另一个构造,则在调用另一构造时,先调另一个构造的父类3)、super 和 this 都没有,系统在执行子类构造前,也会先调父类无参构造方法
-
不管子类哪种方法,都会调用父类构造方法,而且执行父类方法时,也会向上调父类的父类等,一直到
java.lang.Object
类的构造,所以最先执行的总是Object
的构造方法
七、多态
-
Java 引用变量有两个类型:
编译时类型
、运行时类型
-
编译时类型由声明的类型决定,运行时类型由实际赋值给变量的对象决定,当两种类型不一致时,就可能出现多态
-
也就是父类引用指向子类对象,调用相同的父类方法时,有不同的子类方法实现
八、初始化块
1、初始化块
初始化块和构造器功能类似,可以对Java对象进行初始化操作
作用:可以将对象相同的初始化处理代码(无需参数),提取到初始化块中,统一进行初始化,提高代码的复用和可维护性
初始化块,只有
static
修饰符,即静态初始化块
- 初始化块没有名字,也没有方法,所以不能通过类和对象进行调用
- 只能在创建Java对象时隐式执行,而且是在构造器之前执行
- Java对象加载 ——> 实例变量分配内存 ——> 初始化(先执行初始化块和声明实例变量是的初始值,然后再是构造器的初始化)
- 初始化块,在
Javac
编译时就会被还原到每个构造中,且在最前面
2、静态初始化块(static)
- 静态初始化块是对类进行初始化,在创建对象之前,所以不能对实例变量进行初始化处理
- 和普通初始化块类似,在执行子类静态初始化块之前,会先执行父类的静态初始化块,一直向上,直到
java.lang.Object
类
3、初始化顺序
- 父类的静态变量/静态初始化块最先执行
- 变量和初始化谁先执行,取决于先后顺序
