Javaの新しいキーワードがオブジェクトをインスタンス化していることを誰もが知っていると思います。はい、それはまた、新しいオブジェクトにメモリスペースを割り当てることです。
たとえば、New MyDate(22、7、1964)のような場合、彼の完成には4つの部分が必要です。
1つ。新しいオブジェクトにメモリスペースを割り当て、MyDateをヒープに保存します。
二。表示の初期化を実行します
三つ。コンストラクターを実行します。新しい方法のブラケットパラメーターはコンストラクターに渡され、オブジェクト値が公開されます。
4。この変数は、ヒープメモリ内の新しいオブジェクトへの参照として割り当てられます
素人の用語では、新しい操作は実際に新しいオブジェクトをメモリのヒープに追加し、コンストラクターメソッドを介して新しいオブジェクトを初期化し、スタック内のオブジェクトへの参照を保存することです。
ここに私は理解しやすいケースがあります:
Public Class Pet {Protected Bean Be = this.b(); public bean b(){return new bean();}} public void test(){be.setName( "Zhang san");} public void test2(){system.out.println(be.getName()) people(); pe.test(); pe.test2();}親クラスと子供のクラス。テストを介して名前に値を割り当てます。 test2の出力値は、出力テストが名前に割り当てられていることを発見します。メインメソッドを実行するとき、プログラムは最初に親クラスをコンパイルし、BEオブジェクトをインスタンス化するため、サブクラスの参照は同じオブジェクトですが、次のコードに変更された場合:
public void test(){bean be = new bean(); be.setname( "Zhang san");} public void test2(){system.out.println(be.getName());} public static void main(string [] args){people pe = new people(); pe.test2(); pe.test2();テストでは、メモリスタックに保存する参照が異なるため、私は新しいbeオブジェクトであり、出力はnullです。実際のエンコーディングプロセスでは、親クラスでより多くの参照を持つオブジェクトを作成したり、サブクラスを継承したり、Javaの単一右怠zyなモードに書き込むことをお勧めします。
パブリッククラスdanli1class {// 1。単一営利モデルを実装するには、その構築方法()private danli1class(){} // 2を変更する必要があります。まず、自分でインスタンスをプライベート静的danli1class dan1 = new danli1class(); // 3。他のプログラムがこのインスタンスのインスタンスHUAオブジェクトにアクセスできるようにするには、静的メソッドを定義する必要がありますpublic static danli1class danli1(){return dan1;}}これにより、メモリの使用量が節約され、オブジェクトが再利用されるようになります。