例外、コレクション
例外
- 適切なエラー処理を行う為に記述する
- catch節の()内にはException型と変数を書く(ex. catch (IOException e)など)
- catch節の()内に書く例外クラスはThrowableクラスから段々に継承されて行ったクラスである
- catch節の()内の変数に入るものは例外クラスの「オブジェクト」である
- メソッドが例外を起こした時の記述
- エラーが起こった箇所がtryの{}内華道家をチェック、
- もしtryの中ならcatchできる例外かどうかをチェック、catchできたらcatch切に処理を移す
- tryの中でないならば、メソッドの呼び出し元へ戻る
- 戻ったら上記1を行う、それの繰り返し
- 最終的にcatchできなければ、mainの呼び出し元であるJVMへと戻って、プログラムが停止する
- 例外を自分で投げたい場合はthrow new IOExceptionなどとインスタンスを記述する、throws節と違ってsがつかないので注意。
- throws節はメソッドの引数の後に書く
- 必ず行いたい処理はfinally節に書く
- catch節は上から順番に見て、一つしかキャッチされない、よって書く順番に注意する
- 例外のスーパークラスをcatch節に書けば例外のサブクラスはキャッチできる、キャッチしてしまう
例外の分類
- チェックされない例外(RuntimeException)
- try-catchもしくはthrows節を書いても書かなくてもいい
- コンパイラによりチェックされる例外(それ以外の例外)
- try-catchもしくはthrows節を書かなければならない
コレクション
- データ構造(配列、線形リスト、スタック、キュー、木、ハッシュテーブルなど)を意識して使い分ける
- データ構造とアルゴリズムをセットで
- それぞれのコレクションの特徴をわきまえた上で使い分ける
ArrayList
- <>内にはジェネリクス型を書く、ジェネリクスとはここではArrayListの中に入る要素の型で、それを規制することができる
- ジェネリクスには参照型しか指定できない
- ArrayListは大きさを指定しなくてよいところが配列とは異なる
- addメソッドで要素を追加、sizeメソッドで大きさを取り出し、getメソッドで要素を参照する
- ArrayListは内部的には配列を使っていて、大きさが一定以上になると作り直している
- Iteratorは以下のようにして使う(うまく日本語で表現できないのでコードから読み取ってくださいw)
ArrayList<String> list = new ArrayList<String>(); list.add("A"); list.add("B"); list.add("C"); for (Iterator<String> it = list.iterator(); it.hasNext();/*3つ目は処理書かない*/) { String name = it.next(); // インクリメントのような役割 System.out.println(name); }
- 拡張for文は内部的にはIteratorが使用されている
- ジェネリクスが参照型しか指定できない理由は後方互換性によるところが大きい?
- 基本型をそのままArrayListには入れられないので、裏で勝手にオートボクシングが行われる。オートボクシングとは基本型を自動的にラッパークラスに変換するみたいなこと
- 昨日でJava言語仕様の研修が終わった、怒濤の2週間だった
- これからはどんどん自分でコードを書いて行くことを心がける