华中农业大学java考试试卷_JAVA异常处理

本文详细探讨了JAVA中Error类与Exception类的区别,异常处理的两种方式——抛出和捕获,并通过示例展示了RuntimeException类的五个子类异常:NullPointerException、EmptyStackException、IndexOutOfBoundsException、ClassCastException和ArithmeticException的处理。同时,介绍了如何自定义异常类及其应用场景。
摘要由CSDN通过智能技术生成

本篇博客主要讲述一下问题:

1、JAVA Error类与Exception类的区别

2、异常处理的两种方式,并举例说明

3、选取RuntimeException类的五个子类,编写抛出并捕获上述子类异常的程序

4、自定义一个异常类,并在某场景下抛出该异常对象

---------------------------------------------------------------------------------------------------------------------

问题1:

Error类是所有错误类的祖先, Exception类是所有异常类的祖先

区别:Error类不是程序需要捕获和处理的,当Error发生时,程序将会停止。

而异常发生时,虚拟机系统根据异常的类型,产生相应的异常对象,程序应对这些异常对象进行相应的处理。

问题2:

异常处理的两种方式:抛出和捕获处理

抛出分为隐式抛出和显示抛出,下面举例说明。

隐式抛出:

packageFirst.unit4;import java.util.*;public classException {public static voidmain(String[] args) {

Stack s=newStack();

Object ob=s.pop();

String foo=args[1];

System.out.println("foo = "+foo);

}

}

上述代码会发生以下异常:

700fbd2b7dcac46e81ed54c3d1a58a21.png

265833f8fa79ee1352eaea845884645c.png

上述代码发生隐式异常,但编译通过。

显示抛出:

packageFirst.unit4;import java.io.*;public classException {public static void main(String[] args)throwsIOException {

BufferedReader in=new BufferedReader(newInputStreamReader(System.in));

String c1;

String[] e=new String[10];int i=0;while(i<10){

c1=in.readLine();

e[i]=c1;

i++;

}

}

}

上述代码如果不加 “throws IOException”,程序不能编译通过。

故隐式抛出不写抛出可以正常编译,而显示抛出不写抛出不可以正常编译

问题3:RuntimeException类(运行时异常类)的部分子类:

1、NullPointerException

2、EmptyStackException

3、IndexOutOfBoundsException

4、ClassCastException

5、ArithmeticException

NullPointerException example:

classException {public static voidmain(String[] args) {

Run r1=new Run(1, 2, 3);

Run r2=null;

r1.print();

r2.print();

}

}classRun{private inta;private intb;private intc;public Run(int a, int b, intc) {this.a=a;this.b=b;this.c=c;

}public voidprint() {

System.out.println("a="+a+" b="+b+" c="+c);

}

}

上述代码运行后会发生空指针异常,如下图:

7ffd5fd016b49064a8f3459f9279fa6a.png

发生异常的原因是引用r2是空引用,不指向任何一个对象,故调用的方法为空方法,会发生空指针异常。

改正方法:1、让引用r2指向一个具体对象

2、捕捉异常,加入如下所示代码即可

try{

r2.print();

}catch(NullPointerException r) {

System.out.println("NullPointerException");

}

EmptyStackException example:

importjava.util.Stack;classException {public static voidmain(String[] args) {

Stack s=newStack();

Object ob=s.pop();

}

}

上述代码运行后会发生以下异常:

fe66997808a4493988d3fabbb808b376.png

改正方法:

importjava.util.Stack;classException {public static voidmain(String[] args) {

Stack s=newStack();

Object ob=s.push(s);

ob=s.pop();

}

}

IndexOutOfBoundsException example:

classException {public static voidmain(String[] args) {int[] array= {1,2,3,4,5,6,7,8,9};int a=array[-1];

System.out.println("a="+a);

}

}

上述代码运行后会发生如下异常:

3e70dcf934307d261ee08ae59a773d1f.png

改正方法:访问数组下标应该在0~arrary.length之间。

ClassCastException example:

abstract classAnimal {abstract voidkind();

}class Tiger extendsAnimal {public voidkind() {

System.out.println("肉食");

}

}class Horse extendsAnimal {public voidkind() {

System.out.println("草食");

}

}classException {public static voidmain(String[] args) {

Animal a= newTiger();

a.kind();

Tiger t=(Tiger) a;

t.kind();

Horse h=(Horse) a;

h.kind();

}

}

上述代码运行后,会发生以下错误:

45c72a7091a40fd4e79563ddb7b1dae1.png

改正方法:运用instanceof运算符

if (a instanceofTiger) {

Tiger t=(Tiger) a;

t.kind();

}else if (a instanceofHorse) {

Horse h=(Horse) a;

h.kind();

}

加入上述语句后,不会再发生异常

ArithmeticException example:

classExcept{public static voidmain(String[] args) {inta, b, c;

a=6; b=0; c=0;

c=a/b;

System.out.println("c="+c);

}

}

上述代码运行后 ,有如下错误:

b5141133ee7d80f8298ba9c478c234f6.png

改正方法:使用“try catch"语句捕捉异常。

try{

c=a/b;

}catch(Exception e) {

System.out.println("ArithmeticException");

}

问题4:

public class SelfGenerateException extendsException{

SelfGenerateException(String msg){super(msg);

}static void throwOne() throwsSelfGenerateException{int a = 1;if (a==1){throw new SelfGenerateException("a为1");

}

}public static voidmain(String args[]){try{

throwOne();

}catch(SelfGenerateException e){

e.printStackTrace();

}

}

}

程序说明:1、“throw new 异常类”的作用往往是根据程序的需要而定义流程的跳转。

2、“throw new 异常类”只是主动产生异常对象,至于这个对象如何处理,

需要看当时的环境——声明抛出还是捕获处理

(注:对于问题4,由于本人(小白)也没有看懂,只能给出书中的例子。)

以上就是我对JAVA异常处理的一些理解,如有错误,欢迎指正。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值