class Calculator {
public int divide(int a, int b) {
return a / b; // may throw ArithmeticException
}
public int convert(String s) {
return Integer.parseInt(s); // may throw NumberFormatException
}
}
public class ComplexExceptionDemo {
public static void main(String[] args) {
System.out
.println
("=== Program Start ==="); Calculator calc = new Calculator();
try {
System.out
.println
("Inside try block...");
int num1 = calc.convert("10"); // valid → 10
int result1 = calc.divide(100, num1); // 100/10 = 10
System.out
.println
("Result1: " + result1
);
int num2 = calc.convert("0"); // valid → 0
int result2 = calc.divide(100, num2); // 100/0 → ArithmeticException
System.out
.println
("Result2: " + result2
);
int num3 = calc.convert("abc"); // won’t execute
int result3 = calc.divide(50, num3);
System.out
.println
("Result3: " + result3
);
} catch (ArithmeticException e) {
System.out
.println
("Caught ArithmeticException: " + e
); } catch (NumberFormatException e) {
System.out
.println
("Caught NumberFormatException: " + e
); } finally {
System.out
.println
("Finally block always runs."); }
System.out
.println
("=== Program End ==="); }
}
Y2xhc3MgQ2FsY3VsYXRvciB7CiAgICBwdWJsaWMgaW50IGRpdmlkZShpbnQgYSwgaW50IGIpIHsKICAgICAgICByZXR1cm4gYSAvIGI7IC8vIG1heSB0aHJvdyBBcml0aG1ldGljRXhjZXB0aW9uCiAgICB9CiAgICBwdWJsaWMgaW50IGNvbnZlcnQoU3RyaW5nIHMpIHsKICAgICAgICByZXR1cm4gSW50ZWdlci5wYXJzZUludChzKTsgLy8gbWF5IHRocm93IE51bWJlckZvcm1hdEV4Y2VwdGlvbgogICAgfQp9CgpwdWJsaWMgY2xhc3MgQ29tcGxleEV4Y2VwdGlvbkRlbW8gewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPT09IFByb2dyYW0gU3RhcnQgPT09Iik7CiAgICAgICAgQ2FsY3VsYXRvciBjYWxjID0gbmV3IENhbGN1bGF0b3IoKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluc2lkZSB0cnkgYmxvY2suLi4iKTsKCiAgICAgICAgICAgIGludCBudW0xID0gY2FsYy5jb252ZXJ0KCIxMCIpOyAgICAgLy8gdmFsaWQg4oaSIDEwCiAgICAgICAgICAgIGludCByZXN1bHQxID0gY2FsYy5kaXZpZGUoMTAwLCBudW0xKTsgLy8gMTAwLzEwID0gMTAKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXN1bHQxOiAiICsgcmVzdWx0MSk7CgogICAgICAgICAgICBpbnQgbnVtMiA9IGNhbGMuY29udmVydCgiMCIpOyAgICAgLy8gdmFsaWQg4oaSIDAKICAgICAgICAgICAgaW50IHJlc3VsdDIgPSBjYWxjLmRpdmlkZSgxMDAsIG51bTIpOyAvLyAxMDAvMCDihpIgQXJpdGhtZXRpY0V4Y2VwdGlvbgogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3VsdDI6ICIgKyByZXN1bHQyKTsKCiAgICAgICAgICAgIGludCBudW0zID0gY2FsYy5jb252ZXJ0KCJhYmMiKTsgICAvLyB3b27igJl0IGV4ZWN1dGUKICAgICAgICAgICAgaW50IHJlc3VsdDMgPSBjYWxjLmRpdmlkZSg1MCwgbnVtMyk7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzdWx0MzogIiArIHJlc3VsdDMpOwoKICAgICAgICB9IGNhdGNoIChBcml0aG1ldGljRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgQXJpdGhtZXRpY0V4Y2VwdGlvbjogIiArIGUpOwogICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IE51bWJlckZvcm1hdEV4Y2VwdGlvbjogIiArIGUpOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmluYWxseSBibG9jayBhbHdheXMgcnVucy4iKTsKICAgICAgICB9CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT0gUHJvZ3JhbSBFbmQgPT09Iik7CiAgICB9Cn0=