假如B是A的子类
那么如果有一个线程正在加载类A.在类A未加载完成之前,另外一个线程能否加载类B.我的程序显示能够加载,而且这样居然造成一个结果,即子类的构造方法被调用而父类的方法因为其类没有被加载而不能被调用,最后因为加载完成没有调用
那么如果有一个线程正在加载类A.在类A未加载完成之前,另外一个线程能否加载类B.我的程序显示能够加载,而且这样居然造成一个结果,即子类的构造方法被调用而父类的方法因为其类没有被加载而不能被调用,最后因为加载完成没有调用
解决方案 »
- java swing与windows 本地应用窗口集成的方法
- 关于JComboBox的问题,请教各位高手
- 请教 边缘点的判断问题
- 刚学完类这一章,感觉做这个题目好像知道思路,但写出来的东西就是不能运行,大家看下这个应该怎么着手编写思路啊
- byte[]如何转换为int
- 弹出对话框为什么切换界面时会掩藏到主画面后
- jdk里面的问题,总能碰到。但是看不动是什么意思。
- 小弟想学java!但是太菜,不知从哪里开始??有劳高手指点指点??
- 怪事情,重装系统后最简单的HelloWorld程序都不能编译成功?
- 配置springMVC加hibernate 遇见的问题
- 请问这种格式的日期字符串(10/Sep/2009:23:59:47),如何转化为日期类型的值
- 如何统计重复出现的个数?
package com;
public class A {
static{
try {
new C().start();//启动另外一个线程
Thread.sleep(3000);//为了实现顺序,在这里耽搁3秒
System.out.println("A");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] a){
}
}//在这里运行
package com;public class B{
static int a=2;
static {
System.out.println("static b");
}
public B(){
System.out.println("b");
}
}
package com;public class C extends Thread{
static{
System.out.println("static c");
}
public void run(){
System.out.println(new B());//加载B
}
public C(){
System.out.println("c");
}
}
结果是:
static c
c
static b
b//直接加载B类和构造方法
com.B@61de33
A//然后加载类A,连A得构造方法都没有运行
public class MyJava{
public static void main(String[] args){
TA t1=new TA();
TB t2=new TB();
t1.start();
t2.start();
}
}class TA extends Thread{
public void run(){
System.out.println("TA 运行开始");
new Base();
System.out.println("TA 运行结束");
}
}class TB extends Thread{
public void run(){
System.out.println("TB 运行开始");
new Sub();
System.out.println("TB 运行结束");
}
}public class Base{
static{
System.out.println("正在初始化Base类");
try{
Thread.sleep(3000);
}catch(Exception e){
System.out.println("Base ERROR");
}
}
}public class Sub extends Base{
static{
System.out.println("正在初始化Sub类");
try{
Thread.sleep(3000);
}catch(Exception e){
System.out.println("Sub ERROR");
}
}
}运行结果:TA 运行开始
TB 运行开始
正在初始化Base类
TA 运行结束
正在初始化Sub类
TB 运行结束