オブジェクトのインスタンス化

オブジェクトのインスタンスが含ま作成:初期クラスとインスタンスの初期化
1.負荷に必要なクラスのインスタンスを作成し、このクラスを初期化するには、あなたがロードする必要がある主な方法と初期化され
、親クラスを初期化する初期化が必要に2.サブクラスを
3 1つのクラス初期化が行われる<clinit>()メソッド
<clinit>静的変数割り当てコードおよび静的コードブロックの表示方法
クラス静的変数とコードのコードブロックは、上から下へ順次実行割り当てられた静的表示コードを
<clinit>メソッドの実行のみ
初期の4例が実行される<初期化>メソッド
ブロックの非静的および非静的インスタンス変数、対応するコンストラクタコードによって割り当てられたコードを表示する<初期化>方法。
非静的インスタンス変数は、最後のコードに対応した構成を実行しながら、上から下に表示され、コードブロックの実行順序の非静的割り当てされる
オブジェクトのインスタンスを作成するたびに、対応するコンストラクタを呼び出す対応する<初期化>方法が行われる
<初期化>最初の行の方法は、親クラスの、すなわち、対応する<初期化>方法、スーパー()またはスーパー(引数のリスト)であります

クラス・ロード(クラス初期化):
1は、クラスローダは、ファイルのバイトコードにコンパイルされたJavaプログラムの実行後clinit()メソッド(と呼ばれるクラスのコンストラクタ)、スタティック変数およびコードブロックのclinit()メソッドでありますコンポーネント。
2は、サブクラスは、親をロードする最初の必要性をロードした場合のインタフェースのための親クラス。Clinitは、親のメソッドを呼び出すことはありません。クラスはメソッドをclinitすることはできません。
3、clinit方法の実行の順序:親クラスの静的初期化、コードの親クラスの静的ブロック、静的初期化サブクラス、サブクラス静的コードブロック。
4、clinit()メソッドは、一度だけ実行されます。

プロセス・オブジェクト・インスタンス(インスタンスの初期化):
1、オブジェクトは、Javaプログラムがファイルのバイトコードにコンパイルされた後(例えばコンストラクタと呼ばれる)インスタンス化プロセスinit()メソッドを実行することで、非静的変数のinit()メソッド非静的な構成となる対応するコードブロック。
図2に示すように、init()メソッドは、それぞれのコンストラクタは、対応するinit()メソッドを呼び出す呼び出しインスタンスを作成し、いくつかのコンストラクタは、いくつかのinit()メソッドを持っているがあり、複数のオーバーロードすることができます。
3、注文のinit()メソッドは、親クラス変数の初期化、親クラス・コード・ブロック、親クラスのコンストラクタ、変数初期化サブクラスのサブクラス・コード・ブロック、サブクラスコンストラクタ。
:init()メソッドオーバーclinit()が優先全体シーケンスであるように、実行される
親クラスの静的初期化、コードの親クラスの静的ブロック、サブクラス静的初期化、コードのサブクラス静的ブロック、非静的初期の親クラス、親クラス非静的コードのブロック、親クラスのコンストラクタ、非静的初期化サブクラス、サブクラス非静的コードブロック、サブクラスのコンストラクタ。

静的コードブロックのみをロードし、静的クラス変数をロード。オブジェクト作成の唯一のインスタンス:変数および初期化コードブロックとコンストラクタが実行される(オブジェクトのインスタンスを作成する第1トリガクラスローディング)

クラスローダ<clinit>実行
> << INITを実行しますが、最初の<clinit>ロードする前に、クラスのクラスのインスタンスを作成し、実行します:オブジェクトのインスタンスを作成します。
クラス初期化<clinit>メソッドを実行するには、<clinit>静的変数割り当てコードおよび静的コードブロックを表示する方法、<clinit>メソッドは、一度だけ実行される
インスタンスの初期化<初期化>方法を実行する、<初期化>非静的インスタンスのメソッド変数非静的割り当てコードとコードブロックと、対応するコンストラクタコードを示します。

トリガークラスローダ:
1.する(新たな新しい、反射など、シリアライゼーション)オブジェクトタイプの新しいインスタンスを作成し
、変数であると、このトリガーは、コードブロックの初期化とコンストラクタを実行する、このインスタンスが初期化され、他の6つの基礎と初期
2.静的メソッド呼び出しのタイプ(すなわち、バイトコード命令で行わinvokestatic)ときに
静的フィールドまたはインタフェースタイプ、または割り当てを呼び出す3.これらの静的フィールドの、すなわち、バイトコードで、実装(実行されますgetstatic、又はputstatic命令)、
コンパイル時定数式に初期化され、)それは(文字列の基本的なタイプを除いて割り当てられた変性最終静的フィールドと、パッケージの種類が含まれていない
(呼び出しのにJavaAPIの方法反射4例のjava.lang.Class方法(Class.forNameの)コール、又は他のクラスjava.lang.reflectのパッケージ法)のため
5.派生クラス(Java仮想マシン仕様は明示的クラスの初期化を必要とする初期化するとき、それは)、事前スーパークラスの初期化操作でインターフェースの例外を行わなければならない
6クラスがメインメソッドのJVM起動開始時間が含まれています。
7.静的フィールドの場合、このフィールドのクラスの唯一の直接的な定義が初期化され、したがってそのサブクラスによって参照される親クラスで定義された静的フィールド、それ意志サブクラス初期化トリガせずに、親クラスの唯一のトリガの初期化。

ロード順:静的変数および初期化ブロックは、クラスでの定義された順序に従って初期化されます。また、変数、および初期化ブロックも、このルールに従ってください。
1.親-静的変数
2.親クラス-静的初期化ブロック
3サブクラス-静的変数
4.サブクラス-静的初期化ブロック
5.親-可変
6.親クラス-初期化ブロック
7親クラス-コンストラクタ
8サブクラス-変数
9サブクラス-初期化ブロック
10サブクラス-コンストラクタ

多型
@Overrideオーバーライドメソッド
方法を書き換えることができない
1を、最終的な方法
2、静的方法
3、民間及び他のサブクラス不可視方式
多型オブジェクト
1、サブクラスは、親のメソッドをオーバーライド呼び出しサブクラスによってオブジェクトがコードに書き換えサブクラスでなければなりません
2を、デフォルトの非静的メソッドの呼び出しオブジェクトがこれです
3、このオブジェクトは、コンストラクタ内のオブジェクトであるかの<init>メソッドは、その子によって、作成されています親クラスの非静的メソッドは、クラスは、呼負荷をインスタンス化されるときに、トリガされ
たオブジェクトが上書きされ、このオブジェクトのメソッド呼び出しサブクラスのサブクラスで呼び出します。
サブクラス親クラスがインスタンス化されている場合と、それは親クラスのメソッドは、サブクラスによってオーバーライド場合、親クラスが初期化プロセスの間に読み込まれトリガ、およびサブクラスを呼び出します。
型オブジェクトのサブクラスを指すように変数を入力し、メンバ変数にアクセスする場合、親クラスの参照を介してアクセス親クラスのメンバ変数です。


親コード:
/ ** 
 * <clinit>親クラスを初期化する
 。* 1、J =法()
 * 2、静的コードブロック親クラス
 * 
 親クラスの*インスタンス:
 * 1、スーパー()最前
 * 2、iが(テスト= )
 * 3、非静的ブロックの親クラス
 、親クラスの* 4、いかなる基準構造いない(最後)
 * 
 * 
 *非静的メソッドは、実際にデフォルトのオブジェクトであり、この目の前で
 表す*このコンストラクタまたは<初期化>オブジェクトは、息子が作成され、ここので、オブジェクトが、作成されるので
 *テストは、()サブクラスをオーバーライド実行コード(オブジェクト指向のマルチ状態)であり、
 iはテスト(= *)はサブクラス上書きして実行されます試験()メソッド
 * @author 
 * @date 2019年11月23日
 * / 
パブリック クラスの父は{
     / ** 
     親サブクラスのインスタンストリガーされるので* = I試験()、サブクラステストを書き換えるために実行されますクラスローダ
     * / 
    プライベート int型私は= テスト();
     プライベート 静的 INT J = 法()。

    静的{ 
        System.out.print( "(1)" )。
    } 

    パブリック父(){ 
        System.out.print( "(2)" )。
    } 

    { 
        System.out.print( "(3)" )。
    } 

    公共 int型のテスト(){ 
        System.out.print( "(4)" )。
        リターン 1 ; 
    } 

    パブリック 静的 int型の方法(){ 
        System.out.print( "(5)" )。
        リターン 1 ; 
    }

    パブリック 静的 ボイドメイン(文字列[]引数)をスロー例外{
         新しい父()試験()。
    } 
}

 

サブクラスのコード:

/ ** 
 *初期サブクラス<clinit> 
 * 1、J =法()
 * 2、静的クラス親ブロック
 * 
 *初期親クラス:(5)、(1)
 *初期化サブクラス:(10) 、(6)
 * 
 <INIT>のサブクラスの*インスタンス:
 * 1、スーパー()まず、親クラスのスーパー代わっは、親クラスのインスタンスを作成しないで初期化され、ロードされた親である
 * 2、Iはテスト()=; 
 * 3。 、非静的ブロックサブクラス
 * 4、引数なし(最後)とサブクラスのコンストラクタ
 * 
 *息子2つのオブジェクトが作成されたので、一度だけの方法例の<init>を2回行ったが、<clinit>メソッドので、
 * 
 * @author 
 * @date 2019年11月23日
 * / 
パブリック クラスソン延び父{
     プライベート INT Iは= テスト();
     プライベート 静的 INT J = 法()。

    静的{ 
        System.out.printの(「(6)。」); 
    } 

    公共の息子(){
         // スーパー();書き込みかサブクラスコンストラクタで全く存在を書き込むは、親クラスのコンストラクタを呼び出すであろう 
        システム。 Out.print( "(7)。" ); 
    } 

    { 
        System.out.printの( "(8)。" ); 
    } 

    @Override 
    公共 INT テスト(){ 
        System.out.print(の "(9)。" );
         リターン 1 ; 
    } 

    パブリック 静的 INT メソッドを(){ 
        (System.out.printの "(10)" );
         リターン 1; 
    } 

    パブリック 静的 ボイドメイン(文字列[]引数)をスロー例外{ 
        ソンS = 新しい子を()。
        System.out.println(); 
        息子の息子 = 新しい息子(); 
    } 

}

出力:

(5)(1)(10)(6)(9)(3)(2)(9)(8)(7)
(9)(3)(2)(9)(8)(7)

 

おすすめ

転載: www.cnblogs.com/yuancoco/p/11922489.html