`

初始化问题

 
阅读更多

1.class Test{

         private int num;

         void ope(){

                   num++;

             }

       }

以上是合法的。

2.class Test{

         //private int num;

         void ope(){

                  int num;

                   num++;

             }

       }

以上是不合法的。

原因就是类的成员变量可以自动初始化(若为类的引用则不行)。而局部变量不可以。

 

由此引出对象的创建过程:

 

(1) 类型为Dog 的一个对象首次创建时,或者Dog 类的static 方法/static 字段首次访问时,Java 解释器

 

必须找到Dog.class(在事先设好的类路径里搜索)。

 

(2) 找到Dog.class 后(它会创建一个Class 对象,这将在后面学到),它的所有static 初始化模块都会运

 

行。因此,static 初始化仅发生一次——在Class 对象首次载入的时候。

 

(3) 创建一个new Dog()时,Dog 对象的构建进程首先会在内存堆(Heap)里为一个Dog 对象分配足够多的存

 

储空间。

 

(4) 这种存储空间会清为零,将Dog 中的所有基本类型设为它们的默认值(零用于数字,以及boolean 和

 

char 的等价设定)。

 

(5) 进行字段定义时发生的所有初始化都会执行。

 

(6) 执行构建器。正如第6 章将要讲到的那样,这实际可能要求进行相当多的操作,特别是在涉及继承的时

 

候。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics