关于类继承初始化问题

chjwin 2009-08-19 04:46:41
对于由引用类变量(class field)所引发的初始化,只会初始化真正定义该field的class。

这句话怎么去理解?有什么样的例子可以证明这一句话的正确性!请高手帮忙写个简单例子!
请高手指教,先谢为主,谢谢大家!
...全文
73 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
humanity 2009-08-19
  • 打赏
  • 举报
回复
哦,还是拼写错误啊,^_^, 我的 CLASSPATH 环境变量中有 CLASSPATH=.; 这是安装 JDK 时自动设置的,所以没出错,你也可以把 java.exe X 改成 java -cp . X 来运行。
humanity 2009-08-19
  • 打赏
  • 举报
回复
纠正拼写错误:

2.我们不用 eclipse,我们打开 cmd.exe 去 X.class 对应的目录,手工输入 java.exe X 来运行程序,注意,我没有给 -classpath,当然这个 Advice 类就在当前类路径中找不到,但是你会发现我的程序没有报告 ClassNotFoundException。
humanity 2009-08-19
  • 打赏
  • 举报
回复
楼主可能在看 JVM 相关的书籍,我猜测你的问题可以通过下面这个实验了解方向在哪儿,当然我是在猜测,不一定猜对了。

用下面这个类,楼主做个实验,按如下步骤:
1.先在 classpath 中添加 Advice 对应的 jar 包,让编译通过,当然我只是随便找一个类,你可以不用Advice而用任何在 JDK 中没有自带的类并且类路径中只包含这个对应的 jar 包,这一步你只要让程序编译通过就行了。

2.我们不用 eclipse,我们打开 cmd.exe 去 X.class 对应的目录,手工输入 java.exe -cp X 来运行程序,注意,我没有给 -classpath,当然这个 Advice 类就在当前类路径中找到,但是你会发现我的程序没有报告 ClassNotFoundException。

通过这个实验,我们证实了 JVM 规范里的一句话,当我们事实上没有用到一个类时 JVM 实现不必初始化这个类,但是你提前初始化也没关系,只不过有一点要注意,在事实上没有用到这个类时我们不能抛出因为用到这个类才会产生的异常,在我们例子,JVM 实现不能抛出 Advice ClassNotFoundException, 因为事实上并没有用到 Advice 类。

3.我们再把 X() 这个构造方法改成下面这个样子,然后再重复上面第1步和第2步来试试看结果是否不一样?
public X() {
System.out.println("Constructor");

advice = new Advice(){};
)


<我们先假设没有包名,这个不重要>
import org.aopalliance.aop.Advice;

public class X {
private Advice advice = null;

public static void hello() {
System.out.println("Hello");
}

public X() {
System.out.println("Constructor");
}

public static void main(String[] args) {
hello();

X x = new X();
}
}
woming66 2009-08-19
  • 打赏
  • 举报
回复
?没明白
bean 2009-08-19
  • 打赏
  • 举报
回复
我咋觉得这句话是错的呢,

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧