Java实验报告
班级 计科一班 学号 20188390 姓名 宋志豪
实验四 类的继承
实验目的
理解异常的基本概念;
掌握异常处理方法及熟悉常见异常的捕获方法。
实验要求
练习捕获异常、声明异常、抛出异常的方法、熟悉try和catch子句的使用。
掌握自定义异常类的方法。
实验内容
编写一个类,在其main()方法中创建一个一维数组,在try字句中访问数组元素,使其产生ArrayIndexOutOfBoundsException异常。在catch子句里捕获此异常对象,并且打印"数组越界"信息,加一个finally子句,打印一条信息以证明这里确实得到了执行。
自定义异常类的使用
车站检查危险品的设备,如果发现危险品会发出警告。编程模拟设备发现危险品。
实验代码:
package 测试; import java.util.Scanner; public class Main { public static void main(String[] args){ char ch[]={'我','她'}; try{ for(int i=0;i<10;i++){ System.out.println("ch[i]="+ch[i]); } } catch (ArrayIndexOutOfBoundsException aE){ aE.printStackTrace(); System.out.println("数组越界出现异常"); } finally{ System.out.println("程序完成执行"); } } }
实验截图:
技术方案:
编写一个Exgeption的子类DangerException,该子类可以创建异常对象,该异常对象调用toShow()方法输出"危险物品"。编写一个Machine类,该类的方法checkBag(Goods goods)当发现参数goods是危险品时(goods的isDanger属性是true)将抛出DangerException异常。
程序在主类的main()方法中的try-catch语句的try部分让Machine类的实例调用checkBag(Goods goods)的方法,如果发现危险品就在try-catch语句的catch部分处理危险品。
实验代码
package 自定义异常; public class Goods { String name; public Goods(String name) { super(); this.name = name; } public Goods() { super(); } }
名称的定义
package 自定义异常; public class DangerException extends Exception { public void toShow(){ System.out.println("危险物品!"); } }
在判断完成后输出危险品!的提示
package 自定义异常; import java.util.ArrayList; public class Machine { ArrayList<String> dangerGoods=new ArrayList<String>(); public Machine() { super(); dangerGoods.add("汽油"); dangerGoods.add("易燃物"); dangerGoods.add("刀具"); dangerGoods.add("炸弹"); dangerGoods.add("油漆"); dangerGoods.add("天真"); } public void checkBag(Goods goods) throws DangerException{ try{ if(dangerGoods.indexOf(goods.name)!=-1){ throw new DangerException(); } } catch(DangerException dangerE){ dangerE.toShow(); throw dangerE; } } public void printDangerGoods() { System.out.println("危险品有:"); int i=1; for(String s:dangerGoods ){ System.out.print(i+++"、"); System.out.println(s); } } public void addDangerGoods(String dangerGoods) { this.dangerGoods.add(dangerGoods); System.out.println("加入危险品成功"); } public void deleteDangerGoods(String dangerGoods){ if(this.dangerGoods.indexOf(dangerGoods)==-1){ System.out.println("不存在这个危险品"); } else{ this.dangerGoods.remove(dangerGoods); System.out.println("删除成功"); } } }
加入初始含有的危险品,以及加入新的危险品和删除危险品的操作。
package 自定义异常; import java.util.InputMismatchException; import java.util.Scanner; public class Main { public static void main(String [] args){ Scanner input =new Scanner(System.in); System.out.println("输入1检查危险物品,输入2增加危险物品,输入3删除危险物品。"); Machine machine=new Machine(); int number=1; while(true){ try{ number=input.nextInt(); if(number>3||number<1){ throw new InputMismatchException(); } System.out.println("请输入物品名称:"); Goods goods=new Goods(input.next()); if(number==1){ try{ machine.checkBag(goods); System.out.println("不是危险品"); } catch(DangerException dangerE){ System.out.println("危险品"); } } else if(number==2){ machine.addDangerGoods(goods.name); } else if(number==3){ machine.deleteDangerGoods(goods.name); } } catch(InputMismatchException inputE){ System.out.println("请输入1-3的数字!"); } } } }
实现危险品的判断以及在控制台控制你要进行的操作的选择。
上述各个实现一部分功能,从而实现题目的要求。
实验结果:
本次实验总结
对我来说,这次的实验是一次不小的挑战,还是没能单独完成,借助了网络的力量。
学习总结
(1)包装类
包装类分为两种类型:
1、对象型(Object的直接子类):Boolean、Character(char);
2、数值型(Number的直接子类): Byte、Double、Short、Long、Integer(int)、Float;
(2)字符串与基本数据类型相互转换
字符串转换为基本数据类型
1.、String变为int 类型(Integer类):
public static int parseInt(String s) throwsNumberFormatException
2、 String变为double类型(Double类):
public static double parseDouble(String s) throwsNumberFormatException
3、String变为Boolean类型(Boolean类):
public static boolean parseBoolean(String
(3)基本数据类型转换为字符串
1. 任何数据类型使用了"+"连接空白字符串就变为了字符串类型。 2. 使用String类中提供的valueOf()方法,此方法不产生垃圾。
(4)异常
所有的异常都是从Throwable继承而来的。
1、运行时异常(unchecked exception):继承自java.lang. RuntimeException类
常见的:
ClassCastException(类型转换异常)
IndexOutOfBoundsException(数组越界)
NullPointerException(空指针)
ArrayStoreException(数据存储异常,操作数组时类型不一致)
IO操作的BufferOverflowException异常
网络上搜索到的!!
2、非运行时异常(checked exception):继承自java.lang.Exception类
常见的:
Java.lang.ClassNotFoundException
Java.lang.NoSuchMetodException
java.io.IOException
网络上搜索到的!!
Exception:
定义方法时必须声明所有可能会抛出的exception; 在调用这个方法时,必须捕获它的checked exception,不然就得把它的exception传递下去;exception是从java.lang.Exception类衍生出来的。例如:IOException,SQLException就属于Exception。
处理(用try ..catch..finally)异常类名不会的话可以用API。
而RuntimeExcepetion处理可以随意。其他的Excepetion必须处理。
(5)装箱和拆箱
将一个基本数据类型变成包装类为装箱,将一个包装类变成基本数据类型为拆箱。
装箱范例:
拆箱范例:
(6)多线程
多线程是实现并发机制的一种有效手段。
Java中实现多线程有两种方式,一种是继承Thread类,一种是实现Runnable接口,1.5之后还有一个Callable接口
一个类继承Thread类就称这个类为多线程类,在其中必须覆写run()方法。这个方法为线程的主体。
要正确的启动线程,是不能直接调用run()方法,应该调用从Thread类继承而来的start()方法。
虽然调用的是start()方法,但实际调用的是run()方法的主体。
并且只能调用一次start()方法。
Runnable接口中只提供一个run()方法。
来源:https://www.cnblogs.com/songzhihaoT1/p/11698543.html