いくつかのコードブロックの実行順序
2096 ワード
Javaでよく見られるコードは静的コードブロックが速く、コードブロック、ローカルコードブロックを構築します.
1.いくつかのコードが速い特徴:
1.1静的コードブロック
静的コードが速い:クラスに作用します.クラスのロードに伴ってロードされます.クラスのロード後に必要なデータを静的コードブロックに配置することが多い.
1.2構造コードが速い
構築コードが速い:クラスに作用します.彼は構築方法の実行前に実行し,構築方法を実行するたびに構築コードブロックが実行される.
いつ使いますか.たとえば、すべてのコンストラクションメソッドが実行する内容を、コンストラクションコードブロックに上に抽出して入れ、リロードされるコンストラクションメソッドごとにコード量を減らし、簡潔に見えるようにすることができます.
1.3ローカルコードが速い
ローカルコードが速い:ローカルなので、明らかに方法内に作用しています.書式:{文;}.主に実行範囲を限定するために使用されます.
2.実行の順序を例示する
次に、これらのコードブロックの実行順序をコードで具体的に見てみましょう.
実行結果:
3.分析説明
子クラスは親クラスを継承するため、クラスローダが親クラスを先にロードするに違いありません.このとき、親クラスの静的コードブロックは親クラスのロードに伴ってロードされ、親クラスのロードが完了すると、クラスローダはサブクラスのロードを開始し、サブクラスの静的コードはすぐにロードされます.子クラスの作成は親クラスに依存するため、子クラスのmain()メソッドで最初にnewの子クラスがある場合、論理が親クラスに呼び出され、親クラスの構築コードブロックが親クラスの構築メソッドの前に実行され、親クラスの構築メソッドが実行される.これらの実行が完了すると、サブクラスに戻り、サブクラスの構築方法ブロック、サブクラスの構築方法を実行する.
次の文がnew Father()の場合、同様に親の構築コードブロック、親の構築方法を実行します.静的コードブロックは実行されないことを覚えておいてください.なぜなら、静的コードブロックは、クラスのロードに伴ってロードされて実行され、今回のみ実行されるからである.最後に、親の参照は、静的コードが速く実行される親のメソッドを呼び出します.
4.その他
もし本文に誤りがあれば、批判の指摘を歓迎し、一緒に交流して分かち合う.
1.いくつかのコードが速い特徴:
1.1静的コードブロック
静的コードが速い:クラスに作用します.クラスのロードに伴ってロードされます.クラスのロード後に必要なデータを静的コードブロックに配置することが多い.
1.2構造コードが速い
構築コードが速い:クラスに作用します.彼は構築方法の実行前に実行し,構築方法を実行するたびに構築コードブロックが実行される.
いつ使いますか.たとえば、すべてのコンストラクションメソッドが実行する内容を、コンストラクションコードブロックに上に抽出して入れ、リロードされるコンストラクションメソッドごとにコード量を減らし、簡潔に見えるようにすることができます.
1.3ローカルコードが速い
ローカルコードが速い:ローカルなので、明らかに方法内に作用しています.書式:{文;}.主に実行範囲を限定するために使用されます.
2.実行の順序を例示する
次に、これらのコードブロックの実行順序をコードで具体的に見てみましょう.
package com.ilaoda.codeblock;
/**
*
* @author
*/
class Father{
//
static{
System.out.println("111--- ");
}
//
{
System.out.println("222--- ");
}
//
public Father() {
System.out.println("333--- ");
}
public void hello() {
//
{
System.out.println("444--- ");
}
}
}
/**
*
* @author iLaoda
*/
class Child extends Father {
//
public Child() {
//super(); ,
System.out.println("555--- ");
}
//
static{
System.out.println("666--- ");
}
//
{
System.out.println("777--- ");
}
public static void main(String[] args) {
Child child = new Child();
Father father = new Father();
father.hello();
}
}
実行結果:
111---
666---
222---
333---
777---
555---
222---
333---
444---
3.分析説明
子クラスは親クラスを継承するため、クラスローダが親クラスを先にロードするに違いありません.このとき、親クラスの静的コードブロックは親クラスのロードに伴ってロードされ、親クラスのロードが完了すると、クラスローダはサブクラスのロードを開始し、サブクラスの静的コードはすぐにロードされます.子クラスの作成は親クラスに依存するため、子クラスのmain()メソッドで最初にnewの子クラスがある場合、論理が親クラスに呼び出され、親クラスの構築コードブロックが親クラスの構築メソッドの前に実行され、親クラスの構築メソッドが実行される.これらの実行が完了すると、サブクラスに戻り、サブクラスの構築方法ブロック、サブクラスの構築方法を実行する.
次の文がnew Father()の場合、同様に親の構築コードブロック、親の構築方法を実行します.静的コードブロックは実行されないことを覚えておいてください.なぜなら、静的コードブロックは、クラスのロードに伴ってロードされて実行され、今回のみ実行されるからである.最後に、親の参照は、静的コードが速く実行される親のメソッドを呼び出します.
4.その他
もし本文に誤りがあれば、批判の指摘を歓迎し、一緒に交流して分かち合う.