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>