java中的throw到底有什么用?
答案:4 悬赏:20 手机版
解决时间 2021-02-08 10:34
- 提问者网友:我们很暧昧
- 2021-02-08 04:55
java中的throw到底有什么用?
最佳答案
- 五星知识达人网友:春色三分
- 2021-02-08 06:29
这两者虽然看起来只有一个s的区别,但是作用完全不一样
1、throws关键字通常被应用在声明方法时,用来指定可能抛出的异常。多个异常可以使用逗号隔开。当在主函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象。如下面例子所示:
public class Shoot { 创建类
static void pop() throws NegativeArraySizeException {
//定义方法并抛出NegativeArraySizeException异常
int [] arr = new int[-3];//创建数组
}
public static void main(String[] args) {//主方法
try {
pop(); //调用pop()方法
} catch (NegativeArraySizeException e) {
System.out.println("pop()方法抛出的异常");//输出异常信息
}
}
}
2、throw关键字通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法声明中指明要跑出的异常;如果要捕捉throw抛出的异常,则必须使用try—catch语句。举例如下:
class MyException extends Exception { //创建自定义异常类
String message; //定义String类型变量
public MyException(String ErrorMessagr) { //父类方法
message = ErrorMessagr;
}
public String getMessage(){ //覆盖getMessage()方法
return message;
}
}
public class Captor { //创建类
static int quotient(int x,int y) throws MyException{//定义方法抛出异常
if(y < 0){ //判断参数是否小于0
throw new MyException("除数不能是负数");//异常信息
}
return x/y;//返回值
}
public static void main(String args[]){ //主方法
try{ //try语句包含可能发生异常的语句
int result = quotient(3,-1);//调用方法quotient()
}catch (MyException e) { //处理自定义异常
System.out.println(e.getMessage()); //输出异常信息
}
catch (ArithmeticException e) {
//处理ArithmeticException异常
System.out.println("除数不能为0");//输出提示信息
}
catch (Exception e) { //处理其他异常
System.out.println("程序发生了其他的异常");
//输出提示信息
}
}
}
希望能解决您的问题。追问你说的这些没有解决我的问题啊!!我想问的不是throw怎么用,我想知道throw有什么意义,既然jvm都定义好异常了 还需要throw干啥!
1、throws关键字通常被应用在声明方法时,用来指定可能抛出的异常。多个异常可以使用逗号隔开。当在主函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象。如下面例子所示:
public class Shoot { 创建类
static void pop() throws NegativeArraySizeException {
//定义方法并抛出NegativeArraySizeException异常
int [] arr = new int[-3];//创建数组
}
public static void main(String[] args) {//主方法
try {
pop(); //调用pop()方法
} catch (NegativeArraySizeException e) {
System.out.println("pop()方法抛出的异常");//输出异常信息
}
}
}
2、throw关键字通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法声明中指明要跑出的异常;如果要捕捉throw抛出的异常,则必须使用try—catch语句。举例如下:
class MyException extends Exception { //创建自定义异常类
String message; //定义String类型变量
public MyException(String ErrorMessagr) { //父类方法
message = ErrorMessagr;
}
public String getMessage(){ //覆盖getMessage()方法
return message;
}
}
public class Captor { //创建类
static int quotient(int x,int y) throws MyException{//定义方法抛出异常
if(y < 0){ //判断参数是否小于0
throw new MyException("除数不能是负数");//异常信息
}
return x/y;//返回值
}
public static void main(String args[]){ //主方法
try{ //try语句包含可能发生异常的语句
int result = quotient(3,-1);//调用方法quotient()
}catch (MyException e) { //处理自定义异常
System.out.println(e.getMessage()); //输出异常信息
}
catch (ArithmeticException e) {
//处理ArithmeticException异常
System.out.println("除数不能为0");//输出提示信息
}
catch (Exception e) { //处理其他异常
System.out.println("程序发生了其他的异常");
//输出提示信息
}
}
}
希望能解决您的问题。追问你说的这些没有解决我的问题啊!!我想问的不是throw怎么用,我想知道throw有什么意义,既然jvm都定义好异常了 还需要throw干啥!
全部回答
- 1楼网友:动情书生
- 2021-02-08 10:54
因为你可以在一个很普通的地方比如一个else if分支里抛异常,也可以在一个该抛异常的地方什么也不做。
- 2楼网友:荒野風
- 2021-02-08 09:24
没有引发,你觉得你捕捉到的异常是从哪来的追问碰到一个数组越界异常,不throw难道就不提示异常吗?追答会出现异常,但只会有ArrayIndexOutOfBoundsException。如果你写了一个查找算法,在找不到元素的时候抛出异常,只抛出ArrayIndexOutOfBoundsException,谁知道是算法有问题还是设计就是如此,所以要catch然后throw一个不同的异常,表示算法没问题,但是就是没找到元素追问不懂。。这个算法和设计有什么关系?还有就是为什么throw一个不同的异常就能表示算法没问题了?数组越界异常不就是超过数组的容量了啊,难道这么复杂?
- 3楼网友:北方的南先生
- 2021-02-08 08:00
直接上代码:
try{
//todo
}catch(Exception e){
//do log or other
throw new Exception(e);
}
try{
//todo
}catch(Exception e){
//do log or other
throw new Exception(e);
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯