静态块和正常块

时间:2013-09-25 05:11:29

标签: java

我知道静态块在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");
}
}

6 个答案:

答案 0 :(得分:2)

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

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

我认为你得到了我的观点......

答案 1 :(得分:1)

在加载类时执行静态块,在创建包围块的类的实例时执行常规块。

只是为了在java 7之前的记录,在项目中搜索main()方法之前执行了静态块。但是从java 7 main()首先查找起来。如果你没有main,你会收到一个错误。所以说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

答案 2 :(得分:0)

只要您实例化一个对象,就会运行非静态块inside main。尝试在prog obj=new prog();

之前打印一些内容

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

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");
    }
}

答案 3 :(得分:0)

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

的主要区别

答案 4 :(得分:0)

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

答案 5 :(得分:0)

在实例化类的实例时运行正常的init块。静态方法,比如main,doe不需要实例,因此这两个方面没有关系。