实验六 Java异常
- 实验内容
- 编写一个类,在其main()方法中创建一个一维数组,在try字句中访问数组元素,使其产生ArrayIndexOutOfBoundsException异常。在catch子句里捕获此异常对象,并且打印“数组越界”信息,加一个finally子句,打印一条信息以证明这里确实得到了执行。
- 自定义异常类的使用
实验代码:
public class dome{ public static void main(string args[]){ System.out.println("开始计算") int q[]={1,5,9}; try { int num=a[4]; //赋值 System.out.println("输出结果:"+num); } catch(ArrayIndexOutOfBoundsException e) { System.out.println("数组越界:"+e); } 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 Googs { private boolean Danger; private String name; private Object getName; public void Goods(boolean Danger,String name) { this.Danger=Danger; this.name=name; } public boolean dangerous() { return Danger; } public boolean isDanger() { return Danger; } public void setDanger(boolean danger) { Danger = danger; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Object getGetName() { return getName; } public void setGetName(Object getName) { this.getName = getName; } } package 实验八; import java.util.ArrayList; public class Machine { public Machine(ArrayList arrayList) { } public void checkBag(Googs goods) throws DangerousException{ if(goods.dangerous()) throw new DangerousException(); else System.out.println(goods.getName()+"不是危险物品"); } public void addDangerList(String string) { } } package 实验八; public class DangerousException extends Exception { public void toShow() { System.out.println("危险物品"); } } package 实验八; import java.util.ArrayList; public class Test { public static void main(String args[]) { Machine machine = new Machine(new ArrayList()); String a[]={"汽油","管制刀具","枪","TNT"}; machine.addDangerList("汽油"); machine.addDangerList("管制刀具"); machine.addDangerList("枪"); machine.addDangerList("TNT"); Googs goods=new Googs(); for(int i=0;i<a.length;i++) { goods.setName(a[i]); if(a[i].equals("汽油")||a[i].equals("管制刀具")||a[i].equals("枪")) { goods.dangerous(); System.out.println(a[i]+"是危险品"); } else goods.dangerous(); } try { machine.checkBag(goods); }catch(DangerousException e) { e.toShow(); } } }
实验截图:
总结:这周的作业,挺好写的,第一题就是处理异常的直接处理,第二题运用了延迟处理异常
异常的总结:
不处理:仅在runtimeexcption中,可以不处理
直接处理:
异常的捕获,最大的是Excption,而Throwablle不仅仅只有excption还有error,而error类不需要程序处理
所以方便一点直接用Excption捕获全部异常
延迟处理:throws与throw关键字.
throws抛出异常,而交给方法的调用处进行处理
throw自己抛出异常,一定要处理