java动手动脑——异常处理

Java07异常处理动手动脑

  1. 异常处理的基本知识

Java异常处理通过5个关键字try、catch、throw、throws、finally进行管理。基本过程是用try语句块包住要监视的语句,如果在try语句块内出现异常,则异常会被抛出,你的代码在catch语句块中可以捕获到这个异常并做处理;还有以部分系统生成的异常在Java运行时自动抛出。你也可以通过throws关键字在方法上声明该方法要抛出异常,然后在方法内部通过throw抛出异常对象。finally语句块会在方法执行return之前执行,一般结构如下:

try{

程序代码

}catch(异常类型1 异常的变量名1){

程序代码

}catch(异常类型2 异常的变量名2){

程序代码

}finally{

程序代码

}

2. 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");

}

}

}

运行结果:ArrayIndexOutOfBoundsException/内层try-catch

发生ArithmeticException

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");

}

}

}

运行结果:ArrayIndexOutOfBoundsException/外层try-catch

3. 阅读 EmbedFinally.java示例,再运行它,观察其输出并进行总结。

多个catch块时候,Java虚拟机会匹配其中一个异常类或其子类,就执行这个catch块,而不会再执行别的catch块。finally语句在任何情况下都必须执行的代码,这样可以保证一些在任何情况下都必须执行代码的可靠性。

4. finally语句块一定会执行吗?

并不一定,如果提前结束程序,finally语句就不会被执行,如程序中用System.exit(0);提前结束了程序。

5.编写一个程序,此程序在运行时要求用户输入一个   整数,代表某门课的考试成绩,程序接着给出“不及格”、“及格”、“中”、“良”、“优”的结论。

 

import
java.util.*;

class AException
extends Exception

{

String
a;

AException()

{

a="输入有误";

}

public
String toString()

{

return a;

}

}

public class A

{

public static void main(String args[])

{

while(1>0)

{

Scanner sc = new Scanner(System.in);

System.out.println("请输入考试成绩(0~100):");

try

{

String s = sc.nextLine();

getnum(s);

}

catch (AException e)

{

System.out.println(e.toString());

}

}

}

private static void getnum(String s) throws AException

{

for (int i = s.length()-1; i >= 0;i--)

{

int chr = s.charAt(i);

if (chr < 48 || chr > 57)

{

throw new AException();

}

}

double num = Double.parseDouble(s);

if (num < 0 || num> 100)

{

throw new AException();

}

if (num>= 0 && num<= 60)

{

System.out.print("不及格\n");

}

else if (num >= 60 && num <= 70)

{

System.out.print("及格\n");

}

else if (num>= 70 && num<= 80)

{

System.out.print("中\n");

}

else if (num >= 80 && num <= 90)

{

System.out.print("良\n");

}

else

{

System.out.print("优\n");

}

}

}

时间: 2024-11-16 04:17:34

java动手动脑——异常处理的相关文章

java动手动脑异常处理

实验任务一:多层的异常捕获-1 1.实验内容:阅读(CatchWho.java),写出程序运行结果: public class CatchWho{ public static void main(String[] args) { try { try { throw new ArrayIndexOutOfBoundsException(); } catch(ArrayIndexOutOfBoundsException e) { System.out.println(  "ArrayIndexOut

Java动手动脑07

(1)现在有三个类: class Mammal{} class Dog extends Mammal {} class Cat extends Mammal{} 针对每个类定义三个变量并进行初始化 Mammal m=null ; Dog d=new Dog(); Cat c=new Cat(); 下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么? m=d; d=m; d=(Dog)m; d=c; c=(Cat)m; 编译错误 d=m;d=c; 不正确 子类对象可以直接赋给基类

java动手动脑08

一.动手动脑 1)源代码: public class ParentChildTest { public static void main(String[] args) { Parent parent=new Parent(); parent.printValue(); Child child=new Child(); child.printValue(); parent=child; parent.printValue(); parent.myValue++; parent.printValue

java 动手动脑7

---恢复内容开始--- 一.动手动脑:多层的异常捕获-1 阅读以下代码(CatchWho.java),写出程序运行结果: ArrayIndexOutOfBoundsException/内层try-catch 发生ArithmeticException 1.源码: public class CatchWho { public static void main(String[] args) { try { try { throw new ArrayIndexOutOfBoundsException

java动手动脑和课后实验型问题String类型

1.请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? true true false 总结: 使用new关键字创建字符串对象时, 每次申请新开辟一个地址空间,存储的地址空间不一样(对象不同),string类型下hello是同一个对象,其内容和地址都相容. 2. public class StringEquals { /** * @param args the command line arguments */ public stati

Java动手动脑第四讲课堂作业

动手动脑1 完全"手写代码实现"随机数生成 纯随机数发生器 Modulus=231-1=int.MaxValue Multiplier=75=16807 C=0 当显示过231-2个数之后,才可能重复. 编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. public class suiji { private static final int N = 200; private static final int LEFT = 40; private static fi

java动手动脑和课后实验型问题第四讲

1.完全"手写代码实现"随机数生成 动手动脑: 编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. Modulus=231-1=int.MaxValue Multiplier=75=16807 C=0 当显示过231-2个数之后,才可能重复. 编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. public class suiji { private static final int N = 200; private static final int

java动手动脑

public class EnumTest { public static void main(String[] args) { Size s=Size.SMALL; Size t=Size.LARGE; //s和t引用同一个对象? System.out.println(s==t); // //是原始数据类型吗? System.out.println(s.getClass().isPrimitive()); //从字符串中转换 Size u=Size.valueOf("SMALL");

java动手动脑多态

实验任务一:阅读并运行一下代码 public class ParentChildTest { public static void main(String[] args) { Parent parent=new Parent(); parent.printValue(); Child child=new Child(); child.printValue(); parent=child; parent.printValue(); parent.myValue++; parent.printVal