woaiyingyu321 2010-05-04 21:05
浏览 186
已采纳

这里有一点误区。帮忙解决一下困惑。谢谢!

package ch08;

class MyBook{
MyBook(int maker){
System.out.println("MyBook("+maker+")");
}
void foo(int maker){
System.out.println("foo("+maker+")");
}
}

class MyPackage{
static MyBook b1 = new MyBook(1);
MyPackage(){
System.out.println("MyPackage()");
b2.foo(1);
}
void foo2(int maker){
System.out.println("foo2("+maker+")");
}
static MyBook b2 = new MyBook(2);
}

class MyRoom{
MyBook b3 = new MyBook(3);
static MyBook b4 = new MyBook(4);
MyRoom(){
System.out.println("MyRoom()");
b4.foo(2);
}
void foo3(int maker){
System.out.println("foo3("+maker+")");
}
static MyBook b5 = new MyBook(5);
}
public class StaticIni{
public static void main(String[] args){
System.out.println("Creating new MyRoom() in main");
new MyRoom();
System.out.println("Creating new MyRoom() in main");
new MyRoom();
t2.foo2(1);
t3.foo3(1);
}
static MyPackage t2 = new MyPackage();
static MyRoom t3 = new MyRoom();
}

我的疑惑是在这里
class MyPackage{
static MyBook b1 = new MyBook(1);
MyPackage(){
System.out.println("MyPackage()");
b2.foo(1);
}
void foo2(int maker){
System.out.println("foo2("+maker+")");
}
static MyBook b2 = new MyBook(2);
}

b2这个对象为什么先使用b2.foo(1);然后再声明引用static MyBook b2 = new MyBook(2);
这样不是违反了规则了吗?

  • 写回答

1条回答 默认 最新

  • xie2022228 2010-05-04 21:31
    关注

    static MyBook b2 = new MyBook(2);
    b2是类的静态变量,虚拟机初始化顺序早于MyPackage(){
    System.out.println("MyPackage()");
    b2.foo(1);
    }

    看看java虚拟机吧

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复