【发布时间】:2015-06-23 10:29:15
【问题描述】:
我有两个顶级类(BaseClass 和 B),BaseClass 中有 main 方法,也有内部类(名为笔记本电脑)。我知道每当加载类时都会执行静态块,但对于以下代码:
package kkk;
public class BaseClass
{
static BaseClass e=new BaseClass();
public BaseClass()
{
System.out.println("In baseclass constructor");
}
{
System.out.println("in baseclass nonstatic block");
}
static
{
System.out.println("in baseclass static block");
}
protected static class Laptop
{
int x=8;
public Laptop()
{
System.out.println("Inside laptop class");
}
void m1()
{
System.out.println("Inside inner class method");
}
}
public void hem()
{
System.out.println("In base class hem");
}
public static void main(String args[])
{
e.hem();
System.out.println("In main method baseclass");
B h=new B();
h.bhel();
}
}
class B
{
void bhel()
{
BaseClass.Laptop obj=new BaseClass.Laptop();
System.out.println(obj.x);
obj.m1();
}
}
通过运行上面的代码,我得到的输出是:
in baseclass nonstatic block
In baseclass constructor
in baseclass static block
In base class hem
In main method baseclass
Inside laptop class
8
Inside inner class
e 是静态引用变量,必须为其分配内存。因此,执行静态块。但是,为什么非静态块在静态块之前执行??
【问题讨论】:
标签: java