Object类
一. Object类结构的剖析
- Object类是Java类的根父类。
- 如果在类的声明中未使用extends指明其父类,则默认父类为Java.lang.Object类。
- Object类的功能(属性,方法)具有通用性。
属性:无
方法:equals(),toString(),getClass(), hashCode(), clone(), finalize(), wait(), notify(), notifyAll() - Object类只声明了一个空参的构造器。
- 垃圾回收机制
在对象回收之前,会调用finalize这个方法。
二. 面试题:==和equals的区别
1.== :运算符
- 可以使用在基本数据类型和引用数据类型变量中
- 如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等(类型不一定相等)。如果比较的是引用数据类型变量:比较两个变量的地址值是否相同,即两个引用是否指向同一个对象实体。
- ==符号使用时,必须保证符号左右两边类型一致。
2.equals()方法的使用
- 是一种方法,而非运算符,只能适用于引用数据类型
- Object类中的equals()的定义和==的作用是相同的,即比较两个变量的地址值是否相同,即两个引用是否指向同一个对象实体。
- 像String,Data,File,包装类等都重写了equals()方法,比较的是两个对象的"实体内容"是否相同。
- 我们自定义的类如果使用equals()的话,通常是比较"实体内容"是否相同,我们就要对equals()方法进行重写。重写的原则:比较"实体内容"是否相同。
三. toString()的使用
1.当我们输出一个对象的引用时,实际上调用的就是当前对象的toString()。
2.像String,Date, File,包装类等都重写了Object类的toString()方法,使得在调用对象的toString()时,返回"实体内容"信息。
3.自定义类也可以重写toString()方法,当调用此方法时,返回的是"实体内容"。
包装类
1.Java提供了8种基本数据类型对应的包装类,使得类的基本数据类型变量具有类的特征。
2.掌握的是:基本数据类型,包装类,String三者之间的转换
JDK5.0的新特性:自动装箱和自动拆箱
3.包装类常见面试题
先是类型一致,则先不考虑true还是false,后面的数据类型提升到double型,因而输出的结果是1.0
内部类
1.Java中允许将类A声明在另一个类B中,则类A就是内部类,类B称为外部类。
2.内部类的分类:成员内部类(静态,非静态)vs 局部内部类(方法内,代码块内,构造器内)
3.成员内部类
(1)作为外部类的成员
- 可以调用外部类的结构。
- 可以被static修饰。
- 可以被四种不同的权限修饰符修饰。
(2)作为一个类 - 类内可以定义属性,方法,构造器等。
- 可以被final修饰,表示此类不能被继承。
- 可以被abstract修饰,表示此类不能实例化。
4.关注以下三个问题
(1)如何实例化成员内部类的对象
(2)如何在成员内部类中区分调用外部类的结构
(3)开发中局部内部类的使用
5.注意点
规定:在局部内部类的方法中,如果调用局部内部类中所声明的方法中的局部变量的话,要求此局部变量要声明成final的。
(JDK7及以前的版本,要求此局部变量显式的声明为final的。JDK8及以后的版本,可以省略final的声明。)
6.总结
成员内部类和局部内部类,在编译之后都会生成字节码文件。
格式: 成员内部类:外部类 内部类名.class
局部内部类:外部类$数字 内部类名.class