深入理解Java初始化的含义

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

可以这样认为,每个类都有一个名为Initialize()的方法,这个名字就暗示了它得在使用之前调用,不幸的是,这么做的话,用户就得记住要调用这个方法,Java类库的设计者们可以通过一种被称为构造函数的非凡方法,来保证每个对象都能得到被始化.假如类有构造函数,那么java就会在对象刚刚创建,用户还来不及得到的时候,自动调用那个构造函数,这样初始化就有保障了。

我不知道原作者的描述和译者的理解之间有多大的差异,结合全章,我没有发现两个最要害的字""和""。至少说明原作者和译者并没有真正说明JVM在初始化时做了什么,或者说并不了解JVM的初始化内幕,要不然明明有这两个方法,却为什么要认为有一个事实上并不存在的"Initialize()"方法呢?

""和""方法在哪里?这两个方法是实际存在而你又找不到的方法,也许正是这样才使得一些大师都犯晕。加上jdk实现上的一些BUG,假如没有深入了解,真的让人摸不着北。

现在科学体系有一个希奇的现象,那么庞大的体系最初都是建立在一个假设的基础是,假设1是正确的,由此推导出2,再继续推导出10000000000。可惜的是太多的人根本不在乎2-100000000000这样的体系都是建立在假设1是正确的基础上的。我并不会用“可以这样认为”这样的假设,我要确实证实""和""方法是真真实实的存在的:

package debug;

public class MyTest{

static int i = 100/0;

public static void main(String[] args){

Ssytem.out.println("Hello,World!");

}

}

执行一下看看,这是jdk1.5的输出:

java.lang.ExceptionInInitializerError

Caused by: java.lang.ArithmeticException: / by zero

at debug.MyTest.(Test.java:3)

Exception in thread "main"

请注重,和其它方法调用时产生的异常一样,异常被定位于debug.MyTest的.

再来看:

package debug;

public class Test {

Test(){

int i = 100 / 0;

}

public static void main(String[] args) {

new Test();

}

}

jdk1.5输入:

Exception in thread "main" java.lang.ArithmeticException: / by zero

at debug.Test.(Test.java:4)

at debug.Test.main(Test.java:7)

JVM并没有把异常定位在Test()构造方法中,而是在debug.Test.。

当我们看到了这两个方法以后,我们再来具体讨论这两个“内置初始化方法”(我并不喜欢生造一些非标准的术语,但我确实不知道如何规范地称呼他们)。

内置初始化方法是JVM在内部专门用于初始化的特有方法,而不是提供给程序员调用的方法,事实上“<>”这样的语法在源程序中你连编译都无法通过。这就说明,初始化是由JVM控制而不是让程序员来控制的。

三层交换技术

交换机与路由器密码恢复

交换机的选购

路由器设置专题

路由故障处理手册

数字化校园网解决方案

类初始化方法:

我没有从任何地方了解到的cl是不是class的简写,但这个方法确实是用来对“类”进行初始化的。换句话说它是用来初始化static上下文的。

在类装载(load)时,JVM会调用内置的方法对类成员和静态初始化块进行初始化调用。它们的顺序按照源文件的原文顺序。

我们稍微增加两行static语句:

package debug;

public class Test {

static int x = 0;

static String s = "123";

static {

String s1 = "456";

if(1==1)

throw new RuntimeException();

}

public static void main(String[] args) {

new Test();

}

}

然后进行反编译:

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航