异常(Exception)
异常定义和分类
异常:中断了正常指令流的事件;
check exception:异常不属于RuntimeException,
java的编译器会强制要求你进行处理
class TestCheck{
public static void main(String args[]{
//check exception
Thread.sleep(1000);
}
}
unchecked exception:异常属于RuntimeException或其子类
编译可以通过,但是只会执行到异常处就停止执行。
class Test{
public static void main(String args[]){
System.out.println(1);
//uncheckexception
int i = 1/0;
System.out.println(0);
}
}
try catch finally方法
try catch方法:将有可能出现异常的代码放在try中,一旦出现异常就跳入catch
class TestCheck{
public static void main(String args[]){
//check exception
try{
Thread.sleep(1000);
}
catch(Exception e){
e.printStackTrace();
}
}
}
finally方法(异常的出口):不论是否异常,finally都会执行。可以必要的操作保证一定会执行,来执行一些清理工作。
throw和throws
throw:抛出异常对象(uncheckedexception)
class Test{
public static void main(String srgs[]){
User user = new User();
user.setAge(-20);//age小于0 为异常
}
}
class User{
private int age;
public void setAge(int age){
if(age<0){
//生成一个异常对象
RuntimeException e = new RuntimeException("年龄不能为负数");
//抛出异常对象,在此处就会终止代码运行
throw e;
}
this.age = age;
}
}
执行之后抛出异常
若生成的是Exception对象(check exception),则会在编译时抛出异常
class User{
private int age;
public void setAge(int age){
if(age<0){
Exception e = new Exception("年龄不能为负数");
throw e;
}
this.age = age;
}
}
一般通过try catch finally捕捉,或采用声明的方法(throws方法)
throws方法:加在函数后申明这个函数可能产生异常。产生的异常并不由setAge函数处理,而是由调用setAge的函数处理。
class User{
private int age;
public void setAge(int age)throws Exception{
if(age<0){
Exception e = new Exception("年龄不能为负数");
throw e;
}
this.age = age;
}
}
这样就能通过该类的编译。但在调用它的文件的编译时会报错,需要进行try catch处理
class Test{
public static void main(String srgs[]){
User user = new User();
try{
user.setAge(-20);
}
catch(Exception e){
System.out.println(e);
}
}
}