JAVA初始化顺序略谈
package com.wensefu.constructor;
class Meal{
Meal(){
System.out.println("Meal()");
}
}
class Bread{
Bread(){
System.out.println("bread()");
}
}
class Chesse{
Chesse(){
System.out.println("Chesse()");
}
}
class Lettuce{
Lettuce(){
System.out.println("Lettuce()");
}
}
class Lunch extends Meal{
Lunch(){
System.out.println("Lunch()");
}
}
class PortableLunch extends Lunch{
PortableLunch(){
System.out.println("PortableLunch()");
}
}
/*
* 1,调用基类构造器,此过程会反复递归下去
* 2,按照声明顺序调用成员的初始化方法
* 3,调用导出类构造器的主体
*/
public class Demo extends PortableLunch{
private Bread b=new Bread();
private Chesse c=new Chesse();
private Lettuce l=new Lettuce();
public Demo() {
// TODO Auto-generated constructor stub
System.out.println("Demo()");
}
public static void main(String[] args) {
new Demo();
}
}
输出:
Meal()
Lunch()
PortableLunch()
bread()
Chesse()
Lettuce()
Demo()
package com.wensefu.duotai;
abstract class Glyph{
abstract void draw();
Glyph(){
System.out.println("Glyph() before draw()");
draw();
System.out.println("Glyph() after draw()");
}
}
class RoundGlyph extends Glyph{
private int radius=1;
RoundGlyph(int r){
radius=r;
System.out.println("RoundGlyph.RoundGlyph(), radius="+radius);
}
@Override
void draw() {
// TODO Auto-generated method stub
System.out.println("RoundGlyph.draw(),radius="+radius);
}
}
/*
* 初始化实际过程:
* 1,在其他任何事物发生之前,将分配给对象存储空间初始化成二进制的零
* 2,调用基类构造器,此时,调用被覆盖后的draw()方法,(在调用RoundGlyph构造器之前调用),
* 3,按照声明的顺序调用成员的初始化方法
* 4,调用导出类的构造方法
*/
public class PolyConstructors {
public static void main(String[] args) {
new RoundGlyph(6);
}
}
输出:
Glyph() bef
相关文档:
将某 class 产生出一个 instance 之后,此 class 所有的 instance field 都会新增一份,那么所有的 instance method 是否也会新增一份?答案是不会,我们用field表示字段,用method表示方法,那么加上static区分后就 有四种:
class field:有用static修饰的field
class method:有用static修饰的method
instance fi ......
java工作者社区主办
1. 【复选】收入有涨,有干头
22.22%
2. 【复选】收入不乐观,没干头
8.89%
3. 【单选】年收入50万以上
2.22%
4. 【单选】年收入20万~50万
4.44%
5. 【单选】年收入10万~20万 ......
对于防御性编程而言,assert一直都是非常重要的工具。但对于熟悉-ea参数的Java程序员而言,当他们看到所有Groovy断言无论是否有-ea都照样执行时一定会非常困惑。
事实上,Groovy的断言是无条件开启的!
对此,开发人员Roshan Dawrani做了如下解释:(原文)
The JDK documentation has a long chapter on assertions tha ......