一.静态初始化块和声明静态成员变量时所指定的初始化值都是该类的初始化代码,他们的执行顺序与源程序中的排列顺序相同。
static int a = 9 ; static{ a = 6; } public static void main(String[] args) { System.out.println(TestRe.a); //输出结果为6 } static{ a = 6; } static int a = 9 ; public static void main(String[] args) { System.out.println(TestRe.a); //输出结果为9 }
二.== 两个变量时基本类型变量,且都是数值型,则只要两个变量的值相等,返回结果就相等。引用类型指向同一个对象,==才会返回true。
三.new String("hello");JVM会先使用常量池来存储“hello”的直接量,在调用String类的构造器来创建一个新的String的对象,新创建的String对象被保存在堆内存中,
换句话说,new String("hello"); 一共产生了两个字符串对象。
四。常量池专门用于管理在编译时被确定并被保存在已编译的.class文件中的一些数据,它包括了关于类,方法,接口中的常量,还包括字符串常量。
五。单列类,使用一个类变量来缓存曾经创建的实例,对构造器使用private修饰,隐藏该构造器。提供一个静态方法用于返回当前对象。
六。final修饰的实例变量,要么在定义该实例变量时指定初始值,要么在普通初始化块或构造器中为该实例变量指定初始值。
final修饰的类变量,要么在定义该类变量时初始化值,要么在静态代码块中指定初始值。
七。final 修饰引用变量值保证这个引用变量所引用的地址不会改变,即一直引用同一个对象,但这个对象完全可以发生改变
eg final int [] p = new int{1,3,4}; p[2] = 6; 此种写法合法。但 不可 p = null;
八。final修饰的变量不可被重写。final修饰的类不能有子类。
九、abstract修饰类,表示该类只能被继承。修饰方法表明这个方法必须由子类实现,所以此方法不能用private修饰。abstract不能用于修饰成员变量,不能用于修饰局部变量,不能修饰构造器。final 修饰的类不能继承,final修饰的方法不能被重写,所以final和abstract永远不可能一起使用。
十。接口可多继承。java8以上可以有默认方法,类方法。默认控制修饰符为public,指定访问控制修饰符也只能我public。
十一。接口可以有成员变量(只能是静态常量),方法(只能是抽象实例方法,类方法,默认方法和私有方法);
十二。接口和抽象类都不能实例化,他们位于继承树的顶端。用于被其他类实现和继承。
接口和抽象类都包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。