java课后思考问题(八)
1.请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识。
(1)import javax.swing.*;
class AboutException {
public static void main(String[] a)
{
int i=1, j=0, k;
k=i/j;
try
{
k = i/j; // Causes division-by-zero exception
throw new Exception("Hello.Exception!");
}
catch ( ArithmeticException e)
{
System.out.println("被0除. "+ e.getMessage());
}
catch (Exception e)
{
if (e instanceof ArithmeticException)
System.out.println("被0除");
else
{
System.out.println(e.getMessage());
}
}
finally
{
JOptionPane.showConfirmDialog(null,"OK");
}
}
}

(2)在java中捕获异常的语句为:
Try{
//可能发生运行错误的代码;
}
catch(异常类型 异常对象引用){
//用于处理异常的代码
}
finally{
//用于“善后” 的代码
}
(3)使用Java异常处理机制
当异常发生时,程序控制流程由try语句块跳转到catch语句块;
不管是否有异常发生,finally语句块中的语句始终保证被执行;
如果没有提供合适的异常处理代码,JVM将会结束掉整个应用程序。
(4)Java中的异常分类
Throwable类有两个直接子类:
Exception:出现的问题是可以被捕获的;
Error:系统错误,通常由JVM处理。
捕获的异常又可以分为两类:
(1)Check异常:直接派生自Exception的异常类,必须被捕获或再次声明抛出
(2)Runtime异常:派生自RuntimeException的异常类。使用throw语句可以随时抛出这种异常对象:
3.可以使用javap去反汇编两个示例程序的.class文件(一个是AboutException.class,另一个是ThrowDemo.class),从中你会有所发现的。




JVM在具体实现这两个指令时,采用了不同的处理策略,导致两段代码运行时得到不同的结果。
4.阅读以下代码(CatchWho.java),写出程序运行结果:




5.请先阅读 EmbedFinally.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) {
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");
}
}
}
原因:当有多个嵌套的try…catch…finally时,异常在不同位置被接受,可能会导致异常下面的finally语句块执行顺序。不管是否有异常发生,finally语句块中的语句始终保证被执行。
6.finally语句块一定会执行吗?
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)可以终止程序。
6.依据对本讲多个示例程序的分析,请自行归纳总结出Java多层嵌套异常处理的基本流程。
基本过程是用try语句块包住要监视的语句,如果在try语句块内出现异常,则异常会被抛出,你的代码在catch语句块中可以捕获到这个异常并做处理;还有以部分系统生成的异常在Java运行时自动抛出。你也可以通过throws关键字在方法上声明该方法要抛出异常,然后在方法内部通过throw抛出异常对象。finally语句块会在方法执行return之前执行。
7.编写一个程序,此程序在运行时要求用户输入一个 整数,代表某门课的考试成绩,程序接着给出“不及格”、“及格”、“中”、“良”、“优”的结论。
import java.io.*;
import java.util.Scanner;
public class Score {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String grade,scor;
double score;
try {
System.out.println("请输入你的成绩");
scor=scanner.next();
score=Double.parseDouble(scor);
assert score>=0 &&score<=100:"输入的成绩必须是0到100之间";
if(score<60) {
grade="不及格";
}
else if(score<70) {
grade="及格";
}
else if(score<85) {
grade="中";
}
else if(score<90) {
grade="良";
}
else {
grade="优";
}
System.out.println("等级为"+grade);
} catch(NumberFormatException e) {
System.out.println("输入必须为数字");
}
}
}
结果截图:
(1)输入0到100内的整数

(2)输入0到100内的小数

(3)输入不是数字的其他字符

(4)输入负数

(5)输入大于100的数

java课后思考问题(八)的更多相关文章
- java课后思考问题(一)
1.一个Java类文件中真的只能有一个共有类吗? 一个Java类文件中只能有一个公有类 2.请使用Eclipse或javac检测一下以下代码,有错吗? 在Java中,可以将一个类定义在另一个类里面或者 ...
- java课后思考问题(二)
1.编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. import java.math.BigInteger; public class Suijishu public stati ...
- java课后思考问题(七)
1.继承条件下的构造方法调用 package parent;class Grandparent { public Grandparent() { System.out.println("Gr ...
- # 20155337 2016-2017-2 《Java程序设计》第八周学习总结
20155337 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 第14章 NIO与NIO2 NIO简介 NIO使用频道来衔接数据结点,在处理数据时,NIO可 ...
- 20155319 2016-2017-2 《Java程序设计》第八周学习总结
20155319 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 NIO与NIO2 - NIO使用频道(channel)来衔接数据节点 - read()将Re ...
- 20155312 2016-2017-2 《Java程序设计》第八周学习总结
20155312 2016-2017-2 <Java程序设计>第八周学习总结 课堂内容总结 学习模式 游乐园模式-荒野求生模式 学习方法 以代码为中心->遇到不会的类和方法(参数等) ...
- 20155216 2016-2017-2 《Java程序设计》第八周学习总结
20155216 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 认识NIO Java NIO 由以下几个核心部分组成: Channels Buffers S ...
- 20155227 2016-2017-2 《Java程序设计》第八周学习总结
20155227 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 NIO与NIO2 NIO即New IO.java从JDK1.4开始提供了NIO,在JAVA ...
- 20155306 2016-2017-2 《Java程序设计》第八周学习总结
20155306 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 第十五章 通用API 15.1 日志 java.util.loggging包提供了日志功能相 ...
随机推荐
- tensorflow实现svm iris二分类——本质上在使用梯度下降法求解线性回归(loss是定制的而已)
iris二分类 # Linear Support Vector Machine: Soft Margin # ---------------------------------- # # This f ...
- arm-linux-gcc4.4.3编译busybox-1.25.0
系统环境: 1.操作系统:Ubuntu16.04 2.交叉编译工具链:arm-linux-gcc4.4.3 3.busybox源码包:busybox-1.25.0 一.修改Makefile配置 首先解 ...
- BZOJ1453:[WC]Dface双面棋盘
浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:https://lydsy.com/JudgeOnline/problem. ...
- css 中visibility:hidden和display:none有什么区别呢
<div style="width:100px;height:100px;background:red;visibility:hidden"></div>/ ...
- qt 安装编译
项目编译的时候提示 cannot find -lGL sudo apt-get install libgl1-mesa-dev
- <正则吃饺子> :关于Collections中 比较器的简单使用
在线文档地址: http://tool.oschina.net/apidocs/apidoc?api=jdk-zh sort public static <T extends Comparabl ...
- <正则吃饺子> :关于redis集群的测试demo
redis集群的测试demo,来自网络,具体不详. 1.下载地址,如下:http://download.csdn.net/detail/u012543819/9729291 2.项目是java项目,结 ...
- Redis使用的相关问题
Redis用那些数据结构? 字符串类型String 字典Hash 列表List 集合Set 有序集合SortedSet HyperLogLog.Geo.Pub/Sub Redis Module.Blo ...
- C#阵列Array排序
五一假期回来,练习一下C#的一些知识,了解一下排序. 练习数据: , , , , , , , , }; 写一个类: using System; using System.Collections.Gen ...
- IDEA Maven Mybatis generator 自动生成代码(实例讲解)(转)
IDEA Maven Mybatis generator 自动生成代码(实例讲解) MyBatis Generator • 简称MBG,是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的 ...