Javaの:オブジェクトの作成と初期化プロセス

プロセスに関与するオブジェクトの作成と初期化問題でのJava関連する概念、スタック(積み重ね)でJavaヒープ(ヒープ)、オブジェクト参照、ハンドルの概念を分析します。
@author:ZJ 06-11-25
ブログ 
[URL] http://zhangjunhd.blog.51cto.com/ [/ URL]

1。Javaデータ型
    の基本データ型(Javaでは、ブール、バイト、ショート、INT:Javaは、データの3種類あり8つの基本データ型)、参照型とヌルタイプを。前記(アレイを含む)タイプ、インターフェイスタイプを含む基準クラスタイプ。
    :次の文は、変数を宣言し
、int型のk
A A; // Aは、データ型オブジェクト変数名です。
BのB1、B2、...、b10000 ; // Bは、抽象クラスやインタフェースと想定されます。
文字列s; 

     注:変数(識別子)である可変データタイプ、変数kの基本データ型、クラス型と変数s、抽象クラスまたはインタフェース型変数b(100万番目)の観点から。
 
2。ハンドル(取っ手)について
    、参照型の変数識別子と、基本的なデータ型の変数の識別子を区別するために、我々は特別な参照型の変数識別子を呼び出すためにハンドルを使用します。b10000に上記B1の例は、Sがハンドルです。ハンドル、ハンドルは、我々は一般の中国語の翻訳に使用されるコンピュータ業界使用することを直感的に見てハンドル「ハンドルを。」
 
 
[ハンドルWindowsプログラミング意味2.1]
    ハンドルは、整数一意WONDOWSオブジェクトが識別アプリケーションそのような場合、種々の、ウィンドウ制御、ビットマップを使用して作成されるか、またはアプリケーションプログラム、Windowsハンドルれる識別するために使用されGDIオブジェクト、およびように。WINDOWSは、C言語でのファイルハンドルのようなビットを処理します。 
    私たちは、しかし、ハンドルがオブジェクトまたはプロジェクトを識別するために使用される識別子であり、誰もが別の人の名前が同じではありません持っているだろうと、それは、私たちの名前のようなものである、上記の定義から見ることができ、また、名前とあなたのような人があるかもしれません。ビューのデータ・タイプからのみの16ビットの符号なし整数です。アプリケーションは、対応するオブジェクトを参照するためにこのハンドルを使用することができ、他の関数の後にハンドルWINDOWS、WINDOWSを取得する関数を呼び出すことによってほとんど常にです。
    あなたがハンドルの少しより多くの完全な理解をしたい場合、私はハンドルがポインタへのポインタであることを伝えることができます。私たちは、いわゆるポインタはメモリアドレスであることを知っています。アプリケーションが起動すると、このプログラムのすべてのオブジェクトはメモリに常駐しています。我々は単に理解していれば、長い我々はメモリの先頭アドレスを知っているとして、あなたは常にオブジェクトにアクセスするには、このアドレスを使用することができるようです。あなたが本当にそう思う場合は、あなたは間違っています。私たちは知っている、Windowsは仮想メモリベースのオペレーティングシステムです。様々なアプリケーションのニーズを満たすためにメモリように、このシステム環境では、Windowsのメモリマネージャは、多くの場合、メモリ内のオブジェクトを動き回ります。オブジェクトは、それがアドレスを変更する手段を移動させること。アドレスは常にどこ?オブジェクトを探すために私たちを変更する場合は
    、アプリケーションごとにメモリアドレスの一部、メモリの変更内のオブジェクトの特別な登録アドレスについて、各アプリケーションを解放するために、この問題を解決するには、Windowsオペレーティングシステムを、このアドレス(位置記憶部)自体は変化しません。Windowsのメモリマネージャの位置は、メモリ内のオブジェクトを移動した後、ターゲットアドレスに新しいアドレスは、ハンドルを保存します。我々は唯一のハンドルが間接的に対処できることを覚えておく必要がありますので、場所をメモリ内の特定のオブジェクトが知っています。オブジェクトがロードされたときにシステムが(アンロード)アンロードされ、システムに解放されたときに、このアドレスは、(負荷)システムによって割り当てられます。
    ハンドラ・アドレス(安定した)→実際のオブジェクトのメモリのメモリアドレス────→対象アドレス(不安定)に記録されたオブジェクト→
 
2.2Javaにハンドル意味
    深い理解と[前のページ] Windowsプログラミングの意味のハンドル上に、我々は、ハンドルは、我々は非常に多くの必要な学びのJava用いられる用語であると言うことができます。これは「オブジェクト自身」との間の差とオブジェクト変数について(または厳密点:データ・オブジェクトのタイプは、変数識別子属します)。
 
:1の変数宣言に2.3戻る
    さて、あなたが一目で以下のコメントを持っている必要があります。
整数K、J、整数が格納される// K。
A; //格納アドレスの内部。
BのB1、B2、...、b10000 ; // B1、...、b10000 格納アドレスの内部。
文字列s; //店内のアドレス。
3。リファレンス(参照)について
    、「基準」とは何ですか?「あなたは、操作識別子が実際にある(Javaの2eに思考)
    翻訳がある:あなたが実際にオブジェクトに識別子「参照」を操作してください。またはより正確に、として翻訳:識別子は、オブジェクトに実際にポイントを操作する「参照。」明らかに、物事の方向の本来の意味での参照があります。
    バックJavaで、参照オブジェクトは、番号、IDまたはオブジェクトは、電話番号オブジェクト×××と考えることができます。もちろん、より多くのオブジェクト参照がメモリに部屋番号に滞在していると言うこと。オブジェクトを作成するときに直感的には、戻り値はオブジェクト参照です!リファレンスは、戻り値の新しい表現です。
    新しいA();ここでは、実際にオブジェクトを作成しますが、我々は保留(ホールド、ホールド、ホールド)を基準にハンドルを使用していませんでした。全体のA参照が返された上微視的観点からは、新しい表現は、(詳細な分析、以下の三部作、)初期化タスクオブジェクトを完了します。
    再び変数宣言1に戻る、以下のノートを見て。
A; //宣言ハンドルAが、初期化されていないので、nullがあります。
BのB1、B2、...、b10000 ; // 宣言ハンドルB1、...、b10000が、初期化されていないので、nullがあります。
文字列s; //ステートメントハンドルSが、初期化されないので、nullがあります。
4。間の関係を参照して、ハンドル
A; //宣言ハンドルA、ヌルの値
A =新たな新しいA(); //初期化ハンドル(ハンドル=参照;参照を処理するために割り当てられています)
 
    参考:新しいA()の値。オブジェクトがメモリアドレス空間を占有するように、参照が簡単に見ることができ、参照オブジェクトによって、あなたは簡単に他のオブジェクトから離れて区別することができ、オブジェクト参照は、一意のIDです。
初期化後、ハンドル、ハンドルは、遠隔制御対象を使用することができます。
    もちろん、これは、オブジェクトの作成と初期化を説明するハンドルや参照、全体のプロセスオブジェクトの初期化の次の分析の間の関係を理解することはただ一つの手からです。以下の準備作業は、最初のスタックとヒープの話をすることができません。
5。スタック(スタック)ヒープ(ヒープ)内のJava
    Javaの「スタック」および「ヒープ」の両方(スタックとヒープ)にメモリに「スタック」は、実際のストレージタイプに格納されたオブジェクト参照基本データ型"スタック内のヒープは」参照のみアドレス値のメモリを保持しました。
    ところで、ヘルプに「==」と「イコール()メソッドは、」(スタックとヒープ)の両方の概念を理解しています。
    格納された値に「==」比較変数、比較の基準として記憶された値の変数スタック(スタック)を使用してJavaでシステム、スタック内の基本データ型を使用した値と基準タイプの内容がスタックされ値は、オブジェクト自体ヒープ尖ったアドレス値に記憶されます。java.langのパッケージのObjectクラスは、パブリックブールのequals(オブジェクトobj)メソッドを持っています。それは2つのオブジェクトが等しい比較ありません。同じオブジェクトを2つの参照を比較真のみ戻る(ハンドルが等しい)、オブジェクト()メソッドに等しいです。(クラスがオーバーライド(優先)は()メソッドに等しい文字列()メソッドを、等しいように、塔は本明細書で説明されていません。)
6。作成および初期化プロセスオブジェクトは、
    Javaオブジェクト・クラスのインスタンスです。一般的に、ときに、クラスのインスタンスは、変数やメソッドを含むこのファミリーの全てのメンバーは、へのデータのこのタイプの新しいインスタンスに属するようにコピーされます。次の2つのコード部分の解析。
 
 
6.1   車両veh1 =新新車両();
    上記の文は次のようなものを作った:
①「新車」の権利を、(車両オブジェクトと呼ぶ)、ヒープ空間にVehicleクラスのオブジェクトを作成するためのテンプレートとしてVehicleクラスです。
オブジェクトが作成されていること②エンド()の手段は、すぐにちょうど生成されたコンストラクタVehicleクラスのオブジェクトが初期化されて呼び出します。コンストラクタは確かにあります。あなたが作成しなかった場合、Javaは何かデフォルトコンストラクタを追加されます。
③「車両veh1」の左側には、Vehicleクラスの参照変数を作成しました。
④「=」演算子の車両オブジェクト先ほど作成したオブジェクトの基準点という。(リコールハンドルと参照のこと)
 
    上記のステートメントを2つの段階に分かれています
;車両veh1
; veh1 =新新車両()

    つのオブジェクト参照変数、一つのオブジェクト自体:書き込み、それがより明確である、2つのエンティティがあります。エンティティを作成したヒープスペースでは、エンティティは、スタック領域の異なるで作成しました。彼らはまたですが、非常に現実的実体が存在しませんが、それは正確にそれを生きるために「把握」することが困難であると考えられます。我々は慎重にちょうど名前は何ですか作成されたオブジェクトを探して、第二の文を見て?それは「車両」と呼ばれていることをいくつか言います。右、「車は」(テンプレートオブジェクトを作成します)クラスの名前です。Vehicleクラスは、すべての「車両」と呼ぶことができないオブジェクトを無制限に作成することができます。オブジェクト名でもありませんが、それを直接アクセスすることはできません。我々は唯一のオブジェクトでオブジェクトへの間接アクセスを参照することができます。
 
 
6.2   車両veh2;
veh2 = veh1;
    参照(アドレス)点のみ車両オブジェクトの両方veh2 veh1ようveh2作らveh1に割り当てられveh1及びオブジェクトへveh2参照のみが、2番目の行からです。
 
6.3   veh2 =新たな新型車();
    第二のオブジェクトへの参照変数veh2変化点。
    上記の説明から、それを推測、私たちは次のような結論を得ることができます:①オブジェクト参照をゼロまたは1つのオブジェクトを指し示すことができます。②オブジェクトは、それへのNの参照を持つことができます。

おすすめ

転載: www.cnblogs.com/liu2020/p/12515250.html