Javaプログラミング思想ノート-5


1.Javaでは、コンストラクタが提供されているため、クラスの設計者は各オブジェクトが正しく初期化されることを保証できます.パラメータを受け入れないコンストラクタをデフォルトコンストラクタと呼びます
2.メソッドリロード:メソッドには同じ名前があり、各リロードメソッドにはユニークなパラメータタイプのリストがあります.
  • は、基本タイプのメソッドの再ロードに関連します.入力したデータ型が「より小さい」メソッドで宣言された形式パラメータタイプであれば、実際のデータ型は向上します.charが得た効果はやや異なるが,これは正確なcharマッチングが見つからないためint以下のコードに移行し,byteのやや大きなタイプはshort,f(b)はf(short i)にマッチングし,charはintに直接昇格するしかなく,f(c)はf(short i)にマッチングできず,f(int i)
  • にしかマッチングできないためである.
        static void f(int i){
            System.out.println("f(int)");
        }
        static void f(short i){
            System.out.println("f(short)");
        }
        public static void main(String[] args) {
            char c = 2;
            byte b = 1;
            f(c);
            f(b);
        }
        /*   
        f(int)
        f(short)
        */
  • 入力パラメータタイプが大きい場合は、手動で変換を狭める必要があります.そうしないと、コンパイラエラー
  • 3.戻り値タイプによってオーバーロードの方法を区別することはできません.
    4.コンストラクタが定義されている場合(引数があるかどうかにかかわらず)、コンパイラはデフォルトのコンストラクタを定義するのに役立ちません.したがって、一般的には、コンストラクションメソッドをカスタマイズするときに、パラメータレスコンストラクタを自分で再ロードすることをお勧めします.
    5.thisキーワード:現在のオブジェクトを表す参照
  • 構築では、thisにパラメータリストを追加すると、コンストラクタが呼び出され、コンストラクタがパラメータリストに合致する構築方法であることを示す.コンストラクタではthisから2回のコンストラクタ
  • を呼び出すことはできません.
  • コンストラクタを除いて、コンパイラは他の任意の方法でコンストラクタ6を呼び出すことを禁止する.1つのstaticメソッドの内部から非staticメソッドの呼び出しを発行することはできない.これは、呼び出しが呼び出されたオブジェクトを特定できないためであるが、staticメソッドに1つのオブジェクトを入力し、オブジェクトを通じて非静的メソッドを呼び出すことができる.7.ごみ回収
  • Javaは、使用されなくなったオブジェクトによって占有されたメモリをゴミ収集器で回収します.ただし、オブジェクトが占有するメモリに特殊な領域があり、ゴミ回収で解放できない場合は、finalize()メソッドを定義してそのメモリを解放することができます.ゴミ回収器がオブジェクトが占有する領域を解放する準備をしている場合は、まずオブジェクトのfinalize()メソッドを呼び出し、次にオブジェクトが占有するメモリを本当に解放します.
  • オブジェクトは回収されない可能性があります.ストレージスペースは、使用が切れそうにない限り、オブジェクトが占有するスペースが解放されない可能性があります.ゴミ回収自体にもコストがかかるので、必要でない場合は呼び出す必要はありません.
  • ごみ回収は「析構」
  • に等しくない.
  • ゴミ収集はメモリにのみ関係しています.ごみ収集器が存在する唯一の理由は、プログラムが使用しなくなったメモリを回収するためであり、finalizeの真の用途やニーズは、ある種の作成オブジェクト方式以外の方法でオブジェクトに割り当てられたメモリスペース(少し回ります..ごみ回収器で自動的に解放できないメモリを解放するためだと思います)
  • ごみ回収技術(1)はカウントを参照する.参照がオブジェクトに接続されている場合、カウントに1を加え、参照が役割ドメインから離れたりnullに設定されたりして、カウントが1を減らし、ゴミ回収器はすべてのオブジェクトを遍歴し、オブジェクトのカウントが0であることが分かった場合、空間を解放します.欠点:ループ適用オブジェクトを解放できません.(2)停止-コピーします.プログラムを一時停止し、すべての「アクティブ」オブジェクトを別のスタックにコピーします.コピーされていないのはゴミオブジェクトです.欠点:第1は実際の倍以上の空間を占有し、第2のプログラムが安定した後にごみが発生するのは少なく、このような操作を行うにはオーバーヘッドが大きい.(3)タグ-清掃:すべての参照を遍歴し、生きているオブジェクトを見つけてタグし、タグが完了した後、未タグオブジェクトを整理する.JAva仮想機会は、状況に応じて「タグ-清掃」と「停止-複製」で
  • を切り替える.
    6.メンバーの初期化
  • メソッドのローカル変数にはデフォルト値はありません.使用前に
  • を初期化する必要があります.
    void f() {
        int i;
        i++;//    
    }

    7.コンストラクタ初期化
  • メンバーの自動初期化は、メソッド定義の間にメンバーが分散する
  • であっても、コンストラクタ呼び出しよりも先に行われる.
  • 静的メンバーは非静的メンバーより先に、静的初期化はClassオブジェクトの最初のロード時にのみ行われる
  • .
  • 静的コードブロック、形式は以下の
  • である.
    class Spoon {
    static int i;
    static {
    i = 47;
    }
    // . . .
                
    
  • 非静的インスタンス初期化は静的実力初期化に比べてstaticキーワードが少なく、コードブロック初期化の優先度は非静的メンバーと同様であり、コードブロックでは初期化以外の操作が可能である.初期化順序:静的メンバー-静的コードブロック-非静的メンバー/非静的コードブロック-構築方法-局所変数
  • 8.配列初期化
  • Javaでは、1つの配列を別の配列に割り当てることができます.私たちが本当に準備しているのは、
  • 参照をコピーすることです.
     int[] a1 = { 1, 2, 3, 4, 5 };
     int[] a2;
     a2 = a1;
         , a2       a1
    
  • 配列の値は自動的に初期化され、基本タイプはデフォルト値、参照タイプはnull
  • です.
  • 可変パラメータリスト
  • void f(Object... obj){
    ...
    }
                    :                      ,          ,          ,                 
    

    9.列挙タイプ
  • 列挙タイプのインスタンスは定数であり、大文字
  • を使用することを推奨します.
  • 列挙ordinal()は、各特定のenum定数の宣言順序
  • を表す.