public class CustomExceptionPropagationExample {
public static void main(String[] args) {
try {
processInput();
} catch (CustomInputException e) {
System.out.println("メインメソッド: " + e.getMessage());
}
}
static void processInput() throws CustomInputException {
try {
// ユーザーã‹ã‚‰ã®å…¥åŠ›ã‚’å‡¦ç†ã™ã‚‹ã‚³ãƒ¼ãƒ‰ï¼ˆä¾‹å¤–ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚る箇所)
// ã“ã“ã§ã¯ä¾‹ã¨ã—㦠ArithmeticException を発生ã•ã›ã¾ã™ãŒã€å®Ÿéš›ã®ã‚³ãƒ¼ãƒ‰ã¯å…¥åЛ処ç†ã«é–¢é€£ã™ã‚‹ã‚‚ã®ã«ç½®ãæ›ãˆã¦ãã ã•ã„。
int result = 5 / 0; // 例外ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ã®ã‚る箇所
} catch (ArithmeticException originalException) {
// ArithmeticExceptionã‚’æ•æ‰ã—ã€CustomInputExceptionã«å¤‰æ›ã—ã¦å†ã‚¹ãƒãƒ¼ã™ã‚‹
throw new CustomInputException("入力処ç†ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ", originalException);
}
}
}
class CustomInputException extends Exception {
// 独自例外クラスã®å®£è¨€
// コンストラクタã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¨åŽŸå› ã¨ãªã‚‹ä¾‹å¤–ã‚’å—ã‘å–りã€è¦ªã‚¯ãƒ©ã‚¹ã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã«æ¸¡ã™
public CustomInputException(String message, Throwable cause) {
super(message, cause);
}
}
ã“ã®ä¾‹ã§ã¯ã€processInput メソッド内㧠ArithmeticException ãŒç™ºç”Ÿã—ãŸå ´åˆã«ã€ãれを CustomInputException ã«å¤‰æ›ã—ã¦å†ã‚¹ãƒãƒ¼ã—ã¦ã„ã¾ã™ã€‚ CustomInputException ã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã¯ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¨åŽŸå› ã¨ãªã‚‹ä¾‹å¤–ã‚’å—ã‘å–りã€è¦ªã‚¯ãƒ©ã‚¹ã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã«æ¸¡ã—ã¦ã„ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€å‘¼ã³å‡ºã—元㧠CustomInputException ã‚’ã‚ャッãƒã—ãŸå ´åˆã«ã€è©³ç´°ãªã‚¨ãƒ©ãƒ¼æƒ…å ±ï¼ˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¨åŽŸå› ï¼‰ã‚’å–å¾—ã§ãã¾ã™ã€‚
例外ã®ä¼æ’ã¨ç‹¬è‡ªä¾‹å¤–クラス
「例外ã®ä¼æ’ã€ã¨ã¯ã€ãƒ¡ã‚½ãƒƒãƒ‰å†…ã§ç™ºç”Ÿã—ãŸä¾‹å¤–ãŒã€ãã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’呼ã³å‡ºã—ãŸå´ã«ä¼ã‚るプãƒã‚»ã‚¹ã‚’指ã—ã¾ã™ã€‚メソッド内ã§ä¾‹å¤–ãŒç™ºç”Ÿã™ã‚‹ã¨ã€ãã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒå‘¼ã³å‡ºã•れãŸéšŽå±¤ã§ä¾‹å¤–ãŒæ•æ‰ã•れãªã„å ´åˆã€ä¾‹å¤–ã¯ä¸Šä½ã®å‘¼ã³å‡ºã—階層ã«ä¼æ’ã—ã¾ã™ã€‚ã“ã®ä¼æ’ã®ãƒ—ãƒã‚»ã‚¹ã«ãŠã„ã¦ã€ãƒ¡ã‚½ãƒƒãƒ‰å†…ã§ç™ºç”Ÿã—ãŸä¾‹å¤–を独自ã®ä¾‹å¤–クラスã«å¤‰æ›ã—ã¦å†ã‚¹ãƒãƒ¼ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
以下ã¯ã€ä¾‹å¤–ã®ä¼æ’ã¨ç‹¬è‡ªä¾‹å¤–クラスを使用ã—ãŸè§£èª¬ã§ã™ã€‚
例外ã®ä¼æ’ã¨ã¯ï¼Ÿ
例外ãŒç™ºç”Ÿã™ã‚‹ã¨ã€ãã®ä¾‹å¤–ã¯ç¾åœ¨ã®ãƒ¡ã‚½ãƒƒãƒ‰å†…ã§ã‚ャッãƒã•れるã‹ã€ãれãŒã§ããªã„å ´åˆã¯å‘¼ã³å‡ºã—å…ƒã®ãƒ¡ã‚½ãƒƒãƒ‰ã«ä¼æ’ã—ã¾ã™ã€‚伿’ã®ãƒ—ãƒã‚»ã‚¹ã§ã¯ã€å‘¼ã³å‡ºã—階層をé¡ã‚ŠãªãŒã‚‰ä¾‹å¤–ãŒä¼ã‚りã¾ã™ã€‚ã“ã®ã¨ãã€ãƒ¡ã‚½ãƒƒãƒ‰å†…ã§ç™ºç”Ÿã—ãŸä¾‹å¤–ã‚’æ•æ‰ã—ã¦æ–°ã—ã„独自ã®ä¾‹å¤–クラスã«å¤‰æ›ã—ã¦å†ã‚¹ãƒãƒ¼ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
独自例外クラスã®ä½¿ç”¨
独自ã®ä¾‹å¤–クラスを作æˆã™ã‚‹ã“ã¨ã§ã€ç‰¹å®šã®çжæ³ã‚„エラーã«å¯¾å¿œã™ã‚‹ãŸã‚ã®è©³ç´°ãªæƒ…å ±ã‚’æä¾›ã§ãã¾ã™ã€‚ã¾ãŸã€ç‹¬è‡ªã®ä¾‹å¤–クラスã«ã¯æ¨™æº–ã® Exception クラスを拡張ã™ã‚‹ã“ã¨ãŒä¸€èˆ¬çš„ã§ã™ã€‚
具体例
以下ã®ä¾‹ã§ã¯ã€processData メソッド内ã§ç™ºç”Ÿã—ãŸä¾‹å¤–ã‚’ DataProcessingException ã¨ã—ã¦æ•æ‰ã—ã€ãれをå†åº¦ CustomException ã«å¤‰æ›ã—ã¦å†ã‚¹ãƒãƒ¼ã—ã¾ã™ã€‚
public class ExceptionPropagationExample {
public static void main(String[] args) {
try {
processData();
} catch (CustomException e) {
System.out.println("メインメソッド: " + e.getMessage());
System.out.println("åŽŸå› : " + e.getCause().getMessage());
}
}
static void processData() throws CustomException {
try {
// データ処ç†ã‚’試ã¿ã‚‹ï¼ˆä¾‹å¤–ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ã®ã‚る箇所)
int result = divideByZero();
} catch (ArithmeticException originalException) {
// ArithmeticExceptionã‚’æ•æ‰ã—ã€DataProcessingExceptionã«å¤‰æ›ã—ã¦å†ã‚¹ãƒãƒ¼ã™ã‚‹
throw new DataProcessingException("データ処ç†ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ", originalException);
}
}
static int divideByZero() {
// 0ã§å‰²ã‚Šç®—を試ã¿ã‚‹
return 5 / 0;
}
}
class CustomException extends Exception {
// 独自例外クラスã®å®£è¨€
// コンストラクタã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¨åŽŸå› ã¨ãªã‚‹ä¾‹å¤–ã‚’å—ã‘å–りã€è¦ªã‚¯ãƒ©ã‚¹ã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã«æ¸¡ã™
public CustomException(String message, Throwable cause) {
super(message, cause);
}
}
class DataProcessingException extends CustomException {
// データ処ç†ç”¨ã®ç‹¬è‡ªä¾‹å¤–クラスã®å®£è¨€
// コンストラクタã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¨åŽŸå› ã¨ãªã‚‹ä¾‹å¤–ã‚’å—ã‘å–りã€è¦ªã‚¯ãƒ©ã‚¹ã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã«æ¸¡ã™
public DataProcessingException(String message, Throwable cause) {
super(message, cause);
}
}
ã“ã®ä¾‹ã§ã¯ã€DataProcessingException ㌠CustomException を継承ã—ã¦ãŠã‚Šã€processData メソッドã§ç™ºç”Ÿã—㟠ArithmeticException ã‚’ DataProcessingException ã«å¤‰æ›ã—ã¦å†ã‚¹ãƒãƒ¼ã—ã¦ã„ã¾ã™ã€‚ãã—ã¦ã€main メソッドã§ã“ã®ä¾‹å¤–ã‚’æ•æ‰ã—ã€è©³ç´°ãªã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¨å…ƒã®ä¾‹å¤–ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦ã„ã¾ã™ã€‚
「019 例外ã¨ä¾‹å¤–処ç†ã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント