java5
子类默认会用super()调用父类构造方法F()
p=new Person(){{ age=12; name="zsan";}};//双括号写法来赋初值
实例初始化:类中直接写的{语句;...}//先于构造方法{}中的语句执行
静态初始化:static{语句;...}//先于实例的初始化
构造方法执行过程
先父类构造,再本类字段赋值,再构造方法中的语句
构造方法中最好不要调用别的方法。如果调用虚方法,就不合理了。
可以安全调用具有final属性的方法。
System.gc()方法建议系统进行垃圾回收
用finalize方法可以做析构功能,当然在子类中要调用父类的finalize方法。
内部类 Xxx$Xxx
不能与外部类同名;
在其他地方使用时, 外部对象名.new 内部类名(参数)
访问外部类字段或方法 外部类名.this.字段
可以的访问符 public protected private 默认
可以的修饰符 final,abstract
用static修饰 表明实际它是外部类
static类在new前面不用对象实例变量;
static类不能访问非static字段、方法;
局部类 (方法中的内部类,同局部变量一样)
不能用public,private,protected,static
可以用final、abstract
可以访问外部类成员
不能访问该方法的局部变量,除非它是final局部变量
匿名类 Xxx$1
没有名字的内部类,定义时就生成对象的一个实例,一次性使用
return new Object(){ //new ClassName/InterfaceName (){...}
public String toString(){ return ("..")}
}
不取名字,直接用其父类或接口的名字。
典型应用:注册一个事件监听器;作为方法的参数