局部内部类:
在局部位置中定义的类
局部内部类注意的事项:
局部内部类的成员可以直接访问外部类的成员,包括私有
-
外部类成员方法如何访问局部内部类的成员?
-
在当前外部类的成员方法中,只需要创建内部类对象调用它的方法
-
面试题:
-
局部内部类访问局部变量的时候,为什么JDK7(JDK7以前,包含JDK7版本)将局部变量使用final修饰?
-
JDK8版本已经局部变量做了优化(已经定义了final修饰)
-
局部变量的生命周期:随着方法调用而存在,随着方法调用完毕而消失,
-
由于当前局部内部类中的成员方法还在使用局部变量,间接通过了外部类的成员方法中创建内部类对象
-
访问内部类的成员方法—访问局部变量,对象不会立即被回收,需要等待GC空闲时候回收,内部类的成员方法
-
还在访问,需要将当前局部变量定义为常量—内存中固定值!
匿名内部类
是内部类的一种简化格式,没有具体类名
匿名内部类格式
new 抽象类类名/接口名(){
方法重写
};
匿名内部类本质
本质就是继承了抽象类的子类的对象,或者实现了接口的子实现类的对象
常用类-Object
包名: java.lang.Object
概念: Object类是类层次结构的根类,每个类都继承Object作为超类(父类)
- 方法: public final Class getClass(){…}
表示当前正在运行的类
返回值类型: Class 相当于正在运行类的字节码文件
补充: Class类 在java.lang.Class 包下
其中有个 public String getName(){}
以字符串形式展示字节码文件对象所表示的实体
任意Java类型.Class 相当于Class<类型> 表示类字面量 指向类对应的唯一对象
-
方法: public String toString()
返回该对象的字符串表示
建议所有的子类重写Object类中的toString()方法
一般情况自动生成
在实体类中通过Alt+shift+s—>s 重写Object中的toString()方法,否则就是地址值,没有意义
-
方法: public int hashCode()
返回该对象的哈希码值
-
方法: public boolean equals(Object obj)
表示其他对象与该对象是否"相等"
==和equals的区别
==连接两个基本类型的时候,判断两个数据值是否相等
==连接两个引用类型的时候,判断两个对象的地址值是否相等
equals默认比较两个对象的地址值是否相等
****一般我们需要比较引用类型的内容是否相等,需要重写equals方法以及重写hashCode()方法
自动生成 Alt+shift+s---->h
****一般我们需要比较引用类型的内容是否相等,需要重写equals方法以及重写hashCode()方法
自动生成 Alt+shift+s---->h