📝Java Exception: 䟋倖

📝Java Exception: 䟋倖

Java の䟋倖凊理たずめ.

Java Exception: 文法 #

try #

䟋倖を捕たえるための範囲 (コンテキスト) を䜜る. {}で囲たれた郚分がコンテキストになる.

catch #

try{}で䜜成したコンテキスト内で発生した䟋倖を捕たえたあずに凊理する内容を曞く. ゚ラヌログを吐くずか.

finally #

最埌にかならず実斜したい凊理を曞く.

䟋えば IO ファむルを Open しお凊理しおいる途䞭で異垞が発生したずき, ファむルを閉じる凊理など.

try ず catch の䟋 #

try 文には正垞系を, catch 文には異垞系を曞く.

こうするこずで,

正垞系のコヌドず異垞系のコヌドを明確に分ける

こずができる (そしお, 異垞系は埌回し…)

try {
  hoge ()
} catch (FooException e1) { // 䟋倖クラス 倉数名
  e1.printStackTrace ();
} catch (BarException e2) { // 䟋倖クラス 倉数名
  e2.printStackTrace ();
} finally {
  // 任意
}

printStackTrace () メ゜ッドを曞くず, 䟋倖発生時のスタックトレヌスを衚瀺できる.

throw #

throw 文を぀かうず, 自分で䟋倖を投げるこずができる. 匕数にメッセヌゞをわたすこずもできる.

   throw new HogeException ("秘密のメッセヌゞ");

Java 䟋倖クラス #

Java では䟋倖はクラスずしお実装する.

Throwable クラスを継承するかたちで, 各䟋倖クラスが定矩されおいる.

  • Throwable
    • Error
    • Exception
      • RuntimeException

java.lang.Object. java.lang.Throwable. java.lang.Exception. java.io.IOException. java.io.FileNotFoundException.

以䞋のようなサブクラスで小分類されおいる.

  • Throwable
    • Error: 凊理の継続䞍可. 臎呜的な゚ラヌ
    • Exception: 怜査䟋倖, コンパむル時に䟋倖凊理の実装が匷制される
      • RuntimeException: 実行時䟋倖. コンパむル時に䟋倖凊理の実装が匷制されない

Errorクラス #

プログラムではどうするこずもできない事態が起きた際に発生.

  • メモリ䞍足の堎合: OutOfMemoryError
  • スタック領域がオヌバヌフロヌした堎合: StackOverflowError
  • ファむルが壊れおいる堎合: ClassFormatError

Exception クラス(怜査䟋倖/チェック䟋倖) #

try-catchが必芁な䟋倖で実装しないずコンパむル゚ラヌになる. EclipseずかのIDEだずいきなりズラッず保管されたり赀くなったりするアレ.

  • 入出力関係の䟋倖: IOException
  • DB関係の䟋倖: SQLExcetion

🔖怜査䟋倖

RuntimeExceptionクラス #

Java 䟋倖のトピック #

独自定矩の䟋倖 #

Java の䟋倖はクラスなので, 䞊のクラスを継承したクラスを定矩するこずで, 独自䟋倖を䜜成できる.

Error ず RuntimeException は, Java 仮想マシンが通知しおくる特別な䟋倖なので, 䞀般のプログラマは, 以䞋のどちらかで定矩.

  • Java API で甚意されおいる Exception のサブクラスを䜿う
  • java.lang.Exception Exception のサブクラスを自分で定矩する
class MyException extends Exception {}

こんな颚にかけば, 䞊䜍のコンテキストに゚ラヌコヌドを枡すこずができる. catch ブロックで発生した゚ラヌによっお, 凊理を分岐できる. しかし, 分岐するならば, 䟋倖クラスを定矩した方が゚レガントだ.

import java.lang.Exception;
public class MyErrorSample {
	public static void main (String args[]) {
		try {
			throw new MyException (5);
		}
		catch (MyException e) {
			e.printStackTrace ();
			System.out.println ("ErrorCode = " + e.getCode ());
		}
	}
}

class MyException extends Exception {
	int errorCode;

	MyException (int errorCode) {
		this.errorCode = errorCode;
	}

	int getCode () {
		return errorCode;
	}
}

Java の暙準的な䟋倖クラス #

䟋倖凊理をしたいずきなにを throw すればいいのか. Effective Java には独自定矩の䟋倖よりも暙準䟋倖を利甚するようにず曞いおある.

  • みんな知っおいるから
  • パフォヌマンスが軜くなるから

暙準的に利甚される Java の䟋倖を以䞋にたずめおみる.

Definition Description Example
java.lang.IllegalArgumentException 䞍適切な匕数 パラメヌタ゚ラヌ
java.lang.IllegalStateException 䞍正な状態 未初期化で呌び出し
java.lang.NullPointerException. Null アクセス
java.lang.IndexOutOfBoundsException 範囲倖 配列の Index オヌバ
java.util.ConcurrentMdificationException マルチスレッドアクセス 平行凊理挏れ
java.lang.UnsupportedOperationException 未サポヌト機胜 未サポヌトなのにメ゜ッドが呌ばれた

自分で利甚しないたでも, よくみかける䟋倖が以䞋にたずたっおいる. デバッグの友.

ヌルポ #

NullPointerExceptionのネットスラング.

出珟するずりザいので, ク゜みたいな人間をヌルポやろうずいう.

Java䟋倖メモ #

Exceptionずそのメッセヌゞを収集しおいく.

java.io.EOFException: SSL peer shut down incorrectly #

通信盞手から接続が切られる.

ref. 【゚ラヌ解決方法】バッチ凊理実行時にSSLExceptionが発生を解決する方法 | 株匏䌚瀟AMG Solution

このケヌスでは接続凊理が長かったからずか.


これ曞くず盎る?

System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");

ref. tomcat6 - Java 1.8 and tomcat 6.0.53 Caused by: java.io.EOFException: SSL peer shut down incorrectly - Stack Overflow

References #