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的数
转载于:https://www.cnblogs.com/wl2017/p/7845238.html
java课后思考问题(八)相关推荐
- 《Java技术》第八次作业
<Java技术>第八次作业 (一)学习总结 1.用思维导图对本周的学习内容进行总结. 2.通过实验内容中的具体实例说明在执行executeUpdate()方法和executeQuery() ...
- 20175227张雪莹 2018-2019-2 《Java程序设计》第八周学习总结
20175227张雪莹 2018-2019-2 <Java程序设计>第八周学习总结 教材学习内容总结 第十五章 泛型与集合框架 泛型:主要目的是可以建立具有类型安全的集合框架,如链表.散列 ...
- 20155305乔磊2016-2017-2《Java程序设计》第八周学习总结
20155305乔磊2016-2017-2<Java程序设计>第八周学习总结 教材学习内容总结 通用API 日志API 1.java.util.logging包提供了日志功能相关类与接口, ...
- JAVA之旅(八)——多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例...
JAVA之旅(八)--多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例 一.多态 我们今天又要学习一个新的概念了,就是多态,它是面向对象的第三个特征,何谓多态 ...
- 【Java文件操作(八)】将控制台输出重定向到txt文件
我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java文件 ...
- Java学习系列(十八)Java面向对象之基于UDP协议的网络通信
UDP协议:无需建立虚拟链路,协议是不可靠的. A节点以DatagramSocket发送数据包,数据报携带数据,数据报上还有目的目地地址,大部分情况下,数据报可以抵达:但有些情况下,数据报可能会丢失 ...
- Java内存模型 - 同步八种操作
Java 内存模型 - 同步操作与规则 Java内存模型 - 同步八种操作 锁定(lock): 作用于主内存中的变量,将他标记为一个线程独享变量. 通常意义上的上锁,就是一个线程正在使用时,其他线程必 ...
- JAVA中的多线程(八):线程的优先级和yield方法
JAVA中的多线程(八):线程的优先级和yield方法 优先级代表着抢资源的频率 所有线程默认优先级是5 yield()临时释放线程的执行权 1 class Demo implements Runna ...
- 20155327《Java程序设计》第八周学习总结
20155327<Java程序设计>第八周学习总结 教材学习内容总结 第12章 进程与线程 进程的完成过程:代码加载.执行至执行完毕 线程:一个进程由多个线程组成. 线程的完成过程:自身的 ...
最新文章
- 马斯克“口无遮拦”发推特又挨批,被指无视法院命令
- centos7最小安装没有 ifconfig netstat 命令
- 破解时的数据约束性和winhex操作失败
- 数据结构实验之串一:KMP简单应用
- Eclipse Server runtime设置里找不到apache tomcat的处理方法
- 论文排版怕翻车?这个排版神器赶紧用起来!
- ssh免密登陆失败原因总结(Linux)
- 信息学奥赛一本通 1125:矩阵乘法 | OpenJudge NOI 1.8 08
- 【分享】Java软件架构师所要需的东西 (希望对很多迷茫的朋友指个路)
- c语言,求素数个数,关于求素数个数的话题
- 单片机TM4C123学习(一):GPIO模块的应用
- 个人作业week7——前端开发感想总结
- GitHub 开发者页面迁至 github.io
- 2012第二届GIS制图大赛——赛前培训资料(上篇)
- 在线html游戏翻译,怎么把整个英文网页游戏翻译成中文
- 多元函数求极值中的a_二元函数求极值
- 《线粒体疾病的遗传》学习笔记
- Finished, saving caches
- 这届年轻人追热点、爱国货 2021年购物车里藏着“青年情绪”
- 部署搭建DNS服务器