封装:
定义包:
- 源代码中使用package 包名;指定包。
- 需要将生成class文件放在对应的文件结构下。
private → 不写 → protected → public
继承
继承的关系:父类(基类、超类) → 子类
由一般到特殊的关系
多态:
向上转型: 自动完成。子类实例可以直接当成父类变量使用。
向下转型: 必须进行强转。
多个相当类型的变量,调用同一个方法时,可以表现成多种不同的行为特征,这就是多态 instanceof
初始化块:
[static] {
执行性的代码。
}
初始化块没有名字,因此程序员不能显式调用;初始化块会自动执行。
▲ 静态初始化块(类初始化块):有static修饰。 在类初始化(在程序第一次主动使用该类时)的时候才会执行。
主动使用:仅用该类定义变量,就不算主动使用
▲ 非静态初始化块(实例初始化块):无static修饰。每次调用构造器创建对象时,都会自动执行实例初始化块。
而且一定是在构造器之前执行初始化块。
实质:经过编译之后,实例初始化块的代码会被提取到每个构造器的前面。
形象来说,Java编译器会把实例初始化块的代码剪切、并粘贴到某个构造器的前面
实例初始化块:其实就是用于将多个构造器开头的代码提取进行集中管理。
▲ 实例初始化块与实例变量的初始值:
实例初始化块的代码,会被提取到、放到构造器的前面中执行
实例变量指定初始值的代码,也会被提取到、放到构造器的前面中执行。
上面二者到底谁在前面,取决于它们在源代码中先后顺序。
▲ 类(静态)初始化块与类(静态)变量的初始值:
类(静态)变量指定初始值的代码,会被提取到、放到类初始化块中执行。
到底放在类初始化块的前面、还是后面,取决于它们在源代码中先后顺序。
★ 8个包装类:
Java有8个基本类型:Java一切皆对象,但这8个基本类型是例外。
为了将8个基本类型也可以当成对象使用,Java提供了包装类。
byte -> Byte
short -> Short
int -> Integer
long -> Long
float -> Float
double -> Double
char -> Character
boolean -> Boolean
自动装箱: Java会自动把基本类型的值包装成对应包装类的实例。
基本类型,可以自动转对应的包装类
自动拆箱: Java会自动把包装类的实例拆装成对应基本类型的值
包装类,可以自动转对应的基本类型
自动
基本类型 <-------> 包装类
★ Object的两个方法:
▲ 重写toString()方法
toString(): 当程序打印一个对象时候,实际上是输出该对对象的toString()的返回值。 Object默认提供toString方法,总是返回 类名@hashCode值
推荐:应该重写toString()方法,这个方法存在的意义就是被重写。
▲ 重写equals()方法
Object默认提供equals()方法,用于判断两个对象是否相等。
==:判断两个引用变量是否相等时,只有当两个引用变量指向同一个对象时才会返回true。
Object默认提供equals()方法判断两个对象是否相等的标准,和==的标准完全相同。
推荐:应该重写equals()方法,这个方法存在的意义就是被重写。
重写该方法时,就可以提供业务要求的相等的标准。
★ static修饰符:
static:静态。就是一个标志。
有static的成员,就是类成员: 类变量、类方法、类初始化块。
无static的成员,就是实例成员: 实例变量、实例方法、实例初始化块。
---------------------------------------------------------------------------------------------------------------
规则: 类成员不能直接访问实例成员。 静态成员不能访问非静态成员
实例成员可以直接访问类成员。 非静态成员可以访问静态成员
★ final
final可以修饰变量(成员变量和局部变量)、方法、类。 【总规则】:final可以修饰变量:表示该变量被赋初始值,该变量不能被重新赋值
▲ final修饰的成员变量:final修饰成员变量,必须有程序员显式指定初始值。
final修饰的实例变量,一共可在3个地方指定初始值(只能指定一次):
A - 定义时指定初始值。
B - 在实例初始化块中指定初始值。
C - 在构造器中指定。如果在构造器中为final实例变量指定初始值,必须每个构造器中都要指定。
表面上看,有3个地方,其实最终都会还原到构造器中执行。
final修饰的类变量,一共可在2个地方指定初始值(只能指定一次):
A - 定义时指定初始值。
B - 在类初始化块中指定初始值。
▲ final修饰的局部变量
不管是否有final修饰,局部变量必须先指定初始值,然后再使用。
final修饰局部变量之后,final局部变量只能被赋值一次。
final变量,用于保护该变量的值,无论程序如何改变,该变量始终都是最初的值。
▲ final修饰方法
表明该方法不能被重写。override