最近、私は仕事を休んだときに見たJavaでTheNingを使用しました。初めて見たのとは非常に違っていると感じました。 Javaのオブジェクトと参照の関係、および内部クラスの概念について話しましょう。
1。Javaのすべてはオブジェクトです
Javaのオペレーターオブジェクトは何ですか?答えは引用であり、CまたはC ++のポインターのようなものです。
参照がある場合は、現時点ではオブジェクトに関連付けなければなりません。そうしないと、参照が考えられるようにコントロールに残されません。たとえば、文字列リファレンスを作成します。
文字列s;
現時点では、オブジェクトに関連付けられていません。文字列の方法を呼び出すなど、現時点でいくつかの操作を行う場合、間違いなく問題があります(いくつかの基本的なタイプを除く、それらを定義するとき、それらは初期値に割り当てられるため)。
文字列s = new String();
または
文字列s =「私の名前はajun」です。
このようにするだけです。
2。オブジェクトに関連付ける方法
Javaでは、オブジェクトは通常、次のような参照に関連するために新しい介して作成されます。
文字列s = new String( "私の名前はajun");
これにより、リファレンスを関連付けるオブジェクトを作成するだけでなく、同僚向けに初期化するだけでなく、独自のオブジェクトタイプも作成します。
3。ストレージの場所
(1)スタック:一般的に、スタックは参照と基本型変数を保存します。スタックは主に、スタックポインターを上下に移動することにより、メモリを割り当ててリリースします。
基本型変数は、メモリが少ないため、新しい作成には適していません。
(2)ヒープ:Javaオブジェクトの保存に使用されます。プログラムが新規を実行すると、ヒープはこのオブジェクトにスペースを割り当てます。ヒープは、メモリを保存および解放するためのスタックよりもメモリを割り当ててリリースするために多くの時間を使用していることを忘れないでください。これが、基本的なタイプ変数をスタックに保存する必要がある理由です。これは、基本的なタイプ変数が最も頻繁に使用され、頻繁に保存および放出されるため、より多くの消費を消費すると、パフォーマンスを想像できるためです。
4。内部クラス
(1)内部カテゴリの基本的な知識:
一般に、Javaクラス内で定義されているクラスは内部クラスになります。メソッド本体の外側で定義されたクラス、メソッド内で定義されているクラス、静的な内部クラス(メソッドの外側のみ)、匿名の内部クラスの説明:
メソッド外のクラスを定義します。
クラスのメンバー変数(静的、非静的)にアクセスできます。クラスのメンバー変数を正しく参照できるようにするには、内側クラスのオブジェクトアクセス権限をインスタンス化する前に、最初に外部クラスのオブジェクトをインスタンス化する必要があります。クラスのメンバー変数として扱うことができるので、もっと理解できます。
メソッドの本体で定義されたクラス。
クラスのメンバー変数(静的、非静的)にアクセスできます。クラスのメンバー変数を正しく参照できるようにするには、最初に内部クラスのオブジェクトをインスタンス化する前に、外部クラスのオブジェクトをインスタンス化する必要があり、アクセス権を持つことができず、メソッドのローカル変数として扱うだけです。
静的インナークラス:
クラスの静的メンバー変数にアクセスすることによってのみ、匿名の内部クラスへのアクセス:
クラスのメンバー変数(静的、非静的)にアクセスできます。クラスのメンバー変数を正しく参照できるようにするには、内部クラスのオブジェクトのインスタンス化が持たない前に、外部クラスのオブジェクトをインスタンス化する必要があります(2)。内部クラスの役割は、クラスを非常によく隠すことができます。一般に、クラスではプライベート保護デフォルトアクセスを許可していません。
内部クラスは複数の継承を実装し、Javaがこれ以上継承できない特性を補うことができます(3)、例
パッケージcom.ajun.test.innerclass.example; / ** *フルーツコンテンツ * @Author Administrator * */ public Interface contents {string value(); }パッケージcom.ajun.test.innerclass.example; / ** * Surt Destination * @Author Administrator * */ public Interface Destination {// Destination String readLabel(); }パッケージcom.ajun.test.innerclass.example;パブリッククラスグッズ{private string des = "is ruit !!"; //メソッド外部プライベートクラスコンテンツはコンテンツを実装しています{プライベート文字列名= "Apple"+des; @Override public string value(){return name; }} //外部プライベートクラスのgdestinationは宛先{private string label; private gdestination(string label){this.label = label; } @Override public string readlabel(){return label; }} //匿名内部クラスパブリックデスティネーションgetDestination(最終文字列ラベル){return new Destination(){@Override public String readlabel(){return label; }}; }パブリックデスティネーションDest(String s){new gdestination(s); } public contents content(){new content(); }パブリックデスティネーションDest2(String S){class gdestinationは宛先を実装します{private string label; private gdestination(string label){this.label = label; } @Override public string readlabel(){return label; }} new gdestination(s)を返します。 }}パッケージcom.ajun.test.innerclass.example;パブリッククラステスト{public static void main(string [] a){goods gs = new Goods();内容c = gs.content();宛先D = gs.dest( "Beijing"); System.out.println(c.value()); system.out.println(d.readlabel());宛先D1 = gs.getDestination( "shanghai"); system.out.println(d1.readlabel()); system.out.println(gs.dest2( "tianjin")。readlabel()); }}コンテンツとgdestinationはよく隠されています。外部で電話をかけると、どのクラスが呼ばれているかがわかりません。そのため、このクラスには複数の継承機能があります。
出力;
アップルはルーツです!!北京上海天津