异常--运行期出现的错误。
观察错误的名字和行号最重要。
【异常的概念】
Java异常是Java提供的用于处理程序中错误的一种机制。
所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0移除,数组下标越界,所要读取的文件不存在)。
涉及良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的
结果。
Java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并将被提交
给Java运行时系统,这个过程称为抛出(throw)异常。
当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前一场对象交给其处理,这一过程称为捕
获(catch)异常。
【异常的概念】
public void someMethod() throws SomeException {//声明该方法可能抛出的异常
if(someCondition()) {
throw new SomeException("错误原因");//构造并抛出异常对象
}
... ... ...
}
... ... ...
try { //调用该方法时视图捕获异常
someMethod();
} catch (SomeException e) {
//异常处理代码; -->定义处理异常的代码
}
... ... ...
【异常的分类】
J2SDK中定义了很多异常类,这些类对应了各种各样可能出现的异常事件。
Throwable,Error,Exception.RuntimeException
【异常的捕获和处理】
try {
//可能抛出异常的语句
} catch (.SomeException1 e) {
... ... ...
}
catch (someException2 e) {
... ... ...
}
finally {
... ... ...
}
finally段的代码无论是否发生异常都有执行。
在catch中声明的一场对象(catch(SomeException e))封装了异常事件发生的信息,在catch语句块中可以使用这个对
象的一些方法获取这些信息。
例如:
getMessage()方法,用来得到有关异常事件的信息。
printStackTrace()方法,用来跟踪异常事件发生实质性堆栈的内容。
finally语句:
finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其他部分以前,能够对程序的状态做统一
的管理。
无论try所指定的程序块中是否抛出例外,finally所指定的代码都要被执行。
通常finally语句中可以进行资源的清除工作,如:
关闭打开的文件
删除临时文件
Java的里外处理机制使得里外时间,沿着被调用的顺序往前寻找,只要找到符合该例外种类的例外处理程序。
readFile() throws IOException{...}
method() throws IOException{//当method方法调用readFile方法时,也要抛出想相应异常
readFile();
}
public static void main(Sting[] args) {
try {
method();
} catch(IOException e) {...}
}
在一个try语句块中,基类异常的捕获语句不可以写在子类异常捕获语句的上面。
【使用自定义的异常】
使用自定义的异常一般有如下步骤:
1.通过继承java.lang.Exception类声明自己的异常类。
2.在方法适当的位置生成自定义异常的实例,并用throw语句抛出。
3.在方法的声明部分有throws语句声明该方法可能跑出的异常。
【声明并抛出异常】
注意:重写方法需要抛出与原方法所抛出异常类型一致异常或不抛出异常。
【总结】
一个图
五个关键字 try,catch,finally,throw,throws
先逮小的,再逮大的
异常和重写的关系
观察错误的名字和行号最重要。
【异常的概念】
Java异常是Java提供的用于处理程序中错误的一种机制。
所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0移除,数组下标越界,所要读取的文件不存在)。
涉及良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的
结果。
Java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并将被提交
给Java运行时系统,这个过程称为抛出(throw)异常。
当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前一场对象交给其处理,这一过程称为捕
获(catch)异常。
【异常的概念】
public void someMethod() throws SomeException {//声明该方法可能抛出的异常
if(someCondition()) {
throw new SomeException("错误原因");//构造并抛出异常对象
}
... ... ...
}
... ... ...
try { //调用该方法时视图捕获异常
someMethod();
} catch (SomeException e) {
//异常处理代码; -->定义处理异常的代码
}
... ... ...
【异常的分类】
J2SDK中定义了很多异常类,这些类对应了各种各样可能出现的异常事件。
Throwable,Error,Exception.RuntimeException
【异常的捕获和处理】
try {
//可能抛出异常的语句
} catch (.SomeException1 e) {
... ... ...
}
catch (someException2 e) {
... ... ...
}
finally {
... ... ...
}
finally段的代码无论是否发生异常都有执行。
在catch中声明的一场对象(catch(SomeException e))封装了异常事件发生的信息,在catch语句块中可以使用这个对
象的一些方法获取这些信息。
例如:
getMessage()方法,用来得到有关异常事件的信息。
printStackTrace()方法,用来跟踪异常事件发生实质性堆栈的内容。
finally语句:
finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其他部分以前,能够对程序的状态做统一
的管理。
无论try所指定的程序块中是否抛出例外,finally所指定的代码都要被执行。
通常finally语句中可以进行资源的清除工作,如:
关闭打开的文件
删除临时文件
Java的里外处理机制使得里外时间,沿着被调用的顺序往前寻找,只要找到符合该例外种类的例外处理程序。
readFile() throws IOException{...}
method() throws IOException{//当method方法调用readFile方法时,也要抛出想相应异常
readFile();
}
public static void main(Sting[] args) {
try {
method();
} catch(IOException e) {...}
}
在一个try语句块中,基类异常的捕获语句不可以写在子类异常捕获语句的上面。
【使用自定义的异常】
使用自定义的异常一般有如下步骤:
1.通过继承java.lang.Exception类声明自己的异常类。
2.在方法适当的位置生成自定义异常的实例,并用throw语句抛出。
3.在方法的声明部分有throws语句声明该方法可能跑出的异常。
【声明并抛出异常】
注意:重写方法需要抛出与原方法所抛出异常类型一致异常或不抛出异常。
【总结】
一个图
五个关键字 try,catch,finally,throw,throws
先逮小的,再逮大的
异常和重写的关系
class MyException extends Exception {
private int id;
public MyException(String message,int id) {
super(message);
this.id = id;
}
public int getId() {
return id;
}
}
public class Test {
public void regist(int num) throws MyException {
if(num < 0) {
throw new MyException("人数为负值,不合理", 3);
}
System.out.println("登记人数 " + num);
}
public void manager() {
try {regist(100);}
catch (MyException e) {
System.out.println("登记失败,出错类型码=" + e.getId());
e.printStackTrace();
}
System.out.println("操作结束");
}
public static void main(String[] args) {
Test t = new Test();
t.manager();
}
}