public class Test { { //// } }
中括弧 ({}) を使用して複数行のコードを一緒にカプセル化し、特定の実装用の独立したデータ本体を形成します。アルゴリズム。一般に、コード ブロックは単独で実行することはできず、実行本体が必要です。 Java には主に 4 つのタイプのコード ブロックがあります。
1. 通常のコード ブロック通常のコード ブロックは、メソッド名の後に {} 括弧を使用します。 。通常のコード ブロックは単独で存在することはできず、メソッド名の後に続く必要があります。また、メソッド名を使用して呼び出す必要があります。
public class Test {
public void test(){
System.out.println("普通代码块");
}
}
静的というと、静的コードブロックは、静的で変更された {} で囲まれたコードセグメントを思い浮かべます。その主な目的は、静的プロパティを初期化することです。
public class Test { static{ System.out.println("静态代码块"); } }
3. 同期されたコードブロック
4. 構築コードブロック
public class Test { /** * 构造代码 */ { System.out.println("执行构造代码块..."); } /** * 无参构造函数 */ public Test(){ System.out.println("执行无参构造函数..."); } /** * 有参构造函数 * @param id id */ public Test(String id){ System.out.println("执行有参构造函数..."); } }
public class Test { /** * 无参构造函数 */ public Test(){ System.out.println("执行构造代码块..."); System.out.println("执行无参构造函数..."); } /** * 有参构造函数 * @param id id */ public Test(String id){ System.out.println("执行构造代码块..."); System.out.println("执行有参构造函数..."); } } 运行结果 public static void main(String[] args) { new Test(); System.out.println("----------------"); new Test("1"); } ------------ Output: 执行构造代码块... 执行无参构造函数... ---------------- 执行构造代码块... 执行有参构造函数...
1. インスタンス変数の初期化 クラス内に複数のコンストラクターがある場合、これらコンストラクター 関数はインスタンス変数を初期化する必要があります。コンストラクター内で直接インスタンスを作成すると、大量の繰り返しコードが生成されるため、煩雑で可読性も低くなります。ここでは、構築されたコード ブロックを最大限に活用してこれを実現できます。これは、コンパイラが構築コードのブロックを各コンストラクターに追加するという事実を利用しています。
2. インスタンス環境を初期化します 一个对象必须在适当的场景下才能存在,如果没有适当的场景,则就需要在创建对象时创建此场景。我们可以利用构造代码块来创建此场景,尤其是该场景的创建过程较为复杂。构造代码会在构造函数之前执行。 上面两个常用场景都充分利用构造代码块的特性,能够很好的解决在实例化对象时构造函数比较难解决的问题,利用构造代码不仅可以减少代码量,同时也是程序的可读性增强了。特别是当一个对象的创建过程比较复杂,需要实现一些复杂逻辑,这个时候如果在构造函数中实现逻辑,这是不推荐的,因为我们提倡构造函数要尽可能的简单易懂,所以我们可以使用构造代码封装这些逻辑实现部分。 从词面上我们就可以看出他们的区别。静态代码块,静态,其作用级别为类,构造代码块、构造函数,构造,其作用级别为对象。 1、 静态代码块,它是随着类的加载而被执行,只要类被加载了就会执行,而且只会加载一次,主要用于给类进行初始化。 2、 构造代码块,每创建一个对象时就会执行一次,且优先于构造函数,主要用于初始化不同对象共性的初始化内容和初始化实例环境。 3、 构造函数,每创建一个对象时就会执行一次。同时构造函数是给特定对象进行初始化,而构造代码是给所有对象进行初始化,作用区域不同。 通过上面的分析,他们三者的执行顺序应该为:静态代码块 > 构造代码块 > 构造函数。
以上就是java提高篇(十一)-----代码块的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)! 五、 静态代码块、构造代码块、构造函数执行顺序
public class Test {
/**
* 静态代码块
*/
static{
System.out.println("执行静态代码块...");
}
/**
* 构造代码块
*/
{
System.out.println("执行构造代码块...");
}
/**
* 无参构造函数
*/
public Test(){
System.out.println("执行无参构造函数...");
}
/**
* 有参构造函数
* @param id
*/
public Test(String id){
System.out.println("执行有参构造函数...");
}
public static void main(String[] args) {
System.out.println("----------------------");
new Test();
System.out.println("----------------------");
new Test("1");
}
}
-----------
Output:
执行静态代码块...
----------------------
执行构造代码块...
执行无参构造函数...
----------------------
执行构造代码块...
执行有参构造函数...