- 内部类, 在类中定义一个类。属于类的成员,可用访问控制符修饰,设置为静态。
非静态内部类的方法内访问某个变量顺序,在该方法中找–>>方法所在内部类–>>内部类所在外部类
public class OutClass { private String prop = "123"; private class inClass { private String prop = "456"; private void info() { prop = "666"; System.out.println(prop); // 输出 666 System.out.println(this.prop); // 输出 456 System.out.println(OutClass.this.prop); // 输出 123 } } public void test() { inClass in = new inClass(); in.info(); } }
- 非静态内部类不能有静态声明(静态方法、静态成员变量、静态初始化块),外部类静态方法不可以访问非静态内部类。
- 静态内部类,用static修饰,包含静态成员,也可以包含非静态成员。但是静态内部类不可以访问外部类的实例成员,只能访问外部类的类成员(static修饰)。
在外部类以外使用非静态内部类,必须先实例化外部类。
// 第一种写法 Out.In in = new Out().new In(); // 第二种写法 Out.In in; Out out = new Out(); in = out.new In();
在外部类以外使用静态内部类,无须实例化外部类。
Out.In in = new Out.In(); Out.In in; in = new out.In();
- 局部内部类,把一个定义在方法看里的内部类,仅在该方法里有效。不能再外部内的方法以外使用,所以不能使用访问控制符和static修饰。
匿名内部类(重点)适合创建那种只需要一次使用的类。一定一定要存在继承关系。
public abstrct Father() { public void show(); } Father f = new Father() { // 匿名内部类 public void show() { System.out.println("匿名内部类"); } }; f.show(); // 输出 匿名内部类
- Lambda表达式,支持将代码块用作方法参数,允许使用更简洁的代码来创建只有一个抽象方法的接口的实例。也可以叫(匿名函数)。
- 枚举类,实例个数有限且固定的类。用关键字enum定义。
- 枚举类继承自java.lang.Enum类(不是Object),所以不能显示的继承其他父类。enum类不能派生子类。枚举类的构造器只能使用private修饰,枚举类必须在类内部的第一行显示列出,否则这个枚举类不能产生实例。
- 垃圾回收机制只负责回收内存中的对象,不会回收任何物理资源。回收对象之前总是会调用finalize();方法,但该方法可能重新让一个引用变量指向该对象,导致取消回收。
- 对象在内存中的状态:可达、可恢复、不可达。创建对象后,若有一个以上的引用变量指向它,为可达状态。某个对象不再有任何引用变量引用它,为可恢复状态(若调用finalize()之前重新指向则恢复可达状态)。调用finalize()后没有变成可达状态则为不可达,系统才会真正回收。
- 强制系统进行垃圾回收。1.System.gc(); 2.Runtime.getRuntime().gc();
Java疯狂讲义读书笔记第六章(二)
最新推荐文章于 2024-04-23 19:50:58 发布