总结:一图,5关键字,先逮小后逮大,异常和重写的关系,throw和throws的区别,自定义异常,常用的异常。
注意观察错误的名字和行号。
一图:
5关键字:try catch finally throw throws printStackTrace getMessage。
先逮小后逮大:不可以调换顺序,就像已经用大网捞鱼后,再用小网捞不着。
异常和重写的关系:重写方法需要抛出与原方法所抛出异常类型一致异常或不抛出异常。
throw和throws的区别:throws抛异常最简单的写法:throws Exception。最终处理需写try catch。
参考:http://www.cnblogs.com/xiohao/p/3547443.html
自定义异常:1、继承Exception:必须逮异常。继承RunTimeException:不是必须逮。2、对 if 语句的影响:一旦抛出异常,后面的语句不会执行,方法结束。
步骤:1、通过继承java.lang.Exception类声明自己的异常类。
2、在方法适当的位置生成自定义异常的实例,并用throw 语句抛出。
3、在方法的声明部分用throws语句声明该方法可能抛出的异常。
常用的异常:FileNotFoundException / IOException / Arithmetic /
注意:处理不了,向外抛。
catch里面一定要做处理,否则异常就被吞了。
?可以将涉及方法全部打印。
经验:
1、处理运行时异常,,采用逻辑去合理规避同时辅助try-catch处理。
2、在多重catch后面,可以加一个catch(Exception)来处理可能会被遗漏的异常。
3、对不确定的代买,可以加上try-catch。
4、尽量处理异常,切记只调用printStackTrace()去打印输出。
5、具体如何处理异常,要根据不同业务需求和异常类型去决定。
6、尽量添加finally语句块去释放占用的资源。
代码示例:
import java.io.*;
public class Test3 {
//年龄不能为负
public void regist(int age) throws MyException {
if(age < 0) {
throw new MyException("年龄为负不合理. ",1);
}
System.out.println("年龄是:" + age);
}
//管理存入的年龄是否正确
public void manage() {
try {
regist(-100);
}
catch (MyException m) {
System.out.println("错误信息" + m.getId());
m.printStackTrace();
}
System.out.println("over.");
}
public static void main(String[] args)
{
//IOException. FileNotFoundException .Exception.
//try {}catch(){}catch(){}finally
//printStrackTrace.getMessage
FileInputStream in = null;
try {
in = new FileInputStream("myfile.txt");
int b ;
b = in.read();
while(b != -1) {
System.out.print((char)b);
b = in.read();
}
}catch (FileNotFoundException f) {
System.out.println(f.getMessage());
}catch (IOException e) {
System.out.println(e.getMessage());
}finally {
try {
in.close();
}
catch (IOException e){//注意:这里不可以使用FileNotFoundException。
//否则显示:未报告的异常错误IOException; 必须对其进行捕获或声明以便抛出
e.printStackTrace();
}
}
System.out.println();
//测试 MyException
Test3 t3 = new Test3();
t3.manage();
}
}
//myException,Exception
//有错误信息,错误类型。
class MyException extends Exception {
private int id;
private String message;
public MyException(String message,int id) {
this.message = message;
this.id = id;
}
public int getId() {
return id;
}
public String getMessage() {
return message;
}
}
结果:
123456.5987
错误信息1
MyException: 年龄为负不合理.
at Test3.regist(Test3.java:8)
at Test3.manage(Test3.java:16)
at Test3.main(Test3.java:56)
over.