【Java】勉強 – 要点整理ノート null関連、継承、インターフェイス 等について – 8月上旬

EngineeringJava, 備忘録, 職業訓練

【Java】勉強 – 要点整理ノート null関連、継承、インターフェイス 等について – 8月上旬

【null 関連】(Silver 受験対策)

  • String str = null; str += “null”; System.out.println(str); →  nullnull
  • String str = null; if ( str.equals(“”) )  NullPointerExceptionになる
  • String str = null;  System.out.print(str.toString());  NullPointerExceptionになる
  • Object obj = null;  System.out.println(obj.toString());  NullPointerExceptionになる
  • 参照変数mc2 = null  mc2 の参照は失われるが、変数 mc は生成したオブジェクトを参照している。
  • String array[] = new Sting[5]; array[1] = “A”; array[2] = “B”; array[3] = “C”;
    array[0] と array[4] は null 配列の要素に値を明示的に代入しない場合、String型の初期値はnullとなる。
  • String[] s = { null }; 配列初期化  double[] d = null; 配列生成無し →  System.out.println(s[0]);    System.out.println(d); → null null
  • int num[] = new int[5];  num[0] = 0;  num[1] = 10;  num[2] = 20;
    num[3]は0 num[4]は0 配列の要素に値を明示的に代入しない場合、int型の初期値は0となる。
  • if ( args.length == 0 ) 次に進む。 mainメソッドのString配列型引数には要素数0の配列インスタンスへの参照が渡される。
  • List<String> list = new ArrayList<>  list.get(0);  IndexOutOfBoundsExceptionになる
  • System.out.println(args[0].length());  ArrayIndexOutOfBoundsExceptionになる
  • int[] array = {};  array[0] = 10;  ArrayIndexOutOfBoundsExceptionになる
  • Item[] items = new Item[3];  items[1] = new Item(“A”);  items[2] = new Item(“B”);
    item.name →  NullPointerException nullが代入されている参照変数に対しメソッド呼出を行なった場合に発生
  • Item[] items = new Item[3] ;  配列の初期化  +  items[0] = new Item(); 〜  要素の初期化  (参照:http://oswald.hatenablog.com/entry/20081221/1229914058)
  • String str = “”;  str.isEmpty()  →  true

 

 

【0による除算】

  • 整数を〜 ArithmeticException
  • double型変数を〜
    • dnum > 0 Infinity
    • dnum = 0 NaN
    • dnum < 0 -Infinity

 

 

【継承】

  • Pet dog = new Pug(); インターフェイス型の変数を利用して対象のオブジェクトの処理を呼び出す操作が、ポリモフィズムの仕組みを利用した呼出。
  • 参照変数の型として使える。
  • 一つのクラスからは複数のインスタンスが生成されることが前提になっている。
  • Parent p = new Child();  Child オブジェクトの参照情報が代入されるが参照できるのは Parent メンバのみ。
  • ポリモフィズム polymorphism
    • A b = new B( );  フィールドはA型 メソッドはoverride等による。
    • サブクラスとスーパークラスで同名フィールドがあった場合、
      フィールド参照:変数の型で宣言された方を使う
      メソッド呼出:メソッド内指示(オーバーライドの有無)に従う
  • 同じメソッドを使って、暗黙的に様々なインスタンスの動作を、条件によって動的に、切り替えるというもの。ポリモフィズムを実現するためには、関係する上位のクラスやインターフェイス型としてインスタンスを扱う。引数の型をスーパークラス型またはインターフェイス型とします。 static メンバには適用されず、変数宣言時のクラス側のメソッド(1番上)を呼び出す。
  • 異なるオブジェクトに対して同じメッセージを送った場合、オブジェクトごとに異なる処理が適切に実行される性質。 変更に弱くなる可能性を高める差分プログラミングは避ける。 ポリモーフィズムの実現のため・変更に強くするために継承を使う。 狭い範囲のフィールドでまとめて対応する。
  • is_a:継承 extends
  • has_a:インスタンスの入れ子 能力の連続追加。
  • コンストラクタ とは そのもののメソッド化・メモリ読込。
    class Car {
        Car(String vin) { }
        Car () { }
    }
    class Tnk extends Car {
        Tnk(String vin) {
            super(vin);
        }
    }
    Sub/Super Car( ) Car( String vin )
    Tuk( ) ○:CE – Compile Error 無し ×
    Tuk( String vin ) ○:CE無し  ○ 1)super(vin); 2)Car( ) { }
  • public class Weapon extends Item{ public Weapon() { super(“ななしの剣”); } }
  • 継承関係は、コンストラクタである super(); で繋がる。
  • メッセージの送信側とメッセージの受信側が動的に決まるというオブジェクト指向プログラミング言語が持つ性質。オブジェクト指向設計の原則である「機能と実装の分離」を実現するために欠かせない機能で、オブジェクトを呼び出す側が意識しなくても実行時の条件に合った適切なメソッドが実行できる。ポリモーフィズムは継承を利用しているため、オーバーライドと同様な機能に見えるが、ポリモーフィズムの場合は機能が置き換わるのではなく、同一名称メソッドであるが振る舞いは異なるメソッドとして働く。
  • System.out.println(“”);の呼出時に、参照情報を引数で渡すと、対象オブジェクト内にあるtoString()メソッドが呼び出される。
  • 基本データ型からラッパークラスへの自動変換を Autoboxing と呼び、ラッパークラスから基本データ型への自動変換を Unboxing という。Autoboxing においては暗黙の型変換は行われない。
  • オーバーロードされたメソッドやコンストラクタの呼び出す優先順位
    完全一致 > 暗黙の型変換 > Autoboxing > 可変長引数
  • public Cleric(String name, int mp) { this(name, mp, MAX_MP); }◆
  • void checkIn(Hero h) { //h.hp += 100;  private のため不可視! h.sleep(); // だからmethod経由◆}

 

 

【this】

  • インスタンスへの参照変数.フィールド名   インスタンスへの参照変数.メソッド名
    • 呼出元が static なメソッド → インスタンスへの参照を示す this は使えない。
    • インスタンス変数への適用 this.変数名; コンストラクタ内から、オーバーロードされた別のコンストラクタを呼び出すときに使う。引数で受け取った値は引数に代入される。
    • コンストラクタの呼出の適用 this( ); 定義の先頭に記述する
    • super コンストラクタ内からスーパークラスのコンストラクタを呼び出す。
  • this( ) の引数内でthisキーワードを使用して変数を指定することはできない。

 

 

【数量子】

  • X?:1または0回   X*:0回以上   X+:1回以上
  • X { n }:n回   X{ n, }:n回以上   X{ n, m }:n回以上m回以下

 

 

【パターン】 Javaにおける正規表現

  • [abc]:a, b, c(単純クラス)
  • [^abc]:a, b, c 以外(否定)
  • [a-zA-Z]:a-z または A-Z(範囲)
  • [a-d[m-p]]:a-d または m-p(結合)
  • [a-z&&[def]]:d, e, f(交差)
  • [a-z&&[^bc]]:b, c を除く a-z(減算)
  • [a-z&&[^m-p]]:m-p を除く a-z(減算)

 

 

【定義済み文字クラス】

  • ¥d:数字 [0-9]   ¥D:not 数字 [^0-9]
  • ¥s:空白文字 [ ¥t¥n¥xoB¥f¥r ]   ¥S:not 空白文字 [^¥s]
  • ¥w:単語文字 [a-zA-Z_0-9]   ¥W:not 単語文字 [^¥w]

 

 

【API】

  • replace java.lang.String java.lang.StringBuilder, StringBuffer java.util.Map インターフェイス
  • replaceAll java.lang.String java.util.regex.Matcher
  • append java.lang.StringBuilder, StringBuffer
  • add java.util.Calendar java.util.Collection インターフェイス java.util.List インターフェイス java.util.Set インターフェイス java.util.Queue インターフェイス java.util.ListIterator インターフェイス
  • null java.util.Optional
  • toString java.lang.Object java.lang.Throwable
  • public String toString() 「オブジェクトの文字列表現を返します。一般に、toStringメソッドは、このオブジェクトを「テキストで表す」文字列を返します。この結果は、人間が読める簡潔で有益な情報であるべきです。すべてのサブクラスで、このメソッドをオーバーライドすることをお薦めします。クラスObjectのtoStringメソッドは、オブジェクトがインスタンスになっている元のクラスの名前、アットマーク文字「@」、およびオブジェクトのハッシュ・コードの符号なし16進数表現から構成される文字列を返します。つまり、このメソッドは次の値と等しい文字列を返します。」
    getClass().getName() + ‘@’ + Integer.toHexString(hashCode())   戻り値:このオブジェクトの文字列表現。
  • equals java.lang.Object java.util.Date Calender, GregorianCalender java.time.LocalDateTime, OffsetDateTime, Zoned DateTime java.util.Collections
  • null 以外の参照値xについて、x.equals(null) は false を返すこと(必要条件)。
  • public boolean equals(Object obj) { return (this == obj) ; }  同一性

 

 

【インターフェイス】

  • インターフェイス内で変数を宣言すると、暗黙的に public static final 修飾子が付与されるため、staticな定数となる。
    • インターフェイス内でメソッドを宣言すると、インターフェイスとは外部に公開することを目的としているものであるため、暗黙的に public abstract 修飾子が付与される。
    • インターフェイスを実現したクラスで具象メソッドを提供する場合、アクセス修飾子を変更できない。
    • public static な定数を宣言できる。定数となるため初期化しておく。
    • インターフェイスで宣言できるメソッドは抽象メソッドのほか、デフォルトメソッドとstaticメソッドを定義できる。
    • インスタンス化はできず、利用する場合は実装クラスを作成し、実装クラス側では抽象メソッドをオーバーライドして使用する。
    • 実装クラスが具象クラスの場合、implements で指定したインターフェイスのすべてのメソッドをオーバーライドする。オーバーライドする際にはpublic 修飾子をつける。

 

 

【そのほか】

  • メソッドの引数に基本データ型の値を渡すと、値のコピーとなる。 メソッドの引数で参照型の値を渡すと、参照のコピーとなる。  ◆スコープ:void incr( int squares ) 変数 squares の値をコピーしてメソッド incr( ) に渡している。
  • Stringは不変オブジェクト 文字列を変更するには新しくインスタンスを作る。
  • break 文はループ文またはswitch文でしか使えない。if文X
  • StringBuilder sb = new StringBuilder(“hello”);  sb.delete(0, sb.length());  文字をすべて削除
  • List&lt;A&gt; listA = new ArrayList&lt;&gt;(); listA.add(new D()); 抽象クラスAを扱うコレクションを用意し、DのインスタンスをAに追加する。
  • System.out.println は、オブジェクト型を toString メソッドで呼び出す。Object クラスに定義されている toString メソッドは「クラス名@ハッシュコード」という書式の文字を返す。
  • transient 修飾子 フィールドを永続的な状態に構成するものではない場合に、対象外とするための修飾子。String str = null; if ( str.equals(“”) ) NullPointerExceptionになる
  • 8進数は0が接頭辞。 0827はCE。
  • int型の3 00000000000000000000000000000011
  • float型の3.0 01000000010000000000000000000000
  • アクセス修飾子を付与する際のルールはただひとつ、「要件を満たす範囲でできるだけ狭いアクセス範囲を指定する」ことです。特にパッケージプライベートとpublic/protectedとの間には、大きな差があります。パッケージプライベート/privateであるということはAPIが非公開であることを意味しますので、実装を修正する際にも互換性の維持などを意識する必要はありません。しかし、public/protectedは公開APIなので、利用者に対して一定の責任を負うことになります。
  • instanceof:左辺で指定された変数が参照するオブジェクトが、右辺で指定されたクラスの型を持っていれば true を返す。左辺等辺に継承関係がない場合にはコンパイルエラーとなる。
  • 汎化:抽象化   特化:具体化

 

 

 


東京都の職業訓練。開講から1ヶ月半経過。今の所遅刻欠席無し。45分講義と10分休憩の繰り返し。意外と休めない。自前の参考書を持って行ったりするものの、講義自体の内容が難易度が上がってきているためさほど読めない。講義と休憩時間のスパンがやや短いため、その日の講義が終わるのも早い。 6時限/日で15:15講義終了。

優しい気配りのある講師で今回の私は幸運だった。同じテーブルの隣の人がPCごと斜に構えるのが気になって仕方がなく、我慢の限界だったため席替えを要望したらすんなり容れて下さった。感謝。

 


高校卒業資格「ディプロマ」を短期間で取得

EngineeringJava, 備忘録, 職業訓練

Posted by Qawai