Java疯狂讲义读书笔记第六章(二)

来源:互联网 发布:淘宝开什么店比较好 编辑:程序博客网 时间:2024/05/29 04:26
  1. 内部类, 在类中定义一个类。属于类的成员,可用访问控制符修饰,设置为静态。
  2. 非静态内部类的方法内访问某个变量顺序,在该方法中找–>>方法所在内部类–>>内部类所在外部类

    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();    }}
  3. 非静态内部类不能有静态声明(静态方法、静态成员变量、静态初始化块),外部类静态方法不可以访问非静态内部类。
  4. 静态内部类,用static修饰,包含静态成员,也可以包含非静态成员。但是静态内部类不可以访问外部类的实例成员,只能访问外部类的类成员(static修饰)。
  5. 在外部类以外使用非静态内部类,必须先实例化外部类。

    // 第一种写法Out.In in = new Out().new In();// 第二种写法Out.In in;Out out = new Out();in = out.new In();
  6. 在外部类以外使用静态内部类,无须实例化外部类。

    Out.In in = new Out.In();Out.In in;in = new out.In();
  7. 局部内部类,把一个定义在方法看里的内部类,仅在该方法里有效。不能再外部内的方法以外使用,所以不能使用访问控制符和static修饰。
  8. 匿名内部类(重点)适合创建那种只需要一次使用的类。一定一定要存在继承关系。

    public abstrct Father() {    public void show();}Father f = new Father() {  // 匿名内部类    public void show() {        System.out.println("匿名内部类");    }};f.show(); // 输出 匿名内部类
  9. Lambda表达式,支持将代码块用作方法参数,允许使用更简洁的代码来创建只有一个抽象方法的接口的实例。也可以叫(匿名函数)。
  10. 枚举类,实例个数有限且固定的类。用关键字enum定义。
  11. 枚举类继承自java.lang.Enum类(不是Object),所以不能显示的继承其他父类。enum类不能派生子类。枚举类的构造器只能使用private修饰,枚举类必须在类内部的第一行显示列出,否则这个枚举类不能产生实例。
  12. 垃圾回收机制只负责回收内存中的对象,不会回收任何物理资源。回收对象之前总是会调用finalize();方法,但该方法可能重新让一个引用变量指向该对象,导致取消回收。
  13. 对象在内存中的状态:可达、可恢复、不可达。创建对象后,若有一个以上的引用变量指向它,为可达状态。某个对象不再有任何引用变量引用它,为可恢复状态(若调用finalize()之前重新指向则恢复可达状态)。调用finalize()后没有变成可达状态则为不可达,系统才会真正回收。
  14. 强制系统进行垃圾回收。1.System.gc(); 2.Runtime.getRuntime().gc();
原创粉丝点击