我知道静态块在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");
}
}
答案 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不需要实例,因此这两个方面没有关系。