本周学习
异常
复习
1.运行时异常,写代码时不报错,运行后报错,比如
(1)打印一个数除以0
(2)定义一个字符串,并赋初值NULL,然后打印它
(3)定义一个数组,然后打印超过数组边界的数据
2.编译时异常,编写代码时就会显示错误
比如FileReader file=new FileReader(“D:\a.txt”);
即使导包也会报错,必须加入try-catch块
3.try-catch可以嵌套,但一般不用,让try后跟多个catch块
try{
语句一
try{
语句二
}catch(){
语句一的处理
}
}catch(){
语句二的处理
}
try{
语句一
语句二
}catch(){
语句一的处理
}catch(){
语句二的处理
}
4.finally语句紧跟在catch语句后面,不管异常有没有发生都会执行,try语句里的语句finally语句里是看不见的
5.所有的异常都在lang包里
6.
//一
try{
FileReader cin = new FileReader("D:\\a.txt");
char ch = (char)cin.read();
System.out.println(ch);
}catch(FileNotFoundException e){ //1
e.printStackTrace();
}catch(IOException e){ //2
e.printStackTrace();
}
//二
try{
FileReader cin = new FileReader("D:\\a.txt");
char ch = (char)cin.read();
System.out.println(ch);
}catch(IOException e){ //3
e.printStackTrace();
}catch(FileNotFoundException e){ //4
e.printStackTrace();
}
IOException是FileNotFoundException的父类,在“二”处,不管哪条语句出错都会转向3处的catch,4处的catch就被忽略了,所以4处的catch可以省略。而在“一”处就需要两个catch
7.自定义异常
异常父类:Exception(编译时异常),RuntimeException(运行时异常)
自定义异常IlleagalAgeException,继承RuntimeException:
class IlleagalAgeException extends RuntimeException{ //当年龄为负数时抛出异常
public IlleagalAgeException(){
}
public IlleagalAgeException(String m){
super(m);
}
}
public void setAge(int age)throws IlleagalAgeException{
if(age<0){throws new IlleagalAgeException("年龄不能小于零");}
this.age=age;
}