好久没更新了,在准备期末考,忘记更新了,今日就直接出代码,有不懂的可以私信我
前面是重点和难点,如果想搞明白的可以先看前面的
如果了解单纯想看代码请移驾——》
一、实验目的
- 熟悉异常的基本概念。
- 掌握异常的抛出方法、处理方式(重点)。
- 掌握自定义异常(重点、难点)。
二、实验原理及说明
1、异常的处理方式:
(1)使用try…catch…finally结构对异常进行捕获和处理
(2)通过throws和throw抛出异常
(3)以上两种方法的综合(经常使用)
2、try…catch…finally结构
try{
// 可能会抛出特定异常的代码段1; 2; 3;
}catch(异常类型1子 引用1){
// 如果引用1 被抛出,则执行这段代码4;
}catch(异常类型2父 引用2){
//如果另外的异常引用2被抛出,则执行这段代码5;
}
[finally{
//无条件执行的语句6;//一定会执行!!
}]
各个catch参数中的异常类都是Exception的已存在的某个子类,
表明try部分可能发生的异常
3、throw语句的格式如下:
throw new 异常类名(信息)
异常类名可以是系统异常类名,也可以是自定义的异常类名
“信息”是可选信息。若提供了信息,toString()方法的返回值中将增加该信息的内容
注意:一般情况,若想要自行丢出异常,可以使用throw关键字
4、与throw语句不同,throws选项仅需列出异常的类型名。
函数头 throws 异常类型名 {函数体}//声明
throw new 异常类型(信息);
5、自定义异常类可以通过继承Exception类来继承。格式如下:
class 自定义异常类名 extends Exception
{
类体
}
6、一个方法在声明时可以使用throws关键字声明要产生的若干个异常,并在该方法的方法体中具体给出产生异常的操作,即用相应的异常类创建对象,并使用throw关键字抛出该异常对象,导致该方法结束执行。程序必须在try catch块语句中调用能发生异常的方法,其中catch的作用就是捕获throw方法抛出的异常对象
三、实验内容
1、按要求完成下题:
编写OwnException类,要求继承Exception类;
编写OwnExceptionSource类,要求包含方法a(),a()抛出OwnException;
编写OwnExceptionHandler类,要求包含main(),在main()中调用OwnExceptionSource类的a(),并处理相关异常。
读取一个文本文件,并显示该文本的内容,同时写到另外一个文本文件中。
提示:使用File类进行文件或目录的操作。
2、编写DivisionByZero类,包含:
① division():要求执行10/0操作,并使用异常处理机制处理产生的异常;
② main():调用division();
③ 修改division():执行10/0不变,但不在方法中处理产生的异常,改将异常抛出;
④ 修改main():调用division()并处理其抛出的异常。
代码1
package test07;
public class OwnException extends Exception{
public OwnException() {
this("ownexception");
}
public OwnException(String msg) {
super(msg);
}
}
---------------------------------------
package test07;
public class OwnExceptionHandler {
public static void main(String[] args) {
OwnExceptionSource es=new OwnExceptionSource();
try{
es.a();
System.out.println("try");
}
catch(Exception e){
System.out.println("抱歉,这里是catch,抛出自定义的问题!");
e.printStackTrace();
}
finally {
System.out.println("欢迎使用,这里是fianlly!");
}
System.out.println("after");
}
}
----------------------------------------
package test07;
public class OwnExceptionSource {
public void a() throws OwnException{
throw new OwnException();
}
}
运行截图
代码2
package test07;
import java.util.Scanner;
public class DivisionByZero {
public static void main(String[] args) {
new DivisionByZero().Division();
System.out.println("算数运算结束。");
}
public static void Division() {
System.out.println("请输入a的值");
Scanner scanner=new Scanner(System.in);
int c=scanner.nextInt();
int a=c;
System.out.println("请输入b的值");
Scanner scanner1=new Scanner(System.in);
int d=scanner1.nextInt();
int b=d;
try{
// int x, y;
// x = 10;
// y = 0;
// System.out.println(x / y);
System.out.println(a+"/"+b+"="+(a/b));
}catch(ArithmeticException e){
System.out.println("抱歉,这里是catch,算数运算有问题!");
}finally {
System.out.println("欢迎使用,这里是fianlly!");
}
}
}