永发信息网

关于抛出异常的问题

答案:3  悬赏:60  手机版
解决时间 2021-01-02 01:25
代码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里的语句
但是程序却编译出错 同样的情况另一个程序缺编译通过 另一个程序却编译通过。
求各位大侠帮忙解答下困惑!!!
最佳答案
根据我的理解! 第一个程序里是直接throw抛出异常,在编译的时候java已经发现你程序抛出异常,而try{}catch是程序运行时去捕获,故不会通过编译,第二种情况也就不难理解了,因为你有if判断,java编译时是不运行里面的代码的,就好比你一个方法要return 你如果在if判断里面return还是会报编译错误的, 希望能帮到你!
全部回答
把错误本地解决!catch 把错误留给上级,throws 或者这样说 catch到异常后,catch后面的代码还是可以执行; throws是碰到异常后就抛出去了,由上一层(调用类)代码捕获,异常后面的代码不会执行了。
第一个,你直接通过throw抛出了异常,这样catch已经不能再去捕获了,都已经抛出去了,你再捕获 编译肯定是行不通的 throw就相当于把异常抛离了try代码块,而catch则是捕获try代码块的异常 第二个,你在代码里面添加了个判断条件,这个时候编译是不会检查你这个条件的,只有运行时才会报错 所以楼主要了解什么是一般异常 什么是运行时异常。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
单选题我国勘探部门能找到大庆油田、胜利油田
已知b2-4ac>0,下列方程①ax2+bx+c=0;②x2+
风云再起爆分是个什么情况
阿恩海姆与贡布里希在视觉心理学上的异同,能
大沟崖肉食店这个地址在什么地方,我要处理点
口红珠光什么意思
乳酸菌的GRAM-染色
阅读理解HowtoFightWinterBlueWinter’sshort
不胜其烦的胜是什麼意思?
偶尔还是会想起你!
建筑公司以个人名义开票给付款方合规吗?
某个星期中,从周一到周五这五天的日历号数之
中保财产保险有限公司归什么单位?
大家好,农村建房需要邻居签名才行。如果碰到
请写出四个含有擒字的成语
推荐资讯
化妆刷什么牌子的好
单选题I can speak ______ E
学习之道的作者简介
横幅怎么做
有仙则名的名词类活用
菜鸟驿站是什么?是怎么收费的?怎么运作?怎
梦见石榴树结满石榴
冰箱不能对着灶台
已知x=3是关于x的方程4x2-ax+3=0的一个解,则
高个子想说的话却被矮个子说了(打一成语)
植物的茎由什么发育而来(看问题补充)
神殿BOSS多久才出一只??,神殿BS多久才出一
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?