1. Javaクラスの静的コードブロックの実行回数
1. クラス読み込みの初期フェーズでは、すべての静的ブロックとフィールドが収集され、クラス コンストラクターで実行されます。静的ブロックは 1 回だけ実行され、JVM はそれが 1 回だけ実行されることを保証します。
2. コード、ツール クラスで静的コード ブロックを使用する
public class HttpUtil {
static {
//创建HTTP的连接池管理对象
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
//将最大连接数增加到200
connectionManager.setMaxTotal(200);
//将每个路由的默认最大连接数增加到100
connectionManager.setDefaultMaxPerRoute(100);
HTTP_CLIENT = HttpClients.custom().setConnectionManager(connectionManager).build();
}
}
3. 静的コード ブロックの使用
1. プロジェクトはいくつかのデータを初期化し、2 か所で処理できます。
まず、プロジェクトが開始されると、特定のクラスをロードし、データをデジタル化します (基本データやデータベース接続プールの初期化など)。
2 つ目は、ツール クラスで静的なコード ブロックを使用することです。ツール クラスに初めてアクセスすると、最初に初期化され (1 回だけ実行され)、静的なグローバル属性に保存されます。他のクラスがそれにアクセスすると、再度、初期化データを直接使用します (redis データベースへの接続、接続プールの初期化など)。
4. 親クラスとサブクラスの実行順序
class StaticDemo{
//静态代码块
static {
System.out.println("父类静态代码块被执行");
}
//非静态代码块
{
System.out.println("父类非静态代码块被执行");
}
//构造方法
StaticDemo(){
System.out.println("父类构造方法被执行");
}
}
public class StaticTest extends StaticDemo {
/**
* 静态代码块的特点:
* 随着类的加载而执行,而且只执行一次
* 静态代码块额执行顺序优先于main函数
*/
static {
System.out.println("子类静态代码块被执行");
}
//非静态代码块
{
System.out.println("子类非静态代码块被执行");
}
StaticTest(){
System.out.println("子类构造方法被执行");
}
public static void main(String[] hq){
System.out.println("main函数");
new StaticTest();
}
}
概要: 静的コード ブロックは、クラスがロードされるときに実行され、一度だけ実行されます。new StaticTest() が実行を開始すると、最初に親クラスの静的コード ブロックが実行され、次にサブクラスの静的コード ブロックが実行されます。すべての静的コード ブロックが実行されると、出力ステートメントが実行されます。 main 関数 (出力ステートメントが new StaticTest() の前にあることが前提です)、その後、親クラスの非静的コード ブロックが実行され、続いて親クラスのコンストラクターが実行され、その後に非静的コードが続きます。サブクラス内のブロック、そして最後にサブクラス クラス内のコンストラクター メソッド。