public class RethrowAndChainExample {
public static void main(String[] args) {
try {
performOperation();
} catch (CustomException e) {
System.out.println("メインメソッド: " + e.getMessage());
System.out.println("åŽŸå› : " + e.getCause().getMessage());
}
}
static void performOperation() throws CustomException {
try {
// 何らã‹ã®æ“作を試ã¿ã‚‹
// 例外ãŒç™ºç”Ÿã—ãŸå ´åˆ
int result = 10 / 0; // 例外を発生ã•ã›ã‚‹ãŸã‚ã®ãƒ€ãƒŸãƒ¼ã‚³ãƒ¼ãƒ‰
} catch (Exception e) {
// カスタム例外ã¨ã—ã¦å†ã‚¹ãƒãƒ¼ã—ã€å…ƒã®ä¾‹å¤–ã‚’ãƒã‚§ãƒ¼ãƒ³ã™ã‚‹ã‚³ãƒ¼ãƒ‰ã‚’追åŠ
CustomException customException = new CustomException("æ“作ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ");
customException.initCause(e); // å…ƒã®ä¾‹å¤–ã‚’è¨å®š
throw customException;
}
}
}
class CustomException extends Exception {
// カスタム例外クラスã®å®£è¨€
public CustomException(String message) {
super(message);
}
}
ã“ã®ä¾‹ã§ã¯ã€performOperation メソッド内ã§ä½•らã‹ã®æ“作を試ã¿ã¦ä¾‹å¤–ãŒç™ºç”Ÿã™ã‚‹ã¨ä»®å®šã—ã¦ã„ã¾ã™ã€‚ãã®ä¾‹å¤–ã‚’ CustomException ã¨ã—ã¦å†ã‚¹ãƒãƒ¼ã—ã€å…ƒã®ä¾‹å¤–ã‚’ initCause メソッドを使用ã—ã¦ãƒã‚§ãƒ¼ãƒ³ã—ã¦ã„ã¾ã™ã€‚ã“ã®ã‚ˆã†ã«ã™ã‚‹ã“ã¨ã§ã€main メソッド㧠CustomException ã¨ãã®åŽŸå› ã®å…ƒã®ä¾‹å¤–ã‚’å–å¾—ã§ãã¾ã™ã€‚
å†ã‚¹ãƒãƒ¼ã¨ãƒã‚§ãƒ¼ãƒ³
「å†ã‚¹ãƒãƒ¼ã¨ãƒã‚§ãƒ¼ãƒ³ã€ã¯ã€ä¾‹å¤–処ç†ã«ãŠã„ã¦ã€æ•æ‰ã—ãŸä¾‹å¤–ã‚’å†åº¦ã‚¹ãƒãƒ¼ã™ã‚‹ã“ã¨ã¨ã€ãã®éš›ã«å…ƒã®ä¾‹å¤–ã‚’æ–°ã—ã„例外ã®åŽŸå› ã¨ã—ã¦è¨å®šã™ã‚‹ã“ã¨ã‚’指ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã‚ˆã‚Šè©³ç´°ãªæƒ…å ±ã‚’ä¿æŒã—ã¤ã¤ã€ä¾‹å¤–を上ä½ã®å‘¼ã³å‡ºã—å…ƒã«ä¼ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
å†ã‚¹ãƒãƒ¼ã¨ãƒã‚§ãƒ¼ãƒ³ã®æ‰‹é †
- ä¾‹å¤–ã®æ•æ‰ï¼š 例外ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ã®ã‚るコードを
try-catchブãƒãƒƒã‚¯ã§å›²ã¿ã€ä¾‹å¤–ãŒç™ºç”Ÿã—ãŸå ´åˆã«ãã‚Œã‚’æ•æ‰ã—ã¾ã™ã€‚ - æ–°ã—ã„例外ã®ä½œæˆï¼š ã‚‚ã—ã€ä¸Šä½ã®å‘¼ã³å‡ºã—å…ƒã«è©³ç´°ãªæƒ…å ±ã‚’æä¾›ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã€æ–°ã—ã„例外クラスを作æˆã—ã¾ã™ã€‚ã“ã®ã‚¯ãƒ©ã‚¹ã¯é€šå¸¸ã€
Exceptionクラスを継承ã—ã¦ã„ã¾ã™ã€‚ - 例外ã®å†ã‚¹ãƒãƒ¼ã¨ãƒã‚§ãƒ¼ãƒ³ï¼š
catchブãƒãƒƒã‚¯å†…ã§ã€æ•æ‰ã—ãŸä¾‹å¤–ã‚’æ–°ã—ã„例外ã¨ã—ã¦å†ã‚¹ãƒãƒ¼ã—ã¾ã™ã€‚ãã—ã¦ã€initCauseメソッドを使用ã—ã¦ã€æ–°ã—ã„例外ã®åŽŸå› ã¨ã—ã¦æ•æ‰ã—ãŸå…ƒã®ä¾‹å¤–ã‚’è¨å®šã—ã¾ã™ã€‚
例
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class FileReadAndChainExample {
public static void main(String[] args) {
try {
readFile("nonexistent.txt");
} catch (CustomFileException e) {
System.out.println("メインメソッド: " + e.getMessage());
System.out.println("åŽŸå› : " + e.getCause().getMessage());
}
}
static void readFile(String fileName) throws CustomFileException {
try {
BufferedReader reader = new BufferedReader(new FileReader(fileName));
// ファイルã‹ã‚‰ãƒ†ã‚ストをèªã¿å–るコード
} catch (IOException e) {
// ファイルãŒè¦‹ã¤ã‹ã‚‰ãªã„å ´åˆã€æ–°ã—ã„例外を作æˆã—ã¦åŽŸå› ã¨ã—ã¦IOExceptionã‚’è¨å®šã—å†ã‚¹ãƒãƒ¼
CustomFileException customException = new CustomFileException("ファイルèªã¿å–りä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ");
customException.initCause(e);
throw customException;
}
}
}
class CustomFileException extends Exception {
// カスタム例外クラスã®å®£è¨€
public CustomFileException(String message) {
super(message);
}
}
ã“ã®ä¾‹ã§ã¯ã€readFile メソッド内ã§ãƒ•ァイルèªã¿å–り時ã«ç™ºç”Ÿã™ã‚‹ IOException ã‚’æ•æ‰ã—ã€æ–°ã—ã„例外 CustomFileException ã¨ã—ã¦å†ã‚¹ãƒãƒ¼ã—ã¦ã„ã¾ã™ã€‚ãã—ã¦ã€initCause メソッドを使用ã—ã¦ã€CustomFileException ã®åŽŸå› ã¨ã—ã¦æ•æ‰ã—㟠IOException ã‚’è¨å®šã—ã¦ã„ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€main メソッド㧠CustomFileException ã¨ãã®åŽŸå› ã® IOException ã‚’å–å¾—ã§ãã¾ã™ã€‚
å†ã‚¹ãƒãƒ¼ã¨ãƒã‚§ãƒ¼ãƒ³ã¯ã€ä¾‹å¤–処ç†ã‚’ã‚ˆã‚Šæƒ…å ±è±Šã‹ã§æŸ”軟ãªã‚‚ã®ã«ã™ã‚‹é‡è¦ãªæ‰‹æ³•ã§ã™ã€‚メソッド内ã§ç™ºç”Ÿã—ãŸä¾‹å¤–ã‚’æ•æ‰ã—ã¦ã€æ–°ã—ã„例外ã«ãƒ©ãƒƒãƒ—ã—ã€ãã®æ–°ã—ã„例外ã«åŽŸå› ã¨ãªã‚‹ä¾‹å¤–ã‚’ãƒã‚§ãƒ¼ãƒ³ã•ã›ã‚‹ã“ã¨ã§ã€å‘¼ã³å‡ºã—å…ƒã§ã‚ˆã‚Šè©³ç´°ãªæƒ…å ±ã‚’å–å¾—ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚
ã“ã®æ‰‹æ³•を使用ã™ã‚‹ã“ã¨ã§ã€ç•°ãªã‚‹éšŽå±¤ã§ç™ºç”Ÿã—ãŸä¾‹å¤–を連çµã—ã€éšŽå±¤ã”ã¨ã«é©åˆ‡ãªä¾‹å¤–クラスを作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã‚¨ãƒ©ãƒ¼ã®ç™ºç”Ÿæºã‚’æ£ç¢ºã«ç‰¹å®šã—ã€ã‚ˆã‚ŠåŠ¹æžœçš„ã«ä¾‹å¤–を処ç†ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚ãŸã ã—ã€æ³¨æ„ãŒå¿…è¦ã§ã€é©åˆ‡ãªæƒ…å ±ã‚’ä¿æŒã—ã¤ã¤å†—é•·ã«ãªã‚‰ãªã„よã†ã«è¨è¨ˆã™ã‚‹ã“ã¨ãŒé‡è¦ã§ã™ã€‚
「019 例外ã¨ä¾‹å¤–処ç†ã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント