Java当中的异常
什么是异常?
异常:是一个由虚拟机产生的对象,中断了正常指令流的事件;(异常是运行时产生的,和编译没有关系)。
异常的分类
(RuntimeException及其子类都是uncheck的异常)
class Test{
public static void main(String args[]){
System.out.println(1);
//uncheek exception
//将有可能有异常的代码放在try中,一旦有异常就跳到catch中;而且不会影响后面的代码执行.finally中的代码都会运行,不管有没有异常
try{
System.out.println(2);
int i = 1/0;
System.out.println(3);
}
catch(Exception e){
e.printStackTrace();
System.out.println(4);
}
finally{
System.out.println("finally");
}
System.out.println(5);
}
}
class TestCheck{
public static void main(String args[]){
//check exception
try{
Thread.sleep(1000);
}
catch(Exception e){
e.printStackTrace();
}
}
}
自定义异常:语法上没有问题,但是不符合实际,例如定义 age为int型,age可以为负数,但是实际上年龄是不能为负数的,这时可以自定义异常。使用throw和throws关键字
class User{
int age;
void setage(int age){
if(age < 0){
RuntimeException e = new RuntimeException("年龄不能为负数");
throw e;
}
this.age = age;
}
}
class Test{
public static void main(String args[]){
User user = new User();
user.setage(-20);
}
}
以上为uncheck的异常
若改为下面的代码:
class User{
int age;
void setage(int age) throws Exception{
if(age < 0){
Exception e = new Exception("年龄不能为负数");
throw e;
}
this.age = age;
}
}这时check exception,必须进行try...catch处理。可以使用throws,在调用这个函数的地方处理异常。
class Test{
public static void main(String args[]){
User user = new User();
try{
user.setage(-20);
}
catch(Exception e){
System.out.println(e);
}
}
}
此时运行时将产生异常。