throw和throws的区别
- 相同:都是用于做异常的抛出处理的。
- 不同点:
- 使用的位置: throws 使用在函数上,throw使用在函数内
- 后面接受的内容的个数不同:
- throws 后跟的是异常类,可以跟多个,用逗号隔开。
- throw 后跟异常对象。
声明抛出出来了异常的意义
声名抛出针对的是受控异常,是将其抛到上一层。**方法异常抛给主函数,主函数异常抛给虚拟机。**这样每一个方法就不用重复写异常处理了。
import java.io.FileNotFoundException;
class 声明抛出处理异常 {
/**
* 张三干的活
*/
private static void test1() {
throw new NumberFormatException();
}
/**
* 李四干的活
*/
private static void test2() {
throw new NullPointerException();
}
/**
* 王五干的活
*/
private static void test3() {
throw new ArrayIndexOutOfBoundsException();
}
/**
* 赵六干的活
*/
private static void test4() {
throw new ClassCastException();
}
/**
* 非运行时异常(受控异常)
*/
private static void test5() throws Exception {
//声名抛出针对的是受控异常,是将其抛到上一层。
//方法异常抛给主函数,主函数异常抛给虚拟机。
//这样没一个方法就不用重复写异常处理了。
try {
throw new FileNotFoundException();
} catch (FileNotFoundException e) {
System.out.print("错误页面显示");
}
//但是此办法,受控异常或非运行时异常会限制。
//所以要么在主函数进行抛出异常。
}
public static void main(String[] args) throws Exception /*声名抛出*/
/*throws IOException,FileNotFoundException(),ClassCastException(),
ArrayIndexOutOfBoundsException(),NullPointerException(),NumberFormatException()*/ {
// 多态,让接口实现多继承。
// if(1==1) throw new FileNotFoundException();
// 咋这里是将虚拟机欺骗一下,
// 让虚拟机认该异常之后的代码有可能有异常。
// try {
test1();
test2();
test3();
test4();
// } catch (Exception e) {
// System.out.print("错误页面显示");
// 但是此办法,受控异常或非运行时异常会限制。
//所以要么主函数进行抛出异常
}
}
try语句不能单独存在,可以和catch、finally组成 try…catch…finally、try…catch、try…finally三种结构。
.
catch语句可以有一个或多个,finally语句最多一个,try、catch、finally这三个关键字均不能单独使用。
.
try、catch、finally三个代码块中变量的作用域分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。
.
多个catch块时候,Java虚拟机会匹配其中一个异常类或其子类,就执行这个catch块,而不会再执行别的catch块。(子类在上,父类在下)。
.
throw语句后不允许有紧跟其他语句,因为这些没有机会执行。
.
如果一个方法调用了另外一个声明抛出异常的方法,那么这个方法要么处理异常,要么声明抛出。