异常
Java把异常当作对象来处理
异常结构
Throwable是所有异常的根,java.lang.Throwable
Error是错误,java.lang.Error
Exception是异常,java.lang.Exception
异常分类
Exception异常分为两大类
a) Checked exception(非运行时异常) (非 RuntimeException,Error)
如IO异常
b) Unchecked exception(运行时异常)(RuntimeException,Error)
如数组越界、空指针等
Java中所有的异常类都会直接或间接地继承自Exception。
RuntimeException类也是直接继承自Exception类,它叫做运行时异常,Java中所有
的运行时异常都会直接或间接地继承自RuntimeException。
Java 中凡是继承自Exception而不是继承自RuntimeException的类都是非运行时异
常。
异常处理
a)对于非运行时异常(checked exception),必须要对其进行处理,处理方式有两种:
第一种是使用try.. catch…finally 进行捕获;
第二种是在调用该会产生异常的方法所在的方法声明throws Exception
第一种是使用try.. catch…finally 进行捕获;
第二种是在调用该会产生异常的方法所在的方法声明throws Exception
b)对于运行时异常(runtime exception),我们可以不对其进行处理,也可以对其进行
处理。推荐不对其进行处理。
try{
} catch(Exception e) {
} finally {
}
无论程序是否出现异常,finally 块中的代码都是会被执行的。
如果try 块中存在return 语句,那么首先也需要将finally 块中的代码执行完毕,然
后方法再返回。
如果try 块中存在System.exit(0)语句,那么就不会执行finally 块中的代码,因为
System.exit(0)会终止当前运行的Java虚拟机,程序会在虚拟机终止前结束执行。
我们可以使用多个catch块来捕获异常,这时需要
将父类型的catch块放到子类型的
catch块之后,这样才能保证后续的catch可能被执行,否则子类型的catch将永远
无法到达,Java 编译器会报编译错误;如果多个catch 块的异常类型是独立的
(MyException, MyException2), 那么谁前谁后都是可以的。
catch块之后,这样才能保证后续的catch可能被执行,否则子类型的catch将永远
无法到达,Java 编译器会报编译错误;如果多个catch 块的异常类型是独立的
(MyException, MyException2), 那么谁前谁后都是可以的。
自定义异常
所谓自定义异常,通常就是定义了一个继承自Exception类的子类,那么这个类就是
一个自定义异常类。通常情况下,我们都会直接继承自Exception类,一般不会继承
某个运行时的异常类。
一个自定义异常类。通常情况下,我们都会直接继承自Exception类,一般不会继承
某个运行时的异常类。
class ChushulingException extends Exception{
public ChushulingException(String msg){
super(msg);
}
}
class ChushufuException extends Exception{
public ChushufuException(String msg){
super(msg);
}
}
/*自定义异常 End*/
class Numbertest{
public int shang(int x,int y) throws ChushulingException,ChushufuException{
if(y<0){
throw new ChushufuException("您输入的是"+y+",规定除数不能为负数!");//抛出异常
}
if(y==0){
throw new ChushulingException("您输入的是"+y+",除数不能为0!");
}
int m=x/y;
return m;
}
}