1

我知道静态块在 main 之前运行。但是普通块是否也在 main 之前或之后运行?

class prog
{
static
{
System.out.println("Static");
}
{
System.out.println("Block");
}

public static void main(String args[])
{
prog obj=new prog();
System.out.println("Main");
}
}
4

6 回答 6

2

实际上,静态块或 SIB(静态初始化块)在类加载时加载,因此它在 main() 之前执行。

但非静态块或 IIB(实例初始化块)的情况并非如此,它仅在对象创建(实例)时加载,因为名称也阐明了相同...

我想你明白我的意思了...

于 2013-09-25T05:17:49.850 回答
1

静态块在加载类时执行,而普通块在创建包含该块的类的实例时执行。

只是为了在项目中搜索 main() 方法之前执行 java 7 静态块之前的记录。但是从 java 7 main() 首先查找。因此,如果您没有 main.so 会出现错误。所以说I know the static blocks run before main有点模棱两可。main() 方法在执行静态块之前查找,但主要执行将在处理静态块之后开始。

在调用相应的构造函数之前,也会执行非静态块。例如

public class Tester {

{
    System.out.println("In some random block");
}

static {
    System.out.println("In static block");
}

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


public static void main(String args[]) {
    Tester t = new Tester();
}


}

将打印

In static block
In some random block
Constructor
于 2013-09-25T05:24:24.060 回答
0

在您的情况下,每当您实例化一个对象时,就会运行非静态块inside main。尝试打印之前的东西prog obj=new prog();

如果我有类似下面的内容,它将在 main.js 之前运行。

class prog {
    static {
        System.out.println("Static");
    }
    {
        System.out.println("Block");
    }

    prog obj = new prog();
    public static void main(String args[]) {
        System.out.println("Main");
    }
}
于 2013-09-25T05:12:51.567 回答
0

静态块是块,如果我们在其中指定任何变量或类静态,我们可以通过其类名将其数据成员访问到另一个类或该类之外。普通块是在其中创建一个类或创建该类的对象的块。如果我们想在另一个类中使用它,我们必须创建该类的构造函数,然后我们才能访问它的对象。所以这是静态块和普通块的主要区别

于 2013-09-25T05:20:14.073 回答
0

当在编译时创建该类的实例时,将运行普通块。并且静态块将在程序执行中只运行一次。所以如果你想要一些应该在创建该类的实例之前打印的东西,那么把它放在静态块中。

于 2013-09-25T05:23:04.473 回答
0

实例化类的实例时运行正常的 init 块。静态方法,像 main 一样,不需要实例,所以这两件事没有关系。

于 2013-09-25T05:26:13.117 回答