JAVA语法基础作业——动手动脑以及课后实验性问题 (八)
一.动手动脑 运行AboutException.java示例,了解Java中实现异常处理的基础知识。
1)源代码
import javax.swing.*;
class AboutException {
public static void main(String[] a)
{
double 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 "+k);
//JOptionPane.showInternalConfirmDialog(null, k);
}
}
}
2)结果截图
3)结果分析
Try{
//可能发生运行错误的代码;
}
catch(异常类型 异常对象引用){
//用于处理异常的代码
}
finally{
//用于“善后” 的代码
}
Java 中所有可捕获的异常都派生自 Exception 类。
二.使用Java异常处理机制
•把可能会发生错误的代码放进try语句块中。
•当程序检测到出现了一个错误时会抛出一个异常对象。异常处理代码会捕获并处理这个错误。catch语句块中的代码用于处理错误。
•当异常发生时,程序控制流程由try语句块跳转到catch语句块。
•不管是否有异常发生,finally语句块中的语句始终保证被执行。
•如果没有提供合适的异常处理代码,JVM将会结束掉整个应用程序。
三.动手动脑 多层的异常捕获-1
1)源代码
public class CatchWho {
public static void main(String[] args) {
try {
try {
throw new ArrayIndexOutOfBoundsException(); //数组下标越界
}
catch(ArrayIndexOutOfBoundsException e) {
System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch");
}
throw new ArithmeticException(); //算术异常
}
catch(ArithmeticException e) { //算数异常
System.out.println("发生ArithmeticException");
}
catch(ArrayIndexOutOfBoundsException e) { //数组下标越界
System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch");
}
}
}
2)结果截图

3)结果分析
抛出两次异常,第一次处理完毕后,处理第二次。
四.动手动脑 多层的异常捕获-2
1)源代码
public class CatchWho2 {
public static void main(String[] args) {
try {
try {
throw new ArrayIndexOutOfBoundsException();
}
catch(ArithmeticException e) {
System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch");
}
throw new ArithmeticException();
}
catch(ArithmeticException e) {
System.out.println("发生ArithmeticException");
}
catch(ArrayIndexOutOfBoundsException e) { //数组下标越界
System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch");
}
}
}
2)结果截图
3)结果分析
一个异常匹配结束后,才能执行下一个异常,系统不能累积处理异常。
五.动手动脑 当有多个嵌套的try…catch…finally时,要特别注意finally的执行时机。
1)源代码
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");
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");
}
}
}
2)结果截图

3)结果分析
当有多层嵌套的finally时,异常在不同的层次抛出 ,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。
六.动手动脑 finally语句块一定会执行吗?
1)源程序
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");
}
}
}
2)结果截图
3)结果分析
不一定。因为当运行 System.exit(0);时,终止了JAVA虚拟机,导致不能执行finally的内容。
七.动手动脑
编写一个程序,此程序在运行时要求用户输入一个 整数,代表某门课的考试成绩,程序接着给出“不及格”、“及格”、“中”、“良”、“优”的结论。
要求程序必须具备足够的健壮性,不管用户输入什 么样的内容,都不会崩溃。
import java.util.*;
public class Prograss {
public static void main(String[] args) { Scanner sc=new Scanner(System.in);
String pro;
System.out.println("请输入成绩:");
while(true){
try{
pro=sc.nextLine();
if(pro.matches("\\D*")){
throw new InException("输入有误!不是的不是数字!");
}
else{
int proo=Integer.parseInt(pro);
System.out.print("输入正确!");
judge(proo);
break;
}
}
catch(InException e){
System.out.print("请重新输入:");
}
}
sc.close();
} public static void judge(int pro){
if(pro>=0&&pro<60)
System.out.println("成绩不合格!");
else if(pro<70)
System.out.println("成绩合格!");
else if(pro<80)
System.out.println("成绩中!");
else if(pro<90)
System.out.println("成绩良!");
else if(pro<=100)
System.out.println("成绩优!");
else
System.out.println("输入成绩不符");
}
} class InException extends Exception{//
public InException(String msg){
super(msg);
}
}
JAVA语法基础作业——动手动脑以及课后实验性问题 (八)的更多相关文章
- JAVA 数组作业——动手动脑以及课后实验性问题
JAVA课后作业——动手动脑 一:阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结,然后与下页幻灯片所讲的内容进行对照. 1.源代码 // PassArray.java // ...
- JAVA 多态和异常处理作业——动手动脑以及课后实验性问题
1. 阅读以下代码(CatchWho.java),写出程序运行结果: 1) 源代码 public class CatchWho { public static void main(String[] ...
- JAVA 接口与继承作业——动手动脑以及课后实验性问题
一.继承条件下的构造方法调用 运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构 ...
- JAVA类与对象作业——动手动脑以及课后实验性问题
一: 1.源代码 //MAO2015.10.6 //foo class Foo { int value; public Foo(int initValue) { value = initValue; ...
- JAVA String作业——动手动脑以及课后实验性问题
一:如何解释这样的输出结果?从中你能总结出什么?1.源码 //mao2015.10.20 //==的两个分辨 //对原始数据而言 //对引用类型变量 public class StringPool { ...
- 00JAVA语法基础_动手动脑
1.仔细阅读示例: EnumTest.java,运行它,分析运行结果? 枚举类型的使用是借助ENUM这样一个类,这个类是JAVA枚举类型的公共基本类.枚举目的就是要让某个变量的取值只能为若干固定值中的 ...
- 2019-9-16 java上课知识整理总结(动手动脑,课后实验)
java上课知识整理总结(动手动脑,课后实验) 一,课堂测试 1,题目:课堂测试:像二柱子那样,花二十分钟写一个能自动生成30道小学四则运算题目的 “软件” 要求:(1)题目避免重复: (2)可定制( ...
- Java语法基础(1)
Java语法基础(1) 1. Java是一门跨平台(也就是跨操作系统)语言,其跨平台的本质是借助java虚拟机 (也就是JVM(java virtual mechinal))进行跨平台使用. ...
- java语法基础--动手动脑问题及课后实验问题
---恢复内容开始--- 动手动脑: 1:仔细阅读示例:EnumTest.java,运行它,分析运行结果 结果 :枚举类型是引用类型!枚举类型不属于原始数据类型,它的每个具体指都引用一个特定的对象.相 ...
随机推荐
- grunt快速入门
快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...
- UOJ #58 【WC2013】 糖果公园
题目链接:糖果公园 听说这是一道树上莫队的入门题,于是我就去写了--顺便复习了一下莫队的各种姿势. 首先,我们要在树上使用莫队,那么就需要像序列一样给树分块.这个分块的过程就是王室联邦这道题(vfle ...
- [LeetCode] Unique Substrings in Wraparound String 封装字符串中的独特子字符串
Consider the string s to be the infinite wraparound string of "abcdefghijklmnopqrstuvwxyz" ...
- csv表格处理(上)-- JS 与 PHP 协作导入导出
CSV简介 在开发后台管理系统的时候,几乎无可避免的会遇到需要导入导出Excel表格的需求.csv也是表格的一种,其中文名为“逗号分隔符文件”.在Excel中打开如下图左边所示,在记事本打开如下图右边 ...
- const 引起的BUG
今天白天出现了碰见了一个问题,隐藏得比较深,这里记录一下. 初衷很简单,就是要更改改一个数据库的链接名,这个链接名是放在数据层public const string connDB="conn ...
- DDR相关的低功耗技术之PASR、TCSR、DPD
随着智能机的发展,DDR内存容量越来越大,bank数量越来越多,功耗也越来越大.在不需要的时候关闭部分bank,或者降低自刷新频率,或者进入深度低功耗模式.有三种DDR技术用来降低功耗: PASR(P ...
- STL sort 函数实现详解
作者:fengcc 原创作品 转载请注明出处 前几天阿里电话一面,被问到STL中sort函数的实现.以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的,但听电话另一端面试官的声音,感觉不 ...
- webuploader 谷歌浏览器跨域
今天在本地调试webuploader 的image-upload demo时遇到跨域问题(本地post数据到同事的机器中) 会出现No 'Access-Control-Allow-Origin' he ...
- Less的使用
Less为css预处理器 首先先去下载一个koala编译器软件,然后运行打开 新建一个项目目录,在css文件夹中新建一个后缀为less的文件,然后拉入koala软件中,然后运行 ,你的css文件夹中就 ...
- 3d图片切换(css3帧动画)
效果带抖动翻转隐藏,使用帧动画 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...