动手动脑__异常处理
public class CatchWho { public static void main(String[] args) { try { try { throw new ArrayIndexOutOfBoundsException(); } catch(ArrayIndexOutOfBoundsException e) { System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch"); } throw new ArithmeticException(); } catch(ArithmeticException e) { System.out.println("发生ArithmeticException"); } catch(ArrayIndexOutOfBoundsException e) { System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch"); } } }
结构
二、写出程序运行的结果:
public class CatchWho2 { public static void main(String[] args) { try { try { throw new ArrayIndexOutOfBoundsException(); } catch(ArithmeticException e) { System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch"); } throw new ArithmeticException(); } catch(ArithmeticException e) { System.out.println("发生ArithmeticException"); } catch(ArrayIndexOutOfBoundsException e) { System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch"); } } }
结果:
三、请先阅读 EmbedFinally.java示例,再运行它,观察其输出并进行总结:
public class EmbededFinally { public static void main(String args[]) { int result; try { System.out.println("in Level 1"); try { System.out.println("in Level 2"); //result=100/0; //Level 2 try { System.out.println("in Level 3"); result=100/0; //Level 3 } catch (Exception e) { System.out.println("Level 3:" + e.getClass().toString()); } finally { System.out.println("In Level 3 finally"); } // result=100/0; //Level 2 } catch (Exception e) { System.out.println("Level 2:" + e.getClass().toString()); } finally { System.out.println("In Level 2 finally"); } // result = 100 / 0; //level 1 } catch (Exception e) { System.out.println("Level 1:" + e.getClass().toString()); } finally { System.out.println("In Level 1 finally"); } } }
1.当有多个嵌套的try…catch…finally时,要特别注意finally的执行时机。
2.当有多层嵌套的finally时,异常在不同的层次抛出 ,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。
四、辨析:finally语句块一定会执行吗?、
public class SystemExitAndFinally { public static void main(String[] args) { try{ System.out.println("in main"); throw new Exception("Exception is thrown in main"); //System.exit(0); } catch(Exception e) { System.out.println(e.getMessage()); System.exit(0); } finally { System.out.println("in finally"); } } }
截图:
没有 System.exit(0);的时候会输出in finally要是有System.exit(0);则会退出系统不执行finally语句。
五、
import javax.swing.JOptionPane; public class Test{ public static void main(String[] args) { // TODO 自动生成的方法存根 double n=0.0; for(int i=0;i<1000000000;i++) { String input=JOptionPane.showInputDialog("请输入学生成绩"); try{ n=Double.valueOf(input); if(n<0) { JOptionPane.showMessageDialog(null, "输入不正确"); } else if(n<60) { JOptionPane.showMessageDialog(null,"该学生成绩为不及格"); } else if(n<70) { JOptionPane.showMessageDialog(null,"该学生成绩为及格"); } else if(n<80) { JOptionPane.showMessageDialog(null,"该学生成绩为中等"); } else if(n<90) { JOptionPane.showMessageDialog(null,"该学生成绩为良好"); } else if(n<=100) { JOptionPane.showMessageDialog(null,"该学生成绩为优秀"); } else if(n>100) { JOptionPane.showMessageDialog(null, "输入不正确"); } } catch(NumberFormatException e)//NumberFormatException异常 { JOptionPane.showMessageDialog(null, "输入不正确"); } } } }
结果: