动手动脑1:为什么不管是否有异常发生,finally语句块中的语句始终保证被执行?

我们在写代码时,如果finally块中的代码过多会导致字节码条数”膨胀”,因为finally中的字节码会被”复制”到try块和所有的catch块中。finally语句块主要用于解决资源泄露问题,它位于catch语句块之后,JVM保证它们一定执行。

动手动脑2:CatchWho.java,写出程序运行结果:

ArrayIndexOutOfBoundsException/内层try-catch
发生ArithmeticException

运行结果截图:

结果相同。

动手动脑3:CatchWho2.java,写出程序运行结果:

ArrayIndexOutOfBoundsException/外层try-catch

运行结果截图:

结果相同。

动手动脑4:当有多个嵌套的try…catch…finally时,要特别注意finally的执行时机。
请先阅读 EmbedFinally.java示例,再运行它,观察其输出并进行总结。
特别注意:
当有多层嵌套的finally时,异常在不同的层次抛出 ,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。

EmbedRinally.java程序如下:

public class EmbededFinally {

    public static void main(String args[]) {

        int result;

        try {
System.out.println("in Level 1");
try {
System.out.println("in Level 2");
// result=100/0; //Level 2 try { System.out.println("in Level 3"); result=100/0; //Level 3
} catch (Exception e) {//exception异常 System.out.println("Level 3:" + e.getClass().toString()); } finally { System.out.println("In Level 3 finally"); } // result=100/0; //Level 2 } catch (Exception e) { System.out.println("Level 2:" + e.getClass().toString()); }
finally { System.out.println("In Level 2 finally"); } // result = 100 / 0; //level 1 } catch (Exception e) { System.out.println("Level 1:" + e.getClass().toString()); } finally { System.out.println("In Level 1 finally"); } } }

程序运行结果:

总结:①catch语句一定和相邻的try,才可以接收到抛出的错误。

②finally语句是不管有没有异常都可以执行。

动手动脑5:辨析:finally语句块一定会执行吗?
请通过 SystemExitAndFinally.java示例程序回答上述问题

SystemExitAndFinally.java

public class SystemExitAndFinally {

    public static void main(String[] args)
{ try{ System.out.println("in main"); throw new Exception("Exception is thrown in main"); //System.exit(0); } catch(Exception e) { System.out.println(e.getMessage()); System.exit(0); } finally { System.out.println("in finally"); } }
}

程序运行结果:

“System.exit(0);”:System是一个Java类,调用exit(0)方法终止虚拟机也就是退出你的Java程序,括号里面的是参数,进程结束的返回值。即是强制退出程序。

“System.exit(1);”:即是异常终止。

因为catch中有“System.exit(0);”,使得程序终止,所以不会执行finally语句,但一般情况下,finally都会执行。

动手动脑6:编写一个程序,此程序在运行时要求用户输入一个 整数,代表某门课的考试成绩,程序接着给出“不及格”、“及格”、“中”、“良”、“优”的结论。
要求程序必须具备足够的健壮性,不管用户输入什 么样的内容,都不会崩溃。

程序代码:

package Test;

import java.util.Scanner;

//编写一个程序,此程序在运行时要求用户输入一个    整数
//代表某门课的考试成绩,程序接着给出“不及格”、“及格”、“中”、“良”、“优”的结论。
//李慧,2016.11.22 //三种异常错误类
class MyException extends Exception{
public MyException(String e){
super(e);
}
}
class NumException extends Exception{
public NumException(String e){
super(e);
}
}
class CCharException extends Exception{
public CCharException(String e){
super(e);
}
} public class Score { public static void main(String[] args) {
// TODO Auto-generated method stub
String str;
int score;
Scanner scan=new Scanner(System.in);
System.out.print("请输入语文成绩(整数):");
str=scan.next();
int x=1;
if(!str.matches("^[0-9]+$")){//是字符串-不是数字
try{throw new CCharException("出错!应输入数字!"); }
catch(CCharException e){
System.out.println(e);}
finally {System.out.println();} }
else//不是字符串-是数字
{
double num= Double.parseDouble(str);
int a=(int)num;
//System.out.println(num);
//System.out.println(a);
if(num!=a){//输入的内容是double型
try{throw new NumException("出错!应输入整数!"); }
catch(NumException e){
System.out.println(e);}
finally {System.out.println();}
}
else if(a<0 || a>100)
{ try{
throw new MyException("出错!成绩范围应为0~100分!");
}catch(MyException e){
System.out.println(e);
}finally {
System.out.println();
}}
else{
if(a<60) System.out.println("不及格!");
else if(a>=60 && a<70) System.out.println("及格!");
else if(a>=70 && a<80) System.out.println("中!");
else if(a>=80 && a<90) System.out.println("良!");
else if(a>=90 && a<=100) System.out.println("优!");
}
}//else
}//main
}

程序运行截图:

JAVA09异常处理之动手动脑问题的更多相关文章

  1. Java(异常处理)动手动脑

    1>请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. import javax.swing.*; class AboutEx ...

  2. JAVA 多态和异常处理作业——动手动脑以及课后实验性问题

    1.  阅读以下代码(CatchWho.java),写出程序运行结果: 1)  源代码 public class CatchWho { public static void main(String[] ...

  3. java异常处理动手动脑问题解决和课后总结

    动手动脑 一.问题:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. 1.源代码 import javax.swing.*; cl ...

  4. JAVA语法基础作业——动手动脑以及课后实验性问题 (八)

    一.动手动脑 运行AboutException.java示例,了解Java中实现异常处理的基础知识. 1)源代码 import javax.swing.*; class AboutException ...

  5. 11.8java课后动手动脑

    package 动手动脑; import javax.swing.*; class AboutException { public static void main(String[] a) { int ...

  6. 05-String动手动脑问题及课后实验性问题总结

    一.请运行以下实例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? (1)在Java中,内容相同的字符常量("Hello")只保存一 ...

  7. 03-方法ppt动手动脑问题及课后实验性问题总结

    一.如何不使用static来进行调用函数? 1.自己定义的不需要都是static,但是要在主函数中调用就需要static了,因为main是静态 的,在类加载时就加载了.如果想用又不加可以吧自己写的方法 ...

  8. JAV07接口与继承之动手动脑问题解决

    动手动脑:请自行编写代码测试以下特性:在子类中,若要调用父类中被覆盖的方法,可以使用super关键字. 1.源代码: package Work; class A{ public A(){ System ...

  9. JAVA06数组之动手动脑问题解决

     一.随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 1.设计思路:首先生成10个随机数,然后存放至长度至少是10的数组中,然后计算10个随机 ...

随机推荐

  1. 总结/PSP初体验—排球计分程序1.0

    要做一个排球计分程序,墨迹了很长时间才做出个的东西,过程很不爽: 功能:这个软件有两个页面,可以实现窗体A的部分变化控制窗体B的部分变化.A是操作人员使用看到的,B是投放给观众的,完全由A操控: 学到 ...

  2. Hibernate 基础配置及常用功能(一)

    本来是想等全部框架测试完以后再统一发布的,但是随着测试的一点点增加感觉把需要叙述的东西放在一起终将会是一场灾难.所以还是打算分成几章来描述,其中还包括一些有待解决的问题.短期很难腾出时间来仔细阅读Hi ...

  3. mybatis foreach的使用

    foreach标签在批量插入数据库时非常方便,但是很容易出错,我没有注意括号的位置让我折腾了一个半小时找问题,醉醉哒,所以在这里记录一下foreach的使用. 首先,这是insert批量插入正确的代码 ...

  4. 一个苹果证书如何多次使用——导出p12文件

    一个苹果证书怎么多次使用--导出p12文件 为什么要导出.p12文件 当我们用大于三个mac设备开发应用时,想要申请新的证书,如果在我们的证书里,包含了3个发布证书,2个开发证书,可以发现再也申请不了 ...

  5. Countries in War -POJ3114Tarjan缩点+SPFA

    Countries in War Time Limit: 1000MS Memory Limit: 65536K Description In the year 2050, after differe ...

  6. 【转】如何查看当前Open的Cursor

    遇到错误:A cursor with thename ' ' already exists,想要看是什么代码导致的.找到下面几种方法. --测试声明Cursor并且打开 DECLARE vend_cu ...

  7. Go语言语法汇总(转)

    Go语言语法汇总 分类: 技术2013-09-16 14:21 3007人阅读 评论(0) 收藏 举报 go语言golang并发语法   目录(?)[+]   最近看了看GoLang,把Go语言的语法 ...

  8. Hibernate(开放源代码的对象关系映射框架)

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自 ...

  9. Windows安装Scrapy遇坑解决办

    PS: Windows真心不适合开发.且行且珍惜.... 坑: error: Setup script exited with error: Microsoft Visual C++ 9.0 is r ...

  10. 关于Struts、hibernate、spring三大框架详解。

    struts 控制用的 hibernate 操作数据库的 spring 用解耦的 Struts . spring . Hibernate 在各层的作用 1 ) struts 负责 web 层 . Ac ...