Javaプログラマー Silver覚えておきたいTips[Oralce][資格勉強]

Oracle社が提供している『Java プログラマー Sliver』の勉強のメモです。この資格の勉強中に覚えておくとあとでJavaプログラムを書くときにの基礎になりそうな項目を中心にメモしておきます。


👽 クラス定義とオブジェクトの生成

オーバーロード

オーバーロード』とは、1つのクラス内に同じ名前のメソッドやコンストラクタを複数定義できることです。ただし『引数の並び、データ型、数が異なっている』ことがオーバーロードの条件となります。

オーバーロードのポイントは次のとおり。

  • (1) オーバーロードされたメソッドは、それぞれ別々に定義されたメソッドとして扱われる
  • (2) 同一クラス内に同じ名前のメソッドが2つ以上存在し、これらの引数データ型が異なるか、データ型は同じであっても順番が異なるか、数が異なる場合にはオーバーロードとみなされる
  • (3) オーバーロードされたメソッドは、戻り値の有無、データ型の違いなどの制限はない
  • (4) オーバーロードされたメソッドのいずれが呼び出されるかは、メソッドの呼び出し時に指定された引数を元にコンパイラが判定する
  • (5) オーバーロードされたメソッドは、異なる修飾子を指定できる(修飾子については後述)
  • (6) スーパークラスから継承したメソッドに対してもオーバーロードできる

アクセス修飾子とカプセル化について

(公開範囲が広い)
public => どのクラスからでも利用可能
↓
protected => このクラスを継承したサブクラス、もしくは同一パッケージ内のクラスから利用できる
↓
デフォルト(指定なし) => 同一パッケージ内のクラスからのみ利用可能
↓
private => 同一クラス内からのみ利用可能
(公開範囲が狭い)

🍄 継承とポリモフィズム

インタフェースについて

インタフェースの構文について。

  • (1) インターフェスで宣言できるメソッドは抽象メソッドのみ
  • (2) インタフェースではpublic staticな定数を宣言できる。定数のため初期化が必要。初期化しない場合はコンパイルエラーとなる
  • (3) インスタンス化はできない。実装クラスは、抽象メソッドをオーバーライドする
  • (4) 実装クラスを定義するには、implementsキーワードを利用する
  • (5) インタフェースを元にサブインタフェースを作成する場合はextendsを利用する

インタフェースの抽象メソッド、変数に付与される修飾子について。

 * 抽象メソッド => public abstract 修飾子が付与
 * 変数 => staic final 修飾子が付与(定数となる)

😸 データ型

プリミティブ型と参照型

  • プリミティブ型(基本データ型)
    • 具体的な値を格納するための型。基本データ型ともいう。
    • 例: byte, short, int, long, float, double
  • 参照型
    • インスタンスを指し示す番号、もしくは番号を格納するための変数。
    • newを用いてインスタンスを作成する必要がある
    • 例: Byte, Short, Integer, Long, Double

オートボクシング / アンボクシング

プリミティブ型 => ラッパの参照型への自動変換を「オートボクシング」と呼ぶ。

int intNumber = 10;
Integer integerNumber = intNumber;

逆にラッパの参照型 => プリミティブ型への自動変換を「アンボクシング」と呼ぶ。

Integer integerNumber = new Integer(10);
int intNumber = integerNumber;

参照型にはNullが入る可能性がある

Integer integerNumber = null;
int intNumber = integerNumber; // NullPointerException が発生

基本データ型の型変換

暗黙型変換

byte値をint型に代入したり、 float値をdouble型に代入する場合、暗黙的に型変換が行われる

byte => short => int => long => float => double
char => int => long => float => double

キャストによる型変換

int型をbyte型の変数に代入したり、 double値をfloat型の変数に代入する場合は『キャスト』が必要。

double => float => long => int => short => byte
double => float => long => int => char

参照型の型変換

暗黙型変換

サブクラスのオブジェクトをスーパークラス型で変換した変数で扱える。また、実装クラスのオブジェクトをインタフェースの方で宣言した変数で扱える。

サブクラス => スーパークラス
実装クラス => インターフェース

キャストによる型変換

スーパークラスで宣言した変数で参照しているサブクラスのオブジェクトを、元の型であるサブクラス型で宣言した変数で扱うにはキャストを用いる。

スーパークラス => サブクラス
インターフェース => 実装クラス

ポリモフィズム

オブジェクト指向言語では、共通のインタフェースをもつ操作でも、実際にはオブジェクトごとに振る舞いや動作が異なることをポリモフィズム(多態性、多層性)という。

arraycopyメソッドについて

よく勘違いしてしまう、arraycopyメソッドについて。

arraycopy(array, originStartNum, copy, copyStartNum, copyElementNum)

array - コピー元の配列名
originStartNum - コピー対象の開始位置
copy - コピー先の配列名
copyStartNum - コピー先の開始位置
copyElement - コピーされる配列要素の数

🚕 例外処理

例外の種類

Javaの例外には『例外処理が必須のchecked例外』と『例外処理が任意のunchecked例外』がある。

  • (1) Errorクラスおよびそのサブクラス => unchecked例外
  • (2) RuntimeExceptionクラスおよびそのサブクラス => unchecked例外
  • (3) RuntimeExceptionクラス以外のExceptionのサブクラス => checked例外

オーバーライドにおける例外処理(throws)の注意点

メソッドをオーバーライドする際に例外処理(throws)を記述する際のルールについて。

  • (1) サブクラスのメソッドがスローする例外は、スーパークラスのメソッドがスローする例外クラスと同じか、その例外クラスのサブクラスとする
  • (2) サブクラスのメソッドがスローする例外は、RuntimeExceptionおよびRuntimeExceptionのサブクラスの例外は、スーパークラスのメソッドに関係なくスローできる
  • (3) スーパークラスのメソッドにthrowsがあっても、サブクラス側でthrowsを記述しないことは可能

オーバーライドのルール

例外処理ではないけど、オーバーライドには以下のようなルールがあります。

  • (1) オーバーライドとは、メソッド名、引数リストがまったく同じメソッドをサブクラスで定義すること
  • (2) 戻り値の型は、スーパークラスと同じものか、もしくはその戻り値の方のサブクラスであれば利用可能
  • (3) アクセス修飾子は、スーパークラスと同じものか、それよりも公開範囲が広いものであれば利用可能
  • (4) throwsには、スーパークラスのメソッドかthrowsに指定した例外クラスとそのサブクラスが指定できる
  • (5) ただし、RuntimeExceptionクラスおよびそのサブクラスは制約なしにthrowsに指定できる
  • (6) スーパークラスのメソッドにthrowsがあっても、throwsをしてしなくてもいい

😎 その他

switch文

swich文で使えるデータ型は、byte, char, short, int, enum, Stringのいずれかの値である必要がある

ArrayListクラス

ArrayListは参照型しか使えない。基本型(int, double)を使うときは参照型のラッパを使う必要がある

🎂 変更来歴

  • (2015-01-05 22:30) 新規作成
  • (2015-01-06 21:50) 微調整
  • (2017-03-12 17:00) 項目追加

🐮 参考リンク

📚 おすすめの書籍

💩 欲しいものリスト公開しました