异常:中断正常指令流的事件(对异常的处理关系到系统的健壮性)
error:程序员无法处理
Exception:使用try…catch…finally来处理异常的代码(可能出现的异常放在try中,对异常处理的代码放到catch里面,把清理资源的代码放到finally里面)
class Test{
public static void main(String args[]){
System.out.println(1);
try{
System.out.println(2);
int i = 1 / 0 ;
System.out.println(3);
}
catch(Exception){
e.printStackTrace();//打印异常栈的追踪信息
System.out.println(4);
}
System.out.println(5);
}
}
打印出1、2、一个异常原因、4、5
class Test{
public static void main(String args[]){
System.out.println(1);
try{
System.out.println(2);
int i = 1 / 1 ;
System.out.println(3);
}
catch(Exception){
e.printStackTrace();//打印异常栈的追踪信息
System.out.println(4);
}
System.out.println(5);
}
}
打印出1、2、3、5无异常信息
class Test{
public static void main(String args[]){
System.out.println(1);
try{
System.out.println(2);
int i = 1 / 1 ;
System.out.println(3);
}
catch(Exception){
e.printStackTrace();//打印异常栈的追踪信息
System.out.println(4);
}
finally{
System.out.println("finally");
}
System.out.println(5);
}
}
打印出1、2、3、finally、5
class Test{
public static void main(String args[]){
System.out.println(1);
try{
System.out.println(2);
int i = 1 / 0 ;
System.out.println(3);
}
catch(Exception){
e.printStackTrace();//打印异常栈的追踪信息
System.out.println(4);
}
finally{
System.out.println("finally");
}
System.out.println(5);
}
}
打印出1、2、4,finally、5
即:try中代码出现异常执行catch函数,不出现异常则不执行该函数;无论出不出现异常都要执行finally函数
2.throw的用法
class User{
private int age;
public void setAge(int age){
if(age < 0){
RuntimeException e = new RuntimeException("年龄不能为负数");
throw e;
}
this.age = age;
}
}
3、throws的用法 (有可能产生checkException时声明,由调用该函数类来处理异常)
class Test{
public static void main(String args[]){
User user = new User();
user.setAge(-20);
}
}
运行结果:Exception in thread "main" java.lang.RuntimeException: 年龄不能为负数
at User.setAge(User.java:6)
at Test.main(Test.java:4)
修改RuntimeException为Exception
class User{
private int age;
public void setAge(int age){
if(age < 0){
Exception e = new Exception("年龄不能为负数");
throw e;
}
this.age = age;
}
}
编译结果:
User.java:7:未报告的异常 java.lang.Exception:必须对其进行捕捉或者声明以便抛出
throw e ;
class User{
private int age;
public void setAge(int age) throws Exception{ //表示setAge有可能会产生Exception这种类型的异常对象
if(age < 0){
Exception e = new Exception("年龄不能为负数");
throw e;
}
this.age = age;
}
}
User编译无错误但是Test编译出现异常
D:\>javac Test.java
Test.java:4: 未报告的异常 java.lang.Exception;必须对其进行捕捉或声明以便抛出
user.setAge(-20);
修改Test的代码:
class Test{
public static void main(String args[]){
User user = new User();
try{
user.setAge(-20);
}
catch(Exception e){
System.out.print(e);
}
}
}
编译运行后:
java.lang.Exception:年龄不能为负数