Thinking in java--すべてがオブジェクトです

3719 ワード

読書ノート——『Thinking in java』第2章はすべて対象です
データ保存
  • レジスタ.これは、プロセッサの内部にある他のすべての保存方法とは異なる場所にあるため、最も速い保存領域です.しかしながら、レジスタの数は非常に限られているため、レジスタは必要に応じてコンパイラによって割り当てられる.私たちはこれに対して直接的な制御権を持っていないし、自分のプログラムでレジスタの存在の跡を見つけることもできません.
  • スタック.通常のRAM(ランダムアクセスメモリ)領域に存在するが、そのスタックポインタによって処理の直接的なサポートを得ることができる.スタックポインタを下に移動すると、新しいメモリが作成されます.上に移動すると、メモリが解放されます.これはレジスタに次ぐ非常に速く、特に有効なデータ保存方式である.プログラムを作成する場合、Javaコンパイラはスタック内に保存されているすべてのデータの「長さ」と「存在時間」を正確に知る必要があります.これは、ポインタを上下に移動するために、対応するコードを生成する必要があるためです.この制限はプログラムの柔軟性に影響を与えるに違いないので、Javaデータの中にはスタック、特にオブジェクトハンドルに保存するものもありますが、Javaオブジェクトは配置されません.
  • スタック.Javaオブジェクトが保存されている通常の用途のメモリプール(RAM領域にもあります).スタックとは異なり、「メモリスタック」や「スタック」(Heap)が最も魅力的なのは、コンパイラがスタックからどれだけのストレージスペースを割り当てるかを知る必要がなく、格納されたデータがスタックにどれだけ滞在するかを知る必要がないことです.そのため,スタックでデータを保存する際により柔軟性が得られる.オブジェクトの作成を要求する場合は、newコマンドで関連するコードを作成するだけです.これらのコードを実行すると、スタックに自動的にデータの保存が行われます.もちろん、この柔軟性を達成するためには、スタックにストレージスペースを割り当てるのにより長い時間がかかるという代価が必要になります.
  • 静的ストレージ.ここでの「静的」(Static)とは、「固定位置にある」(RAMにもあるが)ことを意味する.プログラムの実行中、静的に格納されたデータは呼び出しをいつでも待機します.staticキーを使用して、オブジェクトの特定の要素が静的であることを示します.ただし、Javaオブジェクト自体は静的ストレージスペースに配置されません.
  • 定数が格納されます.通常、定数値はプログラムコードの内部に直接配置されます.このようにするのは安全です.それは永遠に変わらないからです.定数によっては厳密に保護する必要があるため、読み取り専用メモリ(ROM)に格納することが考えられる.
  • 非RAMメモリ.データが1つのプログラムから完全に独立している場合は、プログラムが実行されていない場合でも存在し、プログラムの制御範囲外であってもよい.2つの最も主要な例は、フローオブジェクトと固定オブジェクトです.ストリームオブジェクトの場合、オブジェクトはバイトストリームになり、通常は別のマシンに送信されます.固定オブジェクトの場合、オブジェクトはディスクに保存されます.プログラムが実行を中止しても、それらは自分の状態を維持することができます.これらのタイプのデータストレージでは、特に有用なテクニックは、他のメディアに存在することです.必要に応じて、RAMベースの通常のオブジェクトに復元することもできる.Java 1.1は、Lightweight persistenceのサポートを提供しています.将来のバージョンでは、より完全なシナリオも提供される可能性があります.

  • 基本データ型
  • はスタックに格納される.
  • バイト8ビット.
  • boolean 1ビットBoolean
  • char 16ビットCharacter
  • byte 8ビットByte
  • short 16ビットShort
  • int 32ビットInteger
  • long 64ビットLong
  • float 32ビットFloat
  • double 64ビットDouble
  • はいずれも記号数があり、記号がないものはありません.
  • BigIntegerとBigDecimalは精度が十分で、intやfloatにできることはBigIntegerやBigDecimalと同じようにできます.
  • 基本データ型はメンバー変数として、デフォルトで初期化されています!

  • オブジェクトの存在
    Javaオブジェクトには、プライマリタイプと同じ存在時間はありません.newキーワードでJavaオブジェクトを作成すると、役割ドメインの範囲外になります.次のコードを使用します.
    {
        String s = new String("a string"); 
    }/*        */ 

    ハンドルsは、役割ドメインの終点で消えます.しかし、sが指すStringオブジェクトは依然としてメモリ領域を占めている.
    Javadoc
    すべてのjavadocコマンドは「/**」コメントにのみ表示されます.注釈ドキュメントには、注釈の後ろにある要素:クラス、変数、またはメソッドに対応する3種類の注釈ドキュメントがあります.すなわち、1つのクラス注釈はちょうど1つのクラス定義の前に位置する.変数コメントは、変数定義の直前にあります.メソッド定義は、メソッド定義のちょうど前にあります.
    /**       */ 
    public class docTest { 
        /**        */ 
        public int i; 
        /**        */ 
        public void f() {
    
        } 
    }

    注意javadocはpublic(共通)およびprotected(保護された)メンバーに対してのみコメントドキュメントを処理できます.「private」(プライベート)と「フレンドリー」メンバーのコメントは無視され、出力は見えません.すべての3種類の注釈ドキュメントには@seeタグが含まれており、他のクラスのドキュメントを参照できます.このタグに対してjavadocは対応するHTMLを生成し、他のドキュメントに直接リンクします.フォーマットは次のとおりです.
    @see    
    @see      
    @see     #   

    各フォーマットには、生成されたドキュメントにハイパーリンクの「See Also」(参照)エントリが自動的に追加されます.javadocでは、指定したハイパーリンクはチェックされず、有効かどうかは検証されません.