Java研究(jdeep)-staticの公開


クラス、オブジェクト、インスタンスの違い


クラス=オブジェクトの定義、オブジェクトを作成するフレームワーク
オブジェクト=インスタンスを表すnewキーを使用してオブジェクトを作成できます.
インスタンス=クラスで作成されたオブジェクトをクラスのインスタンスと呼びます.オブジェクトとそのクラスの関係
Car car = new Car();
Car car2 = new Car();
オブジェクトとインスタンスの意味は同じですが、使用状況は異なります.

Javaの静的



JVMの前処理手順
メモリに静的値を割り当て、デフォルト値(0)を設定します.
initialization
静的値を元の値に設定し、クラス内のすべての情報をメソッド領域に配置します.
public class Test {

    static int count =0;

    public Test() {
        count++;
        System.out.println(count);
    }

    public static void main(String[] args) {
        Test test1 = new Test();
        Test test2 = new Test();
    }
}

1.すべてのインスタンスに共通の静的加算
2.クラス変数(static)インスタンスを作成する必要はありません
3.クラスメソッド(静的メソッド)ではインスタンス変数は使用できません.
=>インスタンス変数はインスタンスが存在しなければ使用できませんが、クラスメソッドはインスタンスを必要とせずに呼び出すことができます.
4.メソッドでインスタンス変数が使用されていない場合は、静的な貼り付けを検討します.
=>メソッド呼び出し時間を短縮することでパフォーマンスが向上します.non-staticメソッドは、実行時に呼び出す必要があるメソッドを検索する必要があるため、より長い時間がかかります.

問題が発生する可能性のある部分

  • カプセル化の原則に違反する.(+変数共有時の問題)
  • カバー不可(拡張性制限)
  • プログラム終了時もメモリに存在する(インスタンスメソッドとは異なり、参照されていなくてもGCは回収されない)
  • .
    単純に速度が速いことを理由に,静的な使用は避けるべきである.
    コストの高い一般的なオブジェクト+オブジェクトを作成するときに使用することが望ましい.

    イニシャルブロック


    ≪クラス初期化ブロック|Class Initialization Blocks|emdw≫:条件文、例外、繰返し処理などをブロックで使用できます.
    明示的な初期化が不足している場合にのみ使用を考慮できます.
    ≪インスタンス初期化ブロック|Instance Initialization Block|emdw≫:すべての作成者が共同で実行する必要があるコードを挿入します.
    
    Car(){
    
    	count++; 
    	serialNo = count;
    	...
    }	
    
    
    Car(String color, String Type){
    	count++;
    	serialNo = count;
    	...
    }
    
    
    {
    	count++;
    	serialNo = count;
    	...
    } //인스턴스 초기화블럭
    
    上記の例では、複数のコンストラクション関数がある場合、汎用論理を組み合わせるための例は多く見られなかった.