Java 静态块和正常块
我知道静态块在主块之前运行。 但是,正常的块是在main之前运行还是在main之后运行Java 静态块和正常块,java,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"); } } 无论何时实例化对象,非静态块one都会运行,在
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");
}
}
无论何时实例化对象,非静态块one都会运行,在您的示例中,
inmain
。在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");
}
}
实际上,静态块或SIB(静态初始化块)在类加载时加载,因此它在main()之前执行
但非静态块或IIB(实例初始化块)的情况并非如此,它仅在对象创建(实例)时加载,因为名称也阐明了相同的
我想你明白我的意思了。静态块是一个块,在这个块中,如果我们指定任何变量或静态类,我们可以通过它的类名访问它的数据成员到另一个类中或该类之外。
普通块是在其中创建类或该类的对象的块。如果我们想在另一个类中使用它,我们必须创建该类的构造函数,然后才能访问其对象。
所以这是静态块和普通块的主要区别,普通块将在编译时创建该类的实例时运行。静态块在程序执行过程中只运行一次。因此,如果您希望在创建该类的实例之前打印一些内容,请将其放入静态块中。加载类时执行静态块,创建包含该块的类的实例时执行普通块。
仅针对java之前的记录,在项目中搜索main()方法之前执行了7个静态块。但是从Java7开始,main()是首先查找的。因此,如果没有main,您将得到一个错误。因此说我知道静态块在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
当一个类的实例被实例化时,运行普通的init块。静态方法,比如main,不需要实例,所以这两个东西是不相关的。为什么不自己运行并查看呢?!说真的,在您最喜欢的IDE中运行这段代码会更容易。如果您手头没有静态块,请更具体地说,使用静态块在加载类时运行…在main之前很早就有了。每当您实例化包含这些块的类的对象时,就会运行非静态块。此外,值得一提的是,类中的非
静态
代码块将在执行类构造函数之前执行。请参见“是”,非静态块是编译器为所有类生成的init
方法的一部分,该方法在构造函数之前运行。