一、throws
1.分类:异常分两种,一种是Error(即系统错误,我们无法处理这种异常);另一种是Exception(是我们可以捕获并处理的异常)。其中Exception又分为两种:
1)RuntimeException的子类异常 ,是我们可以处理也可以不处理的异常
2)其他凡是继承自 Exception 但又不是 RuntimeException子类的异常,我们都必须得捕捉并进行处理
2.throws A的解释:
void f() throws A
{
.......
}
- thows A 表示调用 f 方法时 f 方法可能会抛出A类异常,建议调用f方法时最好对f方法可能抛出的A类异常进行捕捉,
- throws A 不表示f方法一定会抛出A类异常throws A,f方法也可以不抛出A类异常,
- throws A 不表示调用f方法时,必须的对A异常进行捕捉假设A是RuntimeException子类异常,
- 由于RuntimeException的子类异常可以处理也可以不处理,所以编译器允许你调用f方法时,对f方法抛出的RuntimeException子类异常不进行处理
- 最好对throws出的所有异常进行处理,如果一个方法内部已经对A异常进行了处理,则就不要再throws A了
3.异常处理步骤:
try
{
可能出现异常的代码块
}
catch (ExceptionName1 e)
{
当产生ExceptionName1 异常时的处理措施
}
catch (ExceptionName2 e)
{
当产生ExceptionName2异常时的处理措施
}
......
finally
{
无论是否捕捉到异常都必须处理的代码
}
例如:
import java.io.IOException;
class F{
public void f() throws IOException{
throw new IOException(); //throw 抛出异常,让调用者来处理
}
public void g(){
throw new ArithmeticException();
}
}
public class Exp1 {
public static void main(String[] args) {
F ff=new F();
try {
ff.f();
} catch (IOException e) {
e.printStackTrace();
}
}
}
补充:Finally的作用:
- 无论try所指定的程序块中是否抛出异常,也无论catch语句的异常类型是否与所抛弃的异常的类型一致,finally中的代码一定会得到执行;
- finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其他部分以前,能够对程序的状态作统一的管理;
- 通常在finally语句中可以进行资源的清除工作,如关闭打开的文件、删除临时文件等。
3.处理异常的一些例子:
package com.Tanya;
public class 随便 {
public static void main(String[] args) {
A aa=new A();
ArithmeticException ari=new ArithmeticException();
//ari.printStackTrace();
System.out.println(ari);
try{
aa.f();
ari.printStackTrace();
System.out.println();
}catch (ArithmeticException e){
System.out.println();
System.out.println("捕获成功!");
}
}
}
class A{
public static int f(){
int a=10;
int b=0;
System.out.println(a/b);
return a/b;
}
}
package com.Tanya;
public class 随便 {
public static void main(String[] args) {
A aa=new A();
ArithmeticException ari=new ArithmeticException();
ari.printStackTrace();
System.out.println(ari);
try{
aa.f();
ari.printStackTrace();
System.out.println();
}catch (ArithmeticException e){
System.out.println();
System.out.println("捕获成功!");
}
}
}
class A{
public static int f(){
int a=10;
int b=0;
System.out.println(a/b);
return a/b;
}
}
- 异常的处理机制(重点)
- 当Java程序运行时出现问题时,系统会自动检测到该错误,并立即生成一个与该错误对应的异常对象。
- 然后把该异常对象提交给Java虚拟机,
- Java虚拟机会自动寻找相应的处理代码来处理这个异常,如果没有找到,则由Java虚拟机做一些简单的处理后,程序被强行终止。
- 可以自己编写代码来捕捉可能出现的异常,并编写代码来处理相应的异常