* 异常处理的两种方式:
* a: try...catch...finally
* try...catch
* try...catch...finally
* try...finally
* b:throws
* try...catch处理异常的基本格式
* try...catch...finally
*
* try:用来检测异常
* catch:用来捕获异常
* finally:释放资源
*
* 若是try后面跟多个catch,那么小的(子类异常)放到前面,大的放后面
*
* Throwable中的几个常见方法
* a: getMessage()
* 获取异常信息,返回字符串
* b: toString()
* 获取异常类名和异常信息,返回字符串
* c: printStackTrace()
* 获取异常类名和异常信息,以及异常出如今程序中的位置,返回void
*
* throw: 在功能方法内部出现某种状况,程序不能继续运行,须要进行跳转是,就用throw把异常对象抛出
*
* throw和throws的区别:
* a:throws
* 用在方法声明后面,跟的是异常类名
* 能够跟多个异常类名,用都好隔开
* 表示抛出异常,由该方法的调用者来处理
* b:throw
* 用在方法体内,跟的是异常对象名
* 只能抛出一个异常对象名
* 表示抛出异常,由该方法体内的语句处理
*
* finally:
* 被finally控制的语句必定会被执行(在执行到finally以前JVM退出了,finally就不会再执行,如:System.exit(0))
* finally的做用:用于释放资源,在IO流操做和数据库操做汇总会见到
* 当遇到return语句是,会先看下return后面是否有finally语句,若是有会将finally执行以后再结束程序
*
* final、finally和finalize的区别:
* final:能够修饰类,不能被继承
* 能够修饰方法,不能被重写
* 能够修饰变量,变量值不能被修改
* finally:是try语句中的有一个语句体,不能单独使用,用来释放资源
*
* finalize:是一个方法,当垃圾回收期肯定不存在对该对象的更多引用时,有对象的垃圾回收期调用此方法
*
*若是catch中有return语句,那么finally会执行吗?若是执行是在return以前仍是以后?
* 是在return以后才执行finally语句,此时的return执行只是创建一个返回路径,不会真正返回;
* 千万不要在finally里面写return语句,由于finally语句只是用来释放资源的;
*
*异常的注意事项:
* a: 子类重写父类方法是,子类的方法的方法必须抛出相同的异常或父类异常的子类;
* b: 若是父类抛出了多个异常,子类重写父类是,只能抛出相同的异常或是他的子集,子类不能抛出父类没有的异常;
* c: 若是被重写的方法没有异常抛出,那么子类的方法绝对不能够抛出异常,若是子类内部有异常发生,那么子类只能try,不能throws;
*
*如何使用异常:
* 原则:若是该功能内部能够将问题处理,用try,若是处理不了,交由调用者处理,这样用throws;
* 区别:
* 后续程序须要继续运行就用try;
* 后续程序不须要运行就用throws;
*
* 若是JDK没有提供相应的异常,须要自定义异常进行处理;
*
*try...catch的快捷键:选中须要处理的代码 用 alt + shift + z 数据库
1. Throwable中的几个常见方法以下:spa
1 public static void main(String[] args) { 2 try { 3 System.out.println(1/0); 4 } catch (Exception e) { 5 // TODO: handle exception 6 System.out.println(e.getMessage()); 7 System.out.println(e.toString()); //调用toString方法时和直接打印对象e效果同样 8 e.printStackTrace(); //JVM默认就用这种方式处理异常 9 } 10 }
2. 异常练习之键盘输入整数,对整数进行转换为二进制处理code
1 public class Demo2_Test { 2 3 /* 4 * 从键盘录入一个整数,将这个整数转换成二进制显示 5 * 对处理过程进行异常处理:可能录入的是一个过大的整数、小数或者是个字符串 6 * 7 * 分析: 8 * 对录入的字符串进行转换为BigInteger,若是转换出错说明不是整数过大 9 * 对录入的字符串今次那个转换为BigDecimal,若是转换出错说明不是小数 10 * 剩下的状况就是非法字符的状况了 11 */ 12 public static void main(String[] args) { 13 14 Scanner sc = new Scanner(System.in); 15 System.out.println("请输入一个整数:"); 16 while (true) { 17 String line = sc.nextLine(); 18 try { 19 Integer i = Integer.parseInt(line); 20 System.out.println(i.toBinaryString(i)); 21 break; 22 } catch (Exception e) { 23 try { 24 new BigInteger(line); 25 System.out.println("输入的整数过大,请从新输入一个整数:"); 26 } catch (Exception e2) { 27 try { 28 new BigDecimal(line); 29 System.out.println("输入的整数是小数,请从新输入一个整数:"); 30 } catch (Exception e3) { 31 System.out.println("输入的整数是非法字符,请从新输入一个整数:"); 32 } 33 } 34 } 35 } 36 } 37 38 }