[研究ノート]「Javaプログラミングのアイデア、」章1〜7を通じ

オブジェクトへの第一章はじめに

一冊の本の要約。

スキミング。

第II章すべてが対象です

  1. オブジェクトへの参照を作成します。
  2. セキュリティのアプローチ:それは初期化されます同時に参照を作成します。
  3. オブジェクトの保管場所:
    1)登録: -内部プロセッサこれは、それが他の記憶領域が異なるように配置され最速の記憶領域です。
    2)積層体(スタック)スタックである一般的なRAMで、しかし直接スタックポインタプロセッサからサポートすることができます:。スタックポインタは、新しいメモリを割り当てる、下方に移動され、上方に移動した場合、そのメモリを解放します。これはレジスタに、メモリを割り当てるための迅速かつ効果的な方法です。あなたがプログラムを作成すると、Javaシステムは、スタック内の正確なライフサイクルが上に移動するためには、スタックポインタの下、すべての項目を保存するために知っておく必要があります。いくつかのスタックに格納されたJavaデータが-特に、オブジェクト参照ではなく、Javaオブジェクトが格納され。
    3)原子炉:(も)RAMにある共通メモリプールは、Javaオブジェクトのすべてを格納するため、スタックは、ヒープのメリットと異なっている:コンパイラはヒープに格納されたデータは、長く生き残る知る必要はありません。
    4)定数記憶:通常のプログラムコードに直接格納一定の値が、彼らが変更されることがないので、そうしても安全です。
  4. オートボクシング:自動的パッケージタイプに生のデータ型を変換します
  5. 自動アンボクシング:自動的に生のデータ型に型データをパッケージ化
  6. 8基本データ型:

     

     収納スペースの大きさが指定されていないboolean型で占められており、唯一のリテラルtrueまたはfalseをとることができるように定義されています。

  7. Javaオブジェクトおよびプリミティブデータ型は同じライフサイクルを持っていません。新しいを使用してJavaオブジェクトを作成すると、それは範囲外生き残ることができます。
    例えば:
    {
      文字列S =新しい新しい文字列(「」);
    }
    sはスコープの終了時に消失に引用。しかし、文字列のS点は、メモリ空間を占有し続けて、まだオブジェクト。それが唯一の参照がスコープの範囲を超えていたので、この短いコードでは、この範囲の後に、このオブジェクトにアクセスすることはできません。
  8. Javaは作成された新しい、そしてオブジェクトがもはや参照されている特定されていないとすべてのオブジェクトを監視するために使用されるガベージコレクタを、持っています。そして、これらのオブジェクトのメモリ空間を解放します。
  9. でも、静的変数が含まれている複数のオブジェクトを作成し、この変数は唯一の収納スペースです。これは、それが直接クラス名で参照することができるオブジェクトによってオブジェクトを検索するための基準であってもよいです。
  10. クラスInteger例:

    整数I1 = 10; //これはオートボクシングである
    整数I2 = 10; 
    整数I3 = 20。
    整数I4 =新しい整数(10)。
    整数I5 =新しい整数(10)。
    整数I6 =新しい整数(20)。
        
    System.out.println(I1 == I2); //真(1)
    のSystem.out.println(I3 == I1 + I2); //真(2)
    のSystem.out.println(I1 == I4)。 //偽(3)
    のSystem.out.println(I4 == I5); //偽(4)
    のSystem.out.println(I6 == I4 + I5); //真(5)
    のSystem.out.println( 20 == I4 + I5); //真(6)

     「+」演算子は、20を与えるためにIntegerオブジェクト、I4及びI5最初の自動アンボクシングには適用されず、その後も自動的にアンパックI6のint値20は、同じです

  11. Stringクラスには、例えば:
    返された文字列への参照がある場合は、同じ内容の文字列定数プールがあるかどうかでインターン()メソッドのルックスは、それ以外の定数プールに独自の文字列を追加します
    文字列S1 = "こんにちは"; 
    文字列s2を= "こんにちは"; 
    文字列S3 = "HEL" + "LO"。
    文字列S4 = "HEL" +新しい文字列( "LO")。
    文字列S5 =新しい文字列( "こんにちは"); 
    ストリングS6 = s5.intern()。
    ストリングS7 = "H"。
    文字列S8 = "ello"。
    文字列S9 = S7 + S8; 
    
    System.out.println(S1 == S2); //(1)真
    のSystem.out.println(S1 == S3); //真(2)
    のSystem.out.println(S1 == S4); //偽(3)
    のSystem.out.println(S1 == S9); //偽(4)
    のSystem.out.println(S4 == S5); //偽(5)
    のSystem.out.println(S1 == S6 ); //真(6)
    • S1およびS2は同じメモリ空間に一定のプールポイントである、我々は同じです
    • S3サブストリングは、定数プールであり、文字列の連結は、コンパイル時に最適化され、等しいです
    • サブストリング組成S4は、新しいオブジェクトを作成することによって生成され、実行時のメモリ空間は等しくない、不明割り当てられました
    • S7とS8、文字列リテラル、S9へのスプライシングが、S7及びS8は、2つの変数として使用されるメモリ空間の予期しない、等しくありません
    • S4及びS5がスタックに格納されて、異なるアドレスが等しくありません
    • S6インターンによって()メソッドは、文字列「hello」を既に存在しており、定数プール「ハロー」の文字列、直接リターンアドレスように、S1と同じアドレスへS6ポイントので、定数プールを追加するに等しいです

第III章演算子

  1. 他のブール比較演算子のために利用可能でない間に等しいとしないが、基本データ型のすべてに対して等しいです。
  2. ==と!=比較は、オブジェクトへの参照であるが、オブジェクトの内容を使用する方法を等しく比較するために、それは直接==基本的なタイプを使用することができます。しかし、あなたは対等のデフォルトの動作は、()の参照を比較することであるため、ジョブは、このクラスのequalsメソッドをカバーするためにも、独自のクラスを記述しますが、場合。
  3. あなたは丸めの結果を取得したい場合は、ラウンド()メソッドは、追加のインポートでのjava.lang.Mathを必要としています。
  4. マシン内のすべてのサイズのすべてのデータ型が同じであるためJavaは、はsizeof()演算子を必要としません。
  5. 文字列string = "こんにちは"; 
    文字列+ = "世界"; //文字列= "Hello World"の
    

      + =「世界」の文字列は、String型のオブジェクトを指すのみ文字列はまた、元の文字列定数の「Hello」がメモリ内にも存在し、変更されない文字列尖ったオブジェクトを変更しません

  6. オブジェクトが操作されると、動作は実際にオブジェクトへの参照であり、「他のオブジェクトへのオブジェクトを割り当てます」を実際には1つの場所から別の「参照」の割り当てである場合
  7. Java言語では、パラメータは値によって渡され、包装タイプパラメータが参照によって渡され、元のデータ型が渡された
    タイプの他のすべてのデータタイプがに関して使用され、値渡しされた8つのプリミティブデータをトランスミッション、パッケージのこれらの8つの基本データ型は参照渡し不変クラス、であり、その値は変更されませんので、

    整数A = 1。
    整数B =。
    B ++; 
    System.out.println( "=" + A + "B =" + B); // A = 1、B = 2
    

      Integerクラスは不変クラスであるので、この方法は、その値を変更する方法を提供しない、実行B後++、整数Bに割り当てられた2の新しい値を作成します

  8. Java言語のバイト、ショート、およびときchar型の変換の種類を含む、最初の変数の値のすべてのこれらのタイプのint型タイプ、そしてINTを与えるように計算int型にキャストします。

第IV章では、実行の流れを制御します

  1. タグ:LABEL1としては:
    LABEL1を続行し、内部および外部の繰り返し反復を中断し、その後、繰り返しを続け、LABEL1の場所に直接アクセスしてください。
    またLABEL1破るLABEL1に、すべての反復を破るが、それは反復を再入力しません。
  2. foreachの構文は、主に配列や容器に使用されます。
    int型のF [] =新しいINT [10]。
    用(INT X:F)
        のSystem.out.println(X)

第V章の初期化とクリーンアップ

  1. 初期化を実行するために、呼び出されたときにコンストラクタが自動的に作成され、同一のオブジェクトの特殊なクラス名やメソッド名であり、それは値を返さないので、コンストラクタは、メソッドの特殊なタイプです
  2. 各オーバーロードされたメソッドは、パラメータの型のユニークなリストを持っている必要があります。オーバーロードされたメソッドを区別するためのメソッドの戻り値は現実的ではありません。
  3. このキーワードは、参照だけのための「オブジェクトはメソッドを呼び出すことを」内部方法、手段を使用することができます
  4. あなたはこれでコンストラクタを呼び出すことができますが、同時に2つを呼び出すことはできません、あなたはほとんどの開始位置にコンストラクタを呼び出す必要があります
  5. あなたは同じクラスメソッドの内部に別のメソッドを呼び出した場合は、これを使用していない、あなたは直接呼び出すことができます。
  6. 静的メソッドは、この方法ではありません。
  7. 各ベースクラスのメンバーは、それが初期化され、他の手段によって構成することができる初期値のデータ型は、オブジェクト参照がデフォルトヌルに初期化されなければなりませんが、デフォルトの初期化プロセスに影響を与えません。

  8. 一度だけ、このクラスの静的データメンバにこのクラスまたは最初の訪問の第1の目的は、その後静的オブジェクトは再び初期化されていない世代のstatic初期化
  9. (前のオブジェクト作成プロセスが初期化されるので、そうでない場合は)初期化シーケンスは、続いて第一の静的オブジェクトである「非静的オブジェクト」。
  10. アレイは、固有部材の長さを有し、読み取り専用で、不変
    Arrays.toString()メソッドは、一次元アレイの印刷可能なバージョンを生成します

  11. ()メソッドの確定
    作業を:オブジェクトによって占有ガベージコレクタがメモリを解放する準備ができたら、それは最初のファイナライズメソッドを呼び出しますし、次のガベージコレクションのアクションが発生したときに、本当にメモリがオブジェクトによって占有回復します。
    そして、ファイナライズ差デストラクタ:
    C ++では、オブジェクトが破壊され、Javaオブジェクトは、常にゴミが収集されていないか、または他の言葉で、オブジェクトはデストラクタ」に等しくないごみやガベージコレクションではないかもしれません。 "
    あなたは、もはやオブジェクトを必要とする前に、あなたには、いくつかのアクションを実行する必要がある場合、あなたはあなたが清掃作業を実行するための一般的な方法を作成する必要があり、それを自分で行う必要がありません。例えば、明示的に画面から消去されていない場合は、画面上に描画されます自分自身を作成するプロセス内のオブジェクトは、それがクリーンアップされない場合がありとします。あなたは、ガベージコレクション、ファイナライズが呼び出された機能のfinalizeメソッドを、消去のいくつかの種類を追加した場合、画像は消去されます。ガベージコレクションが発生していない場合、画像は保存されていたであろう。

    それは一般的なクリーンアップの方法として、真の目的は、いくつかは、割り当てられたストレージ容量は、C / C ++の機能なので、確定する必要性などのフリーとして、オブジェクトのためのメモリによって占めオブジェクトを作成されたもの以外の手段による放出を完成させるためにあるべきではありません確定しますネイティブメソッドでそれを呼び出します。
  12. System.gc()は、操作の終了を強制するために使用されます。
  13. ローカル変数は、手動でクラス変数は必要ありません初期化する必要があります。

第VI章アクセス制御

  1. あなたが任意のアクセス修飾子を提供しない場合は、それがあることを意味し、「パケットアクセス。」

第VII章多重クラス

  1. コード再利用の両方の方法:
    1)新しいクラスは、従来組成のオブジェクトクラスであるので、この方法は、)を有する(組成物と呼ばれているだけなので、新しいクラスのクラスを既存のオブジェクトを作成します。
    2)新しいクラス、形式を変更せずに既存のクラスを作成する前に、クラスタイプによれば、既存のクラスの形式と新しいコードを追加し、この方法)がある(継承と呼ばれています。
  2. あなたは、superキーワードを使用して明示的に基底クラスのコンストラクタ文を呼び出す必要があります。
  3. 継承された初期化シーケンス:
    親クラスの静的変数---> ---コード>サブクラス静的変数の親クラスの静的ブロック---> ---コードのサブクラス静的ブロック>親非静的変数--->親非静的ブロック--->親クラスのコンストラクタ--->サブクラス非静的変数--->サブクラス非静的ブロック--->サブクラスのコンストラクタ
  4. それはなぜ?移行をアップと呼ばれ
    、それは常に安全であるので、より一般的な型への変換のより専門種類から上方ための移行。すなわち、派生クラスは、ベースクラスのスーパーセットです。彼の方法は、より多くの基底クラスよりも含まれていてもよいが、彼は、少なくとも基底クラスが含まれている必要があります。上向きの遷移の間、発生する可能性がクラスインターフェイス唯一のものではなく、それらを得るための、方法がありません。コンパイラはまだ理由の上向きの移行を許可するか、「特別なマークの指定はありません」の場合には「それはリストラを明確にしたことがない」理由です。
  5. 最終:データ/メソッド/クラス
    最終的なデータ:1.コンパイル時の定数は変化しない。図2は、実行時に初期化された値であり、あなたはそれを変更する必要はありません。
    基本データ型のために、最終的な値はそれほど変化しない、参照がオブジェクトを指すように初期化されると、オブジェクト参照、最終的なメーク一定の基準については、別のオブジェクトをポイントすることができません。しかし、オブジェクト自体を変更することができます。
    最終pulic静的は:パッケージの使用外とすることができる、唯一の、一定です。
    すべて大文字で一定の初期値と最終的な静的基本タイプ(コンパイル時定数)
    最終パラメータ:Javaは、宣言的パラメータは、プロセス中に基準点を変更することができないことを意味し、パラメータ・リストの最後のパラメータとして指定することを可能これは、オブジェクト。
    最後の方法:二つの理由。1)の方法は、彼の意味を変更するために、任意の継承クラスを防ぐためにロックされ、2)過去にあるため、効率のため、Java仮想マシンの最新バージョンでは、最終的な方法を最適化する必要がなくなり、効率を最適化することができます。
    プライベートメソッドは、クラスは暗黙のうちに、最終的なものとして指定されています。
    finalクラス:彼はサブクラスを持ってしたくない、このクラスを拡張する予定はありません。メソッド最後のクラスは暗黙のうちに最終的に指定されています。
  6. 組成物は、一般的に多重の新しいタイプの基礎となる実装として既存の型の一部であっても、多重化、インタフェースの継承です。オブジェクト指向プログラミングの継承を強く強調したが、しかし、デザイン、一般的な優先順位を組み合わせ、必要な場合のみ継承を決定する際に使用するの冒頭に。柔軟性の組み合わせであるため。

おすすめ

転載: www.cnblogs.com/mcq1999/p/12026549.html