/*类的成员变量会在类加载时先默认初始化,方法体和代码块局部变量必须指定初始值。否则不可访问
* 方法局部变量 代码块局部变量 能用代码块局部变量就用代码块
*
* 赋值优先级大于构造方法。
*
*
* 运行的优先级是 静态块(从上到下按顺序执行,且在类加载的时候就会执行)
* 父类静态块-》本类静态块-》父类非静态块-》父类构造-》父类非静态块(只有在new时才会执行,执行在构造方法之前,new时非静态块执行本在声明变量之前,
* 如果非静态块中使用了该变量,会提前声明. new 构造();的优先级相当于主动调用普通方法,调用的普通方法
* 和非静态块级别相同)
*
* 静态块-》非静态块-》构造
* -》构造方法
*/
public class TestStaticCode{
private static TestStaticCode tsc=new TestStaticCode();
static{
System.out.println("4");
}
private Instance iv=new Instance();//private Instance iv; {iv=newinstanceVariable()};
private TestStaticCode(){
System.out.println("3");
}
public static void main(String[] args) {
}
}
class Instance{
static{
System.out.println("1");
}
public Instance(){
System.out.println("2");
}
}
内存占用
讲解重写与重载 向上造型 多态
面向接口 类与类之间降低耦合度
面向切面(AOP) 动态代理(本质是利用了反射机制) 通常我们遇见很多方法同时存在相同代码时会封装成方法然后再调用,
当用了动态代理后 动态代理对象在调用原有方法时可以在之前或者之后加上相同的代码段但原对象不用调用。
动态代理对象的任何方法一调就会生成相同的代码。
泛型是为了更好的运用工厂方法,生产对象。
也可包装源码,固定泛型 例如数组的泛型<?>跟没加没区别
解耦 分层
//javac的时候(编译的时候),方法名是不包含参数类型的。除非设定 -parameters
//动态代理在编写框架或底层基础代码时,经常用到。