(1)任何一种程序设计语言设计的程序在运行时都可能出现错误。
(2)捕获错误最理想的是在编译期间,但有的错误只有在运行时才会发生。
(3)对于这些错误,一般有两种解决方法:
那么什么是编译,什么是运行呢?
编译 :又分为编译和链接两个过程。编译是将源文件转换为机器可识别的二进制文件。链接是将这些二进制文件组合成系统可以执行的可执行文件。
运行 :将编译出来的可执行程序放在系统中进行运行。
Java异常 :在java语言中,将程序执行中发生的不正常情况称为异常。
java中的异常用于处理非预期的情况,如文件没找到、网络错误、非法的参数等。
说明 :
try{ //需要判断是否出现异常的语句 }catch(Exception e){ //捕获异常 }finally{ //无论是否出现异常,都会运行这里的代码 }
注意:如果有多个catch,在捕获到前面的异常后,后面的就不会再捕获了。
package myjava; public class Test3 { public static void main(String[] args) { B b = new B(); try { b.test(); }catch(Exception e){ e.printStackTrace(); } } } class B{ int i; public void test() throws Exception{ B b = null; System.out.println(b.i); } }
输出:
注意:当父类方法抛出异常,子类方法继承父类对该方法进行重写时,也需要抛出异常,同时抛出的异常范围不能比父类的大。
package myjava; public class Test3 { public static void main(String[] args) { B b = new B(); try { b.test(200); }catch(Exception e){ e.printStackTrace(); } } } class B{ int age; public void test(int age) throws Exception{ if (age>=0 && age <= 100) { System.out.println("合法"); }else { throw new Exception("年龄不合法"); } } }
输出:
创建用户自定义异常类:用户自定义的异常类必须继承现有的异常类
package myjava; public class Test3 { public static void main(String[] args) { B b = new B(); try { b.regist(-1); }catch(Exception e){ e.printStackTrace(); } } } class B{ public void regist(int num) throws Exception{ if (num<0) { throw new MyException("人数不能为负值",3); }else { System.out.println("登记人数"+num); } } } class MyException extends Exception{ private int idnumber; public MyException(String message,int id) { super(message); this.idnumber = id; } public int getId() { return idnumber; } }
输出:
然后就可以抛出异常:
package myjava; public class Test3 { public static void main(String[] args) { B b = new B(); try { b.message(); }catch(Exception e){ e.printStackTrace(); } } } class B{ public void regist(int num) throws Exception{ if (num<0) { throw new MyException("人数不能为负值",3); }else { System.out.println("登记人数"+num); } } public void message() throws Exception { try { regist(-1); }catch (MyException e){ System.out.println("登记失败,出错种类"+e.getId()); } System.out.println("本次登记结束"); } } class MyException extends Exception{ private int idnumber; public MyException(String message,int id) { super(message); this.idnumber = id; } public int getId() { return idnumber; } }
输出: