重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
throw 仅用于方法定义后面,指示该方法可能会抛出什么异常,使用该方法的方法必须处理该异常,或者再次抛出。
创新互联建站专注于企业成都全网营销推广、网站重做改版、成华网站定制设计、自适应品牌网站建设、HTML5建站、成都商城网站开发、集团公司官网建设、外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为成华等各大城市提供网站开发制作服务。
throws 用于当程序判断发生异常时,用该语句抛出异常,或处理异常时再次抛出异常。
//下面三个关键字就是处理异常
try {
//这里放可能会发生异常的语句
} catch(Exception e) {
//这里处理异常
} finally {
//这里的语句必然会得到执行,不管异常发省与否,
//用于关闭数据库,关闭连接等收尾操作(非必要)
}
java异常的一个简单例子,比如我有一个除法方法
public int divide(int a, int b) {
return a / b;
}
但是这就有一个问题,当b是0时,程序会报错。
如果引入异常,改成这样
public int divide(int a, int b) throws Exception {
if (b == 0) {
throw new Exception("b = 0");
}
return a / b;
}
那么调用端该怎么用呢
public class ExceptionTest {
public static void main(String[] args) {
ExceptionTest et = new ExceptionTest();
try {
System.out.println(et.divide(12, 0));
} catch (Exception e) {
System.out.println("0不能做被除数");
}
}
public int divide(int a, int b) throws Exception {
if (b == 0) {
throw new Exception("b = 0");
}
return a / b;
}
}
程序可以继续执行,不会中断。
Java语言提供两种异常处理机制:捕获异常和声明抛弃异常。
1、捕获异常:
(1)在Java程序运行过程中系统得到一个异常对象是,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。
(2)找到能够处理这种类型异常的方法后,运行时系统把当前异常交给这个方法处理;如果找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。
(3)捕获异常是通过try-catch-finally语句实现的。语法为:
try{
...
}catch(ExceptionName1 e){
...
}catch(ExceptionName2 e){
...
}
...
}finally{
...
}
2、声明抛弃异常:
(1)当Java程序运行时系统得到一个异常对象时,如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃异常。
(2)声明抛弃异常是在一个方法声明中的throws子句中指明的。如:
public int read()() throws IOException{
...
}
其中throws IOException就是声明抛弃异常,throws后可以跟多个异常类型。
扩展资料:
程序设计语言的异常机制:
1、多数语言的异常机制的语法是类似的:用throw或raise抛出一个异常对象(Java或C++等)或一个特殊可扩展的枚举类型的值(如Ada语言);
2、异常处理代码的作用范围用标记子句(try或begin开始的语言作用域)标示其起始,以第一个异常处理子句(catch, except, resuce等)标示其结束;可连续出现若干个异常处理子句,每个处理特定类型的异常。
3、某些语言允许else子句,用于无异常出现的情况。更多见的是finally, ensure子句,无论是否出现异常它都将执行,用于释放异常处理所需的一些资源。
(1)C++异常处理是资源获取即初始化(Resource-Acquisition-Is-Initialization)的基础。
(2)C语言一般认为是不支持异常处理的。Perl语言可选择支持结构化异常处理(structured exception handling)。
(3)Python语言对异常处理机制是非常普遍深入的,所以想写出不含try, except的程序非常困难。
参考资料来源:
百度百科-异常处理
import java.util.Scanner;
public class ExceptionDemo {
public static void main(String[] args) {
double op1,op2,r;
Scanner sc=new Scanner(System.in);
System.out.println("请输入两个double型的参数");
op1=sc.nextDouble();
op2=sc.nextDouble();
try {
r=div(op1,op2);
}
catch(MyException ex) {
System.out.println(ex.getMessage());
do {
System.out.println("除数为0,请重新输入操作数2的值!");
op2=op2=sc.nextDouble();
}while(0==op2);
}
finally {
System.out.println(""+op1+"/"+op2+"的结果是:"+(op1/op2));
}
sc.close();
}
static double div(double op1,double op2) throws MyException {
if(0==op2) {
throw new MyException("自定义异常,除数为0异常");
}
return op1/op2;
}
}
class MyException extends Exception {
MyException(String msg) {
super(msg);
}
}
public class DevideZeroException extends RuntimeException// (1)//自定义异常类DevideZeroException来表示除数为0错误
{
public DevideZeroException() {
super("除数不能为零!");// (2)("除数不能为零!");
}
public DevideZeroException(String message) {
super(message);// ( 3 )
}
}
public class Test {
public static void main(String[] args) {
try {
int a = 10;
int b = 0;
if (b == 0 /* (4) */) {/* (5) */
throw new DevideZeroException();
} else {
System.out.println(a / b);
}
} catch (DevideZeroException e) {
System.out.println(e.getMessage()/* (6) */);
} finally {
System.out.println("end");
}
}
}
运行结果:
除数不能为零!
end