Java异常处理机制问题
若tryThis()方法抛出异常NumberFormatException,下面的代码将产生什么输出?try{tryThis();return;}catch(IOExce...
若tryThis( )方法抛出异常NumberFormatException,下面的代码将产生什么输
出?
try{
tryThis( );
return;
} catch(IOException x1) {
System.out.println(“exception1”);
return;
}catch (Exception x2){
System.out.println(“exception2”);
return;
} finally {
System.out.println(“finally”);
}
⒒class TestException{
public static void main(String〔〕 args){
try{
oneMethod( );
}catch(Exception e){
System.out.println(“there is an exception”);
}
}
static void oneMethod( ){
try{
anotherMethod( );
System.out.println(“normal”);
}catch(ArithmeticException e){
System.out.println(“there is an arithmeticexception”);
}
finally{
System.out.println(“in finally”);
}
System.out.println(“outside try block”);
}
static void anotherMethod( ){
throw new NullPointerException( );
}
}
不太理解Java的异常处理,我只知道,如果出现异常,然后这块异常后面的语句不再执行,而就找相近catch的匹配模块,还有,finally无论是否异常都执行.
但是,这题,我怎么看抛出异常NumberFormatException这个东西匹配的catch模块啊...该执行那个语句...最后运行结果是什么?
那个IOException又是什么异常模块啊???搞 不懂,请高手指教啊!!!
本悬赏有2小题
第2题是11开头的那题,我尤其看不懂第11题 展开
出?
try{
tryThis( );
return;
} catch(IOException x1) {
System.out.println(“exception1”);
return;
}catch (Exception x2){
System.out.println(“exception2”);
return;
} finally {
System.out.println(“finally”);
}
⒒class TestException{
public static void main(String〔〕 args){
try{
oneMethod( );
}catch(Exception e){
System.out.println(“there is an exception”);
}
}
static void oneMethod( ){
try{
anotherMethod( );
System.out.println(“normal”);
}catch(ArithmeticException e){
System.out.println(“there is an arithmeticexception”);
}
finally{
System.out.println(“in finally”);
}
System.out.println(“outside try block”);
}
static void anotherMethod( ){
throw new NullPointerException( );
}
}
不太理解Java的异常处理,我只知道,如果出现异常,然后这块异常后面的语句不再执行,而就找相近catch的匹配模块,还有,finally无论是否异常都执行.
但是,这题,我怎么看抛出异常NumberFormatException这个东西匹配的catch模块啊...该执行那个语句...最后运行结果是什么?
那个IOException又是什么异常模块啊???搞 不懂,请高手指教啊!!!
本悬赏有2小题
第2题是11开头的那题,我尤其看不懂第11题 展开
3个回答
展开全部
第一个输出结果为:
exception2
finally
第二个输出结果为:
in finally
there is an exception
异常的匹配方式是向上匹配原则,如果catch中没有精确匹配的异常类型,即向该异常的父级异常匹配,进而处理结果。第一题中,出现了很多return混淆视听。一般搜帆搏来说,finally是在return之前执行的;第二题中匹配异常时就出现了个ArithmeticException(运算异常)去匹配NullPointerException(空指针),很显然不会匹配成功。因为他们都是RuntimeException的子类,所以捕获ArithmeticException的代码块不会执行而直接执行finally中的代码。还有世祥,因为try中断了代码执行,所以在finally后面的代码不会显示。如果try中没有异常发生,才会打印出outside try block。
IOException是输入输出的异常。一般在文件读取操作时多发生。
===========================================
Ⅱ题详解!
代码执行的顺序用1、2、3表示如下:
class TestException {
public static void main(String[] args) {
// step 1
try {
oneMethod(); // --> goto step 2
// step 6 处理抛出的NullPointerException,在catch中匹配
} catch (Exception e) {
// step 7 NullPointerException是Excpetion的子类,故打印结果
System.out.println("there is an exception");
}
// 完全结轿旅束
}
static void oneMethod() {
try {
// step 2
anotherMethod(); // --> goto step 3
// 因为出现了异常,所以不打印,直接匹配catch中的Exception类型
System.out.println("normal");
// step 4
} catch (ArithmeticException e) {
// 因为异常不匹配,所以不打印
System.out.println("there is an arithmeticexception");
// step 5
} finally {
// 作为try的结束操作,会执行
System.out.println("in finally");
}
// 因为出现了异常,所以跳出,不会打印
System.out.println("outside try block");
}
static void anotherMethod() {
// step 3
throw new NullPointerException();
}
}
理解了么?这个其实不难,就是一直在代码块之间跳转
exception2
finally
第二个输出结果为:
in finally
there is an exception
异常的匹配方式是向上匹配原则,如果catch中没有精确匹配的异常类型,即向该异常的父级异常匹配,进而处理结果。第一题中,出现了很多return混淆视听。一般搜帆搏来说,finally是在return之前执行的;第二题中匹配异常时就出现了个ArithmeticException(运算异常)去匹配NullPointerException(空指针),很显然不会匹配成功。因为他们都是RuntimeException的子类,所以捕获ArithmeticException的代码块不会执行而直接执行finally中的代码。还有世祥,因为try中断了代码执行,所以在finally后面的代码不会显示。如果try中没有异常发生,才会打印出outside try block。
IOException是输入输出的异常。一般在文件读取操作时多发生。
===========================================
Ⅱ题详解!
代码执行的顺序用1、2、3表示如下:
class TestException {
public static void main(String[] args) {
// step 1
try {
oneMethod(); // --> goto step 2
// step 6 处理抛出的NullPointerException,在catch中匹配
} catch (Exception e) {
// step 7 NullPointerException是Excpetion的子类,故打印结果
System.out.println("there is an exception");
}
// 完全结轿旅束
}
static void oneMethod() {
try {
// step 2
anotherMethod(); // --> goto step 3
// 因为出现了异常,所以不打印,直接匹配catch中的Exception类型
System.out.println("normal");
// step 4
} catch (ArithmeticException e) {
// 因为异常不匹配,所以不打印
System.out.println("there is an arithmeticexception");
// step 5
} finally {
// 作为try的结束操作,会执行
System.out.println("in finally");
}
// 因为出现了异常,所以跳出,不会打印
System.out.println("outside try block");
}
static void anotherMethod() {
// step 3
throw new NullPointerException();
}
}
理解了么?这个其实不难,就是一直在代码块之间跳转
展开全部
NumberFormatException包含在锋激瞎Exception 中,
IOException是输入输银空出异常模块,铅芦I--input O--out
IOException是输入输银空出异常模块,铅芦I--input O--out
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
exception2
finally
后面是哪里在调用tryThis()的?
finally
后面是哪里在调用tryThis()的?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询