Java核心API之异常处理(中)
1、throw关键字的使用 如果程序发生的错误无法处理或者无法捕获,会抛出错误异常对象。或者,程序员自行抛出异常,例如将异常抛出,让调用者捕获异常和处理。若想要自行抛出异常,我们可以使用“throw”关键字来将异常抛出。示例代码如下: /* * 使用throw关键字自行抛出异常 */ @Test public void testThrow(){ String str = null; try { String subStr = str.substring(0); } catch (Exception e) { throw new RuntimeException("空指针异常"); } }分析:我们使用throw自行抛出我们想要的异常,当然还可以抛出自定义的异常,自定义异常我们下节继续讲解。注意:小编的代码示例中抛出的是非检查异常(RuntimeException),所以方法上可以不用抛出异常。如果是自行抛出的是检查异常,方法上要使用throws关键字抛出异常。下面介绍java处理机制中throws关键字。

3、继承父类后重写方法时对throws的处理 子类继承父类后,父类的某个方法上声明了throws抛出异常,子类在重写该方法时必须注意以下几点: 1、父类throws抛出的异常可以不做任何处理; 2、可以抛出父类throws异常对象的部分异常; 3、可以抛出父类throws异常对象的子类异常; 4、不可以超出父类throws额外对象的异常; 5、不可以抛出父类throws异常对象的父类异常;以上总结看上去很拗口,下面请看示例代码进行一一讲解:public class Father { private String face; private int height; private String habits; public Father() { } public void talk(byte[] conent) throws IOException,NullPointerException { String sayConent = new String(conent); if(sayConent.length()>30){ throw new IOException("说话出现口吃"); }else if(sayConent.length()<=30&&sayConent.length()>0){ System.out.println("说话正常"); }else{ throw new NullPointerException("说不出来话"); } }}class Son extends Father{ //父类throws抛出的异常可以不做任何处理 public void talk(byte[] conent){ String sayConent = new String(conent); System.out.println("说出"+sayConent+"的话"); } //可以抛出父类throws异常对象的部分异常 public void talk(byte[] conent) throws NullPointerException{ String sayConent = new String(conent); if(sayConent.length()<0){ throw new NullPointerException("说不出来话"); } } //可以抛出父类throws异常对象的子类异常 public void talk(byte[] conent) throws UnsupportedEncodingException { String sayConent = new String(conent,"UTF-8"); System.out.println("说出"+sayConent+"的话"); } //不可以超出父类throws额外对象的异常 public void talk(byte[] conent) throws SQLException{ throw new SQLException("彻底说不出来话"); } //不可以抛出父类throws异常对象的父类异常 public void talk(byte[] conent) throws Exception{ throw new Exception("彻底说不出来话"); }}注意:拷贝上述代码了解继承父类后重写方法时对throws的处理过程。



5、常见的RuntimeException有1、NullPointerException异常 当对象的引用为null时,该引用调用该对象的成员或属性时,抛出该异常。2、IllegalArgumentException 当向某个方法传入一个不合法或不正的参数时,抛出该异常。3、NumberFormatException 当程序试图将字符串转换成一种数值类型,但该字符串不能转为适当格式时,抛出异常。4、ArrayIndexOutOfBoundsException 当使用的数组下标超出数组允许范围时,抛出该异常。