Java 异常的关键字有try catch finally ,throws,throw下面我们来看看这几个关键字的基本用法。
一、用法简介
- try catch finally
1)抓取异常,并处理。
try {
//try里面放有可能出现错误的语句
} catch (RuntimeException e) {
//当出现RuntimeException类型的异常时的解决办法
}catch(Exception e){
//当出现Exception类型的异常时的解决办法
}finally{
//不论在try、catch代码块中是否发生了异常事件,finally块中的语句都会被执行
}
finally可以不用写也就是try{}catch{}
- throws
1)抛出异常,将异常抛给调用者解决。
public void readFile(String file) throws FileNotFoundException {
……
// 读文件的操作可能产生FileNotFoundException类型的异常
FileInputStream fis = new FileInputStream(file);
..……
}
3.throw
- throw用于自己抛出异常,可以抛出的异常必须是Throwable或其子类的实例!!
public class Person {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) throws PersonException{
if (age < 0 || age > 100){
throw new PersonException("年龄不合法");
}
this.age = age;
}
public class Action {
Verification ver = new Verification();
public double verification(double money){
try {
if(money<10){
throw new MoneyException("钱太少了");
}else{
ver.setMoney(money);
}
} catch (Exception e) {
e.printStackTrace();
}
return money;
}
}
ps(以上代码中的自定义异常类需要自己定义)
二、详细说明
-
Java异常
任何程序在运行中都有可能出现异常,例如数组下表越界,除数为零,读写文件不存在等等。
对于这类错误一般有两种处理办法
a)遇到错误就停止运行
b)程序员在编程中考虑到出现异常的可能,并进行错误检测,错误消息提示,以及错误处理。 -
Java异常出现的种类
a)Error异常:Java虚拟机内部系统出现错误,或者资源耗尽等严重情况。
b)Exception异常:程序运行出现错误或一些偶然外在因素导致的一般性问题。
我们一般只负责解决exception异常。
从这个树中我们可以看出throwable是所有异常类的父类。我们需要解决的exception类,有两个大类一是IOexception(编译时期异常,检查性异常)ps:常遇到的几个。二是RuntimeException(运行时期异常,非检查性异常)ps:常遇到的几个
-
try catch finally
try{
定义可能出现异常的代码
如果try中已经有出现异常的代码了,则try中剩余的代码不在执行
} catch(NullPointerException e){
处理可能出现的异常
注:
1)catch中捕捉的异常的类型要和try中出现的异常的类型相匹配,catch才能处理
2)catch中捕捉的异常类型可以有多个,这样try中出现的异常会选择相应的catch进行执行,如果都不匹配,则程序停止运行。
*如果多个catch中捕捉的异常具有父子类关系,则要求子类异常在上,父类异常在下
catch(ArrayIndexOutOfBoundsException e){
System.out.println("处理了数组下标越界异常");
}catch(NumberFormatException e){
System.out.println("处理了数组下标越界异常");
}catch(RuntimeException e){
System.out.println("出现了运行时异常");
}finally{
//finally:不管程序中是否有异常,finall中的代码一定会被执行到,一般再关闭某些资源时会使用
}
我们知道一般在遇到return的时候程序会结束运行,那么在catch里有return呢?
public class Practice {
public static void main(String[] args) {
int[] a = {1,2,3,4};
int b =getArry(a);
System.out.println("~~~~~~~");
System.out.println("b的值为:"+b);
}
public static int getArry(int[] a){
try {
a[4] = 5;//数组下标越界
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("catch中的return返回a[0],a[0]==1");
return a[0];
}finally{
System.out.println("finall中的enturn返回a[3],a[3]==4");
return a[3];
}
}
}
结果图告诉我们finally会被执行。并且最终的返回值回事finally里的返回值。
在以下两种情况finally不会被执行
a)System.exit(0); //正常退出JVM
b)System.exit(-1);//强制退出JVM
-
throws
1)不管throws抛出的是否为运行时异常,调用者都要对其进行处理 -
throw
1)thow语句用在方法体内,表示抛出异常,由方法体内的语句处理,
2) 不能单独使用,要么和try、catch一起使用,要么和throws一起使用。
3) throws语句用在方法声明后面,表示这个方法可能会抛出异常,表示的是一种倾向,可能,但不一定实际发生。