日期:2014-05-20 浏览次数:20771 次
public class A { int a; //方法1 先定义 //int a = 5; //方法2 定义时直接赋值 {System.out.println(a);} //如果有这样的处理 public A() { a = 5; //方法1 然后在构造方法赋值 } public static void main(String[] args) { new A(); } }
------解决方案--------------------
声明时为成员变量赋值,那么你一创建对象,这个赋值就进行,而且先于构造器执行。
而且你每次创建这个类的对象,都是同一个值,比如你声明的时候写private int age = 18;,那么你每一个对象的age的值都是被初始成18.但是如果你把赋值语句写在构造器,比如:
constructor(int a){ age = a; }
------解决方案--------------------
一定要注意,成员变量按照其声明的顺序会被初始化,
并且立刻被初始化为二进制的0,这个动作发生在所有事件之前,
也就是编译器会立刻将分配给对象的空间初始化。
最后就是调用类的构造方法了。
[b]执行顺序:
执行父类静态代码 执行子类静态代码
初始化父类成员变量(我们常说的赋值语句)
初始化父类构造函数
初始化子类成员变量
初始化子类构造函数[/b]
------解决方案--------------------
我觉得三楼的说法很有道理。
代码的稳定性非常重要。我们在设计的时候就必要考虑的代码后期维护的成本。