域
域有两种类型:实例域(包括final实例域)和类域(也称静态域)
初始化数据域的3种方法:
a. 在构造器中设置值
b. 在声明中赋值
c. 初始化块
静态常量的使用方法:类名.常量名 eg.获得的方法:Math.PI
域与局部变量的主要不同点:必须明确地初始化方法中的局部变量。Java不对局部变量进行初始化,但是会对对象的实例域进行初始化。
构造器
对象构造的几种机制:
a. 重载
b. 默认域初始化
c. 无参构造器
d. 显示域初始化(常量或调用方法)
e. 调用另一个构造器
f. 初始化块
调用构造器的具体处理步骤:
a. 所有数据域被初始化为默认值(0、false或full)
b. 按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块
c. 如果构造器第一行调用了第二个构造器,则执行第二个构造器主体
d. 执行这个构造器的主体
不能在构造器中定义与实例域重名的局部变量。
方法
方法的两个参数:
a. 隐式参数,即方法名前的类对象
b. 显式参数,即方法名后括号中的数值
this可表示隐参,用来将实例域和局部变量明显区别开。
静态方法
静态方法没有隐参,即没有this参数。
静态方法的调用:
a. 类名.方法(方法可访问自身静态域)
b. 对象.方法(方法中的static被省略,调用结果与对象无关系)
使用静态方法的两种情况:
a. 不需要访问对象状态
b. 只访问类的静态域
方法参数的使用情况:
a. 一个方法不能修改一个基本数据类型的参数(即数值型和布尔型)
b. 一个方法可以改变一个对象参数的状态
c. 一个方法不能让对象参数引用一个新的对象
继承机制
子类对父类成员的可访问特性:子类继承父类的成员,但对父类成员的可访问性却由访问特性控制。父类成员方法继承至子类后,其待遇与子类相同修饰符修饰的成员方法一样。
子类构造方法的定义与执行:调用父类构造方法所使用的super是java语言的关键字,用来表示直接父类的引用,由于Java的单继承机制,所以super是个很明确的概念。
this与super的联系与区别:关键字this有两个用途:一是引用隐式参数,二是调用该类其他的构造器。同样,super关键字也有两个用途:一是调用超类的方法,二是调用超类的构造器。在调用构造器的时候,使用方式很相似。调用构造器的语句只能作为另一个构造器的第一条语句出现。构造参数既可以传递给本类(this)的其他构造器,也可以传递给超类(super)的构造器。
多态
多态的最佳定义:一个对象可以指示多种实际类型的现象被称为多态
动态绑定机制:调用的方法依赖于隐式参数的实际类型,并在运行时实现动态绑定。父类方法与覆盖的子类方法可以有可协变得返回类型。动态绑定机制中的虚拟机在继承层次内调用方法,若没有则沿继承链向上寻找。
阻止继承
final类的方法自动为final,而不包括域。
内联:一个没有被覆盖并且很短的方法,编译器可以对它进行优化处理。
强制类型转换
进行强制类型转换的原因:在暂时忽视对象的实际类型之后,使用对象的全部功能(可以理解为复原)
类型:类型描述了一个变量所引用的以及能够引用的对象类型
注释:将超类的引用赋给子类变量时,必须进行类型转换,才能通过运行时的检查,在继承链上进行向下的类型转换,并且“谎报”有关对象包含的内容,会产生异常。
抽象类
抽象类不能被实例化,但可以定义一个抽象类的对象变量,但是它只能引用非抽象子类的对象。
Object类
Object类为所有类的超类,object类提供3个服务,equals方法,hashCode方法,toString方法。子类可以覆盖这3个方法。
equals方法:检测一个对象是否等于另一个对象。Object:比较两个对象是否具有相同的引用。子类可以定义为比较两个对象状态的相等
hashCode方法:由对象导出的一个整型值。Object:导出对象的存储地址
toString方法:返回对象值得字符串。Object:打印输出对象所属的类名和散列码