代码1
class Demo
{ public static void main(String[] args)
{ try { showExce(); }
catch(Exception e)
{ System.out.println("B");}
System.out.println("D");
}
public static void showExce()
{ try {
throw new Exception();
System.out.println("A");
}
catch(Exception e)
{
System.out.println("M");
} }}
编译失败,因为这里直接抛出异常。 问题是:但是紧跟的后面不是catch么 这里不是相当于在函数内部直接处理掉了异常么
同样的事情在代码二里面却可以运行
代码二
class Test
{
public static String output="";
public static void foo(int i)
{
try
{
if(i==1)
throw new Exception(); ②
output+="1";'
}
catch(Exception e)
{
output+="2";
return;
}
output+=4;
}
public static void main(String[] args)
{
foo(0);
System.out.println(output);
foo(1);
System.out.println(output); }}
可以运行
问题:第一个程序里直接抛出,但是我觉得不是应该被catch捕获么, 既然被catch捕获了, 为什么不能运行catch里面的语句,反而是编译失败呢?syo不运行我可以理解
就是不理解 为什么try里抛出之后应该被catch捕获然后运行catch里的语句
但是程序却编译出错 同样的情况另一个程序缺编译通过 另一个程序却编译通过。
求各位大侠帮忙解答下困惑!!!
关于抛出异常的问题
答案:3 悬赏:60 手机版
解决时间 2021-01-02 01:25
- 提问者网友:浮克旳回音
- 2021-01-01 18:28
最佳答案
- 五星知识达人网友:愁杀梦里人
- 2021-01-01 19:26
根据我的理解! 第一个程序里是直接throw抛出异常,在编译的时候java已经发现你程序抛出异常,而try{}catch是程序运行时去捕获,故不会通过编译,第二种情况也就不难理解了,因为你有if判断,java编译时是不运行里面的代码的,就好比你一个方法要return 你如果在if判断里面return还是会报编译错误的, 希望能帮到你!
全部回答
- 1楼网友:杯酒困英雄
- 2021-01-01 20:36
把错误本地解决!catch 把错误留给上级,throws 或者这样说 catch到异常后,catch后面的代码还是可以执行; throws是碰到异常后就抛出去了,由上一层(调用类)代码捕获,异常后面的代码不会执行了。
- 2楼网友:胯下狙击手
- 2021-01-01 20:02
第一个,你直接通过throw抛出了异常,这样catch已经不能再去捕获了,都已经抛出去了,你再捕获 编译肯定是行不通的
throw就相当于把异常抛离了try代码块,而catch则是捕获try代码块的异常
第二个,你在代码里面添加了个判断条件,这个时候编译是不会检查你这个条件的,只有运行时才会报错
所以楼主要了解什么是一般异常 什么是运行时异常。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯