酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

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

Oracle社が提供している『Java プログラマー Sliver』という資格を2ヶ月ほど少しずつ勉強を続けています。今回はこの資格の勉強中に覚えておくとあとで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値を 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) 微調整

おすすめの書籍