在Java中使用静态修饰符的类加载和静态块执行
Static 是一个关键字,当附加到方法、变量时,Block 使其成为类方法、类变量和类 Block。您可以使用 ClassName 调用静态变量/方法。 JVM 在“ CLASS LOADING TIME”执行静态块
执行顺序:
静态块/方法/变量有一个初始化顺序。
- 静态块
- 静态变量
- 静态方法
甚至在 main 方法之前调用静态块,它只是一个静态方法,即每个类的执行点。
笔记:
Sometimes, it is asked in interviews, to print “HELLO” without printing it inside main method or calling any method from main. Answer is to use Static block as they get initialized before main so you can use them to print anything without having any dependency on main Method in java.
Java
// Class Loading and Static Blocks
// Execution Using Static Modifier in Java
import java.io.*;
class GFG {
public static void main(String[] args)
{
// Created 3 Threads
MyThread myThread1 = new MyThread();
myThread1.start();
MyThread myThread2 = new MyThread();
myThread2.start();
MyThread myThread3 = new MyThread();
myThread3.start();
}
}
class MyThread extends Thread {
// Static Variable count is maintained across
// all threads as it is only created once
static int count = 0;
// Non Static Variable count is maintained seprately
// for seprate thread As non-static variables are
// created for every thread
int notStatic = 0;
public void run()
{
count++;
notStatic++;
System.out.println("Thread = " + count);
System.out.println("Non Static Variable Value="
+ notStatic);
}
}
Java
// Class Loading and Static Blocks
// Execution Using Static Modifier in Java
import java.io.*;
class GFG {
// Static Variable
public static void main(String[] args)
{
System.out.println("Static Variable=" + count);
System.out.println("Static Method");
}
// Static Variable
static int count = 3;
// Called even before Main Method
static { System.out.println("Static Block"); }
}
Thread = 3
Thread = 2
Non Static Variable Value=1
Thread = 1
Non Static Variable Value=1
Non Static Variable Value=1
静态变量
您可以使用静态变量来节省内存或在您希望所有线程维护一个变量而不是为每个线程使用不同变量的操作中。
静态方法
当方法比类的实例与类更相关时使用。 Java中的数学类是Java中的一个很好的例子。它具有所有静态方法,您可以使用类名(如 max、min、pow)调用这些方法,因为这些函数不需要不同的对象具有不同的值。您可以使用 className.methodName() 传递参数并获得答案。
静态块
当您想在执行控制转到其他方法(如 main 方法)之前初始化任何数据时使用。
规则:
- 静态方法只能调用其他静态方法,即您不能像 main 方法那样从静态方法调用非静态方法。
- 静态块可以直接使用唯一的静态变量
单例设计模式是最广泛使用的设计模式,其中对于类的每个实例请求,只创建和返回一个类的实例。 static 关键字用于仅创建一次对象,因为静态只占用内存一次,因此每次调用都会保持同步。
下面的示例清楚地显示了执行顺序。即使在 main 方法之后编写静态块,也会首先调用它。它证明了静态块是在 main 方法之前首先被调用的东西。
Java
// Class Loading and Static Blocks
// Execution Using Static Modifier in Java
import java.io.*;
class GFG {
// Static Variable
public static void main(String[] args)
{
System.out.println("Static Variable=" + count);
System.out.println("Static Method");
}
// Static Variable
static int count = 3;
// Called even before Main Method
static { System.out.println("Static Block"); }
}
Static Block
Static Variable=3
Static Method
真实示例:为了将输出附加到同一个日志文件,创建一个记录器对象,并使用 logger.info() 可以按插入顺序附加数据。