假如B是A的子类
那么如果有一个线程正在加载类A.在类A未加载完成之前,另外一个线程能否加载类B.我的程序显示能够加载,而且这样居然造成一个结果,即子类的构造方法被调用而父类的方法因为其类没有被加载而不能被调用,最后因为加载完成没有调用
那么如果有一个线程正在加载类A.在类A未加载完成之前,另外一个线程能否加载类B.我的程序显示能够加载,而且这样居然造成一个结果,即子类的构造方法被调用而父类的方法因为其类没有被加载而不能被调用,最后因为加载完成没有调用
解决方案 »
- 初学java,求代码解释
- 用JAVA语言编写一个程序求一个一元三次方程的根(用弦截法)
- 对于编程来说,内存里面都有什么?
- 如何在applet里显示表格?
- JScrollPane.setViewportView()函数是什么意思啊?API上看的不怎么懂呃!?
- 初学java在编译时出错不知道怎么改,请大虾指正
- 那位好心人把bdk发到我的信箱里,多谢了
- 请教高手:在java中如何禁止屏幕考屏,就是Print Screen键。100分
- 谁能解释该段代码的运行结果?
- LinkedList的对象不能访问其方法,什么回事
- 请问这种格式的日期字符串(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 运行结束