什么是Java中的类加载和静态块?
类加载是将特定于类的信息存储在内存中的过程。特定于类的信息意味着关于类成员的信息,即变量和方法。就像在发射子弹之前,首先我们需要将子弹装入手枪中。类似地,要首先使用一个类,我们需要通过类加载器来加载它。静态块在一个类的生命周期中只运行一次。它只能访问静态成员并且只属于类。
静态块就像任何以“static”关键字开头的代码块都是静态块。 Static 是一个关键字,当附加到方法、变量时,Block 使其成为类方法、类变量和类 Block。您可以使用 ClassName 调用静态变量/方法。 JVM 在“类加载时间”执行静态块。
执行顺序: 对于每个静态块,都有一个初始化静态块/方法/变量的顺序。
- 静态块
- 静态变量
- 静态方法
Now figuring out the connection between class loading and static block after having an idea over the static block and class loading, it is found that execution of a static block happens when a class gets loaded for the first time. It is a series of steps.
插图:展示该静态块的通用执行应该通过前面提到的一系列步骤发生。
随机考虑一个Java文件'File. Java',其中有一个静态块,然后是一系列提到的步骤。
- 编译Java文件。
- 执行Java文件。
- Java虚拟机JVM在程序中调用main方法。
- 类已加载,所有必要的信息现在都已存储在内存中。
- 静态块的执行开始。
例子
Java
// Java Program to illustrate static block concept
// alongside discussing the class loading
// Importing all input output classes
import java.io.*;
// Class
class GFG {
// Static block
static
{
// Static block will be executed first
// before anything else
// Print message
System.out.println(
"I am static block and will be shown to eyeballs first no matter what");
}
// Main driver method
public static void main(String[] args)
{
// Print message
// Now main method will execute
System.out.println(
"I am the only line in main method but static block is hindering me to display first");
}
}
I am static block and will be shown to eyeballs first no matter what
I am the only line in main method but static block is hindering me to display first