Think in java 笔记

1.Java中唯一用到逗号操作符的地方——for循环  for(int i = 0,length = array.legnth;i < length;i ++)

2.创建子类对象时执行顺序:将分配给对象的内存初始化为0——父类静态域——子类静态域——父类普通域——父类构造方法——子类普通域——子类构造方法

3.可变参数列表:public void method(Object...args),可以代表0个参数,实质是数组

4.前期绑定,后期绑定

5.运行时类似识别(RTTI)  :向下转型(Downcast);反射机制

6.抽象类可以没有抽象方法,可以有构造方法

7.接口的域默认时static和final的

8.Scanner构造器接受实现Readable接口的类的实例

9.代理模式,适配器模式,工厂模式

10.内部类

普通内部类实例化对象:Outter.Inner in = out.new Inner();

静态内部类实例化对象:Outter.Inner in = new Outter.Inner();

内部类使用外部类对象:Outter.this

内部类和静态内部类在用到时才会加载,静态内部类适合单例模式

public class Singleton {  
    private Singleton() {}  
      
    static class SingletonHolder {  
        private static final Singleton instance = new Singleton();  
    }  
      
    public static Singleton getInstance() {  
        return SingletonHolder.instance;  
    }  
}  

如果仅通过Outter.StaticInner调用静态内部类的静态变量或静态方法(与Outter无关的)则不会触发Outter的加载,只会加载StaticInner

Lambda表达式

用来简化实现函数式接口(只有一个方法的接口)的代码,由  (参数列表)  ->  方法体或者表达式  组成,其中如果只有一个参数的话括号可以省去,例如:

Runnable race1 = new Runnable() { 
    @Override 
    public void run() { 
        System.out.println("Hello world !"); 
    } 
};

Lambda实现:Runnable race1 = ()->System.out.println("Hello world!");

Comparator<String> c = new Comparator<>(){

@Override

  public int compare(Stirng a,String b){

    return a.compareTo(b);

  }

};

Lambda实现Comparator c = (a,b)->a.compareTo(b);

11.动态代理,Proxy类,InvocationHandler接口

12.泛型擦除,运行时会擦除到其第一个边界

13.nio ,内存映射文件,ZIP,GZIP,对象序列化

14.枚举,enum Test{FIRST,SECOND,THIRD}; 其中Test为枚举名,和类名差不多,FIRST等时Test的枚举实例 Test extends Enum<Test>

猜你喜欢

转载自www.cnblogs.com/xiao-ji-xiang/p/9840240.html