在Java中,将程序执行中发生的不正常情况称为异常。Java程序在执行过程中所发生的异常事件分为两类:
对于这些错误,一般有两种解决方案:一是遇到错误时九终止程序的运行,另一种方法是有程序员在编写程序时,就考虑到错误的检测、错误的信息的提示,以及错误的处理。捕获错误最理想的是在编译期间,但有的错误只有在运行时才会发生。
java.lang.Throwable |---- java.lang.Error:一般不编写针对性的代码进行处理 |---- java.lang.Exception:可以进行异常的处理 |---- 编译时异常(checked) |---- 运行时异常(unchecked)
Java提供的时异常处理的抓抛模型。
抛
:程序在正常执行过程中,一旦出现异常,就会在异常代码处生成一个对应的异常类,并将此对象抛出。一旦抛出异常对象以后,其后的代码不在执行。抓
:① try-catch-finally ② throwstry{ //可能出现异常的代码 } catch(异常类型1 变量名1) { //处理异常的方式1 } catch(异常类型2 变量名2) { //处理异常的方式1 } catch(异常类型3 变量名3) { //处理异常的方式3 } …… finally { //一定会执行的代码 }
import org.junit.Test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class ExceptionTest { @Test public void text(){ File file = null; FileInputStream fis = null; try { file = new File("hello.txt"); fis = new FileInputStream(file); int data = fis.read(); while(data != -1){ System.out.print((char)data); data = fis.read(); } } catch (FileNotFoundException e){ System.out.println(e.getMessage()); }catch (IOException e) { e.printStackTrace(); } finally { if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } System.out.println("end"); } }
import java.io.IOException; public class OverrideTest { public static void main(String[] args) { OverrideTest test = new OverrideTest(); test.display(new SubClass()); } public void display(SuperClass s){ try { s.method(); } catch (IOException e) { e.printStackTrace(); } } }
import java.io.IOException; public class SuperClass { public void method() throws IOException{ } }
import java.io.FileNotFoundException; public class SubClass extends SuperClass{ public void method() throws FileNotFoundException { } }
public class StudentTest { public static void main(String[] args) { Student student = new Student(); try { student.regist(-1001); System.out.println(student); } catch (Exception e) { System.out.println(e.getMessage()); } } }
public class Student { private int id; public void regist(int id) throws Exception { if (id > 0){ this.id = id; } else { throw new Exception("你输入的数据非法"); } } public String toString() { return "Student{" + "id=" + id + '}'; } }
public class MyException extends RuntimeException { static final long serialVersionUID = -703489719324376939L; public MyException() { } public MyException(String message) { super(message); } }