import java.util.Scanner;
// カスタム例外クラス
class MyCustomException extends Exception {
public MyCustomException(String message) {
super(message);
}
}
public class CustomExceptionExample {
public static void main(String[] args) {
try {
// ユーザーã«å‰²ã‚‰ã‚Œã‚‹æ•°ã‚’入力ã•ã›ã‚‹
System.out.print("割られる数を入力ã—ã¦ãã ã•ã„: ");
int dividend = getInput();
// ユーザーã«å‰²ã‚‹æ•°ã‚’入力ã•ã›ã‚‹
System.out.print("割る数を入力ã—ã¦ãã ã•ã„: ");
int divisor = getInput();
// 除算を実行
divide(dividend, divisor);
} catch (NumberFormatException e) {
// æ•°å—以外ãŒå…¥åŠ›ã•れãŸå ´åˆã®ã‚¨ãƒ©ãƒ¼ãƒãƒ³ãƒ‰ãƒªãƒ³ã‚°
System.out.println("エラー: æ•°å—以外ãŒå…¥åŠ›ã•れã¾ã—ãŸã€‚");
} catch (MyCustomException e) {
// カスタム例外ãŒç™ºç”Ÿã—ãŸå ´åˆã®ã‚¨ãƒ©ãƒ¼ãƒãƒ³ãƒ‰ãƒªãƒ³ã‚°
System.out.println("エラー: " + e.getMessage());
}
}
// 割り算を行ã†ãƒ¡ã‚½ãƒƒãƒ‰
static void divide(int num1, int num2) throws MyCustomException {
// ゼãƒã§å‰²ã‚ã†ã¨ã—ãŸå ´åˆã¯ã‚«ã‚¹ã‚¿ãƒ 例外をスãƒãƒ¼
if (num2 == 0) {
throw new MyCustomException("ゼãƒã§å‰²ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。");
}
// é™¤ç®—çµæžœã‚’表示
int result = num1 / num2;
System.out.println("çµæžœ: " + result);
}
// ユーザーã‹ã‚‰ã®æ•°å€¤å…¥åŠ›ã‚’å—ã‘付ã‘るメソッド
static int getInput() throws NumberFormatException {
Scanner scanner = new Scanner(System.in);
// 入力ã•ã‚ŒãŸæ–‡å—列を整数ã«å¤‰æ›ã—ã¦è¿”ã™
return Integer.parseInt(scanner.nextLine());
}
}
ã“ã®ä¾‹ã§ã¯ã€å‰²ã‚‹æ•°ã¨å‰²ã‚‰ã‚Œã‚‹æ•°ã‚’ユーザーã«å…¥åŠ›ã•ã›ã€ãれらã®å€¤ã‚’用ã„ã¦é™¤ç®—を行ã„ã¾ã™ã€‚ã¾ãŸã€getInput メソッドã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®å…¥åŠ›ã‚’å–å¾—ã™ã‚‹éš›ã«ã€NumberFormatException ãŒç™ºç”Ÿã—ãŸå ´åˆã«ã¯ã€Œã‚¨ãƒ©ãƒ¼: æ•°å—以外ãŒå…¥åŠ›ã•れã¾ã—ãŸã€‚ã€ã¨è¡¨ç¤ºã—ã¾ã™ã€‚ãã—ã¦ã€divide メソッド内ã§ã‚¼ãƒã§å‰²ã‚‹å ´åˆã«ã¯ MyCustomException をスãƒãƒ¼ã—ã€ã€Œã‚¨ãƒ©ãƒ¼: ゼãƒã§å‰²ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ã€ã¨è¡¨ç¤ºã—ã¾ã™ã€‚
例外クラス
「例外クラスã€ã¯ã€Javaã«ãŠã„ã¦ãƒ—ãƒã‚°ãƒ©ãƒ ã®ç•°å¸¸çŠ¶æ…‹ã‚„ã‚¨ãƒ©ãƒ¼ã‚’è¡¨ç¾ã™ã‚‹ãŸã‚ã®ä»•組ã¿ã§ã™ã€‚プãƒã‚°ãƒ©ãƒ ãŒå®Ÿè¡Œã•れるä¸ã§ç™ºç”Ÿã™ã‚‹ç•°å¸¸çŠ¶æ…‹ã¯ã€ä¾‹å¤–ã¨ã—ã¦æ‰±ã‚れã€ãれã«å¯¾å‡¦ã™ã‚‹ãŸã‚ã®ä»•組ã¿ãŒæ•´å‚™ã•れã¦ã„ã¾ã™ã€‚
以下ã«ã€Œä¾‹å¤–クラスã€ã«é–¢ã™ã‚‹é‡è¦ãªãƒã‚¤ãƒ³ãƒˆã‚’解説ã—ã¾ã™ã€‚
1. 例外ã®åˆ†é¡ž
Javaã§ã¯ã€ä¸»ã«ä»¥ä¸‹ã®2ã¤ã®ä¾‹å¤–ã®ç¨®é¡žãŒã‚りã¾ã™ã€‚
- ãƒã‚§ãƒƒã‚¯ä¾‹å¤– (Checked Exception): ã‚³ãƒ³ãƒ‘ã‚¤ãƒ«æ™‚ã«æ¤œå‡ºã§ãる例外。通常ã¯ãƒ—ãƒã‚°ãƒ©ãƒžãŒå›žå¾©å¯èƒ½ãªã‚¨ãƒ©ãƒ¼ã‚’示ã—ã¾ã™ã€‚例ã¨ã—ã¦ã¯
IOExceptionãŒã‚りã¾ã™ã€‚ - éžãƒã‚§ãƒƒã‚¯ä¾‹å¤– (Unchecked Exception): 実行時ã«ã®ã¿æ¤œå‡ºã§ãる例外。通常ã¯ãƒ—ãƒã‚°ãƒ©ãƒžã®ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ãƒŸã‚¹ã‚„実行時ã®å•題を示ã—ã¾ã™ã€‚例ã¨ã—ã¦ã¯
NullPointerExceptionã‚„ArrayIndexOutOfBoundsExceptionãŒã‚りã¾ã™ã€‚
2. 例外クラスã®éšŽå±¤æ§‹é€
Javaã®ä¾‹å¤–クラスã¯ã€Throwable クラスを直接ã¾ãŸã¯é–“接的ã«ç¶™æ‰¿ã—ã¦ã„ã¾ã™ã€‚Throwable クラス㯠Error 㨠Exception ã¨ã„ã†2ã¤ã®ä¸»è¦ãªã‚µãƒ–クラスをæŒã¡ã¾ã™ã€‚Error ã¯é€šå¸¸ã€ãƒ—ãƒã‚°ãƒ©ãƒ ãŒå›žå¾©ã§ããªã„致命的ãªã‚¨ãƒ©ãƒ¼ã‚’表ã—ã€Exception ã¯é€šå¸¸ã€ãƒ—ãƒã‚°ãƒ©ãƒžãŒå›žå¾©å¯èƒ½ãªã‚¨ãƒ©ãƒ¼ã‚’表ã—ã¾ã™ã€‚
3. 例外ã®ç™ºç”Ÿã¨æ•æ‰
プãƒã‚°ãƒ©ãƒ ã®å®Ÿè¡Œä¸ã«ä¾‹å¤–ãŒç™ºç”Ÿã™ã‚‹ã¨ã€ãã®æ™‚点ã§ãƒ—ãƒã‚°ãƒ©ãƒ ã®æ£å¸¸ãªãƒ•ãƒãƒ¼ãŒä¸æ–ã•れã€ä¾‹å¤–ãŒç™ºç”Ÿã—ãŸç®‡æ‰€ã‹ã‚‰ä¾‹å¤–処ç†ã®ãŸã‚ã®ã‚³ãƒ¼ãƒ‰ãŒæŽ¢ç´¢ã•れã¾ã™ã€‚例外処ç†ã®ä¸»è¦ãªè¦ç´ ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚
tryブãƒãƒƒã‚¯: 例外ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ã®ã‚るコードを記述ã—ã¾ã™ã€‚catchブãƒãƒƒã‚¯: 発生ã—ãŸä¾‹å¤–ã«å¯¾ã™ã‚‹å‡¦ç†ã‚’記述ã—ã¾ã™ã€‚tryブãƒãƒƒã‚¯å†…ã§ç™ºç”Ÿã—ãŸä¾‹å¤–ãŒã€catchブãƒãƒƒã‚¯ã«ä¸€è‡´ã™ã‚‹å ´åˆã€ãã®catchブãƒãƒƒã‚¯ãŒå®Ÿè¡Œã•れã¾ã™ã€‚finallyブãƒãƒƒã‚¯: ä¾‹å¤–ã®æœ‰ç„¡ã«é–¢ã‚らãšã€å¿…ãšå®Ÿè¡Œã•れるコードを記述ã—ã¾ã™ã€‚主ã«ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ—やリソース解放ã®ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚
try {
// 例外ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ã®ã‚るコード
} catch (SomeException e) {
// SomeExceptionã«å¯¾ã™ã‚‹å‡¦ç†
} finally {
// ä¾‹å¤–ã®æœ‰ç„¡ã«ã‹ã‹ã‚らãšå¿…ãšå®Ÿè¡Œã•れるコード
}
4. カスタム例外クラスã®ä½œæˆ
プãƒã‚°ãƒ©ãƒžãŒç‰¹å®šã®çжæ³ã‚„è¦ä»¶ã«åˆã‚ã›ã¦ç‹¬è‡ªã®ä¾‹å¤–クラスを作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れをカスタム例外クラスã¨å‘¼ã³ã€é€šå¸¸ã¯ Exception クラスを拡張ã—ã¦å®Ÿè£…ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ç‰¹å®šã®ã‚¨ãƒ©ãƒ¼æ¡ä»¶ã«å¯¾ã™ã‚‹æ˜Žç¤ºçš„ãªå‡¦ç†ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚
class MyCustomException extends Exception {
// コンストラクタや独自ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装
}
例外ã®ç†è§£ã¨é©åˆ‡ãªä¾‹å¤–処ç†ã®å®Ÿè£…ã¯ã€ãƒ—ãƒã‚°ãƒ©ãƒ ã®å®‰å®šæ€§ã¨ä¿¡é ¼æ€§ã‚’å‘上ã•ã›ã‚‹ãŸã‚ã«é‡è¦ã§ã™ã€‚
「例外クラスã€ã¯ã€ãƒ—ãƒã‚°ãƒ©ãƒ ãŒäºˆæœŸã›ã¬çжæ³ã«å¯¾å‡¦ã™ã‚‹ãŸã‚ã®é‡è¦ãªãƒ„ールã§ã™ã€‚エラーãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ã®ã‚るコードを try ブãƒãƒƒã‚¯å†…ã«é…ç½®ã—ã€ãれã«å¯¾å‡¦ã™ã‚‹ãŸã‚ã®ã‚³ãƒ¼ãƒ‰ã‚’ catch ブãƒãƒƒã‚¯ã§å®šç¾©ã™ã‚‹ã“ã¨ã§ã€ãƒ—ãƒã‚°ãƒ©ãƒ ã®å¥å…¨æ€§ã‚’ç¶æŒã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€finally ブãƒãƒƒã‚¯ã‚’使用ã™ã‚‹ã“ã¨ã§ã€ãƒªã‚½ãƒ¼ã‚¹ã®ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ—ãªã©ã€ä¾‹å¤–ãŒç™ºç”Ÿã—ã¦ã‚‚å¿…ãšå®Ÿè¡Œã•れる処ç†ã‚’è¿½åŠ ã§ãã¾ã™ã€‚
プãƒã‚°ãƒ©ãƒ ã®å“質å‘上やä¿å®ˆæ€§ã‚’考ãˆã‚‹ã¨ã€ä¾‹å¤–処ç†ã¯æ¬ ã‹ã›ãªã„è¦ç´ ã¨ãªã‚Šã¾ã™ã€‚é©åˆ‡ãªã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚„ãƒã‚°ã®å‡ºåŠ›ã€ã‚«ã‚¹ã‚¿ãƒ ä¾‹å¤–ã®æ´»ç”¨ãªã©ã€åŠ¹æžœçš„ãªä¾‹å¤–処ç†ã‚’実ç¾ã™ã‚‹ãŸã‚ã«ã¯ã€ã—ã°ã—ã°çжæ³ã‚„プãƒã‚¸ã‚§ã‚¯ãƒˆã®è¦ä»¶ã«åˆã‚ã›ãŸæŸ”軟ãªã‚¢ãƒ—ãƒãƒ¼ãƒãŒæ±‚ã‚られã¾ã™ã€‚
例外処ç†ã®é©ç”¨ã«ãŠã„ã¦ã¯ã€é–‹ç™ºè€…ãŒãƒ—ãƒã‚°ãƒ©ãƒ ã®å®Ÿè¡Œä¸ã«ç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ã®ã‚ã‚‹ã•ã¾ã–ã¾ãªçжæ³ã‚’予測ã—ã€ãれã«å¯¾ã™ã‚‹é©åˆ‡ãªå¯¾å‡¦ã‚’行ã†ã“ã¨ãŒéµã¨ãªã‚Šã¾ã™ã€‚プãƒã‚°ãƒ©ãƒ ã®å®‰å®šæ€§ã¨ä¿¡é ¼æ€§ã‚’高ã‚ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚„ä»–ã®é–‹ç™ºè€…ã¨ã®å††æ»‘ãªã‚³ãƒŸãƒ¥ãƒ‹ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’支ãˆã‚‹ãŸã‚ã«ã€ä¾‹å¤–クラスã®ç†è§£ã¨é©åˆ‡ãªæ´»ç”¨ãŒæ±‚ã‚られã¾ã™ã€‚
「019 例外ã¨ä¾‹å¤–処ç†ã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント