实验1 检查危险品
一、实验目的
本实验的目的是让学生掌握使用try-catch语句
二、实验内容
车站检查危险品的设备,如果发现危险品会发出警告。编程模拟设备发现危险品。
编写一个Exception的子类DangerException,该子类可以创建异常对象,该异常对象调用toShow()方法输出“属于危险品”。
编写一个Machine类,该类的方法checkBag(Goods goods)当发现参数goods是危险品时(goods的isDanger属性是true)将抛出DangerException异常。
程序在主类的main()方法中的try-catch语句的try部分让Machine类的实例调用checkBag(Goods goods)方法,如果发现危险品就在try-catch语句的catch部分处理危险品。
三、程序代码
1. class Goods { 2. boolean isDanger; 3. String name; 4. public void setIsDanger(boolean boo) { 5. isDanger = boo;} 6. public boolean isDanger() { 7. return isDanger; 8. } 9. public void setName(String s) { 10. name = s; 11. } 12. public String getName() { 13. return name; 14. } 15. } 16. class DangerException extends Exception { 17. String message; 18. public DangerException() { 19. message = "危险品!"; 20. } 21. public void toShow() { 22. System.out.print(message+" "); 23. } 24. } 25. class Machine { 26. public void checkBag(Goods goods) throws DangerException { 27. if(goods.isDanger()) { 28. DangerException danger=new DangerException(); 29. throw new DangerException();//【代码1】 //抛出danger 30. } 31. else {System.out.print(goods.getName()+"不是危险品! "); 32. } 33. } 34. } 35. public class Check { 36. public static void main(String args[]) { 37. Machine machine = new Machine(); 38. String name[] ={"苹果","炸药","西服","硫酸","手表","硫磺"}; 39. Goods [] goods = new Goods[name.length]; //检查6件货物 40. for(int i= 0;i<name.length;i++) { 41. goods[i] = new Goods(); 42. if(i%2==0) { 43. goods[i].setIsDanger(false); 44. goods[i].setName(name[i]); 45. } 46. else { 47. goods[i].setIsDanger(true); 48. goods[i].setName(name[i]); 49. } 50. } 51. for(int i= 0;i<goods.length;i++) { 52. try { 53. machine.checkBag(goods[i]); 54. System.out.println(goods[i].getName()+"检查通过"); 55. } 56. catch(DangerException e) { 57. e.toShow(); //e调用toShow()方法 58. System.out.println(goods[i].getName()+"被禁止!"); 59. } 60. } 61. } 62. }
四、实验指导
1、try-catch语句可以有几个catch组成,分别处理发生的相应异常。
2、catch参数中的异常类都是Exception的某个子类,表明try部分可能发生的异常,这些子类之间不能有父子关系,否则保留一个含有父类参数的catch即可。
实验2 使用自定义异常
创建一个输入3条边长表示一个三角形的Triangle类,并计算其面积
1. import java.util.Scanner;//导入Scanner类 2. public class SX6 {//主类 3. public static void main(String[] args) {//主方法 4. Scanner val = new Scanner(System.in);//声明一个Scanner对象 5. System.out.println("请输入三角形的3条边长:"); 6. while(true) {//死循环,只有正确输入三角形面积后才能退出 7. double a = val.nextDouble(); 8. double b = val.nextDouble(); 9. double c = val.nextDouble();//读取用户输入的三个边长值 10. try {//创建类是可能会发生异常,故放在try语句块中 11. Triangle t = new Triangle(a,b,c); 12. System.out.println("三角形面积为:"+t.getArea()); 13. break;//结束运行 14. } 15. catch(IllegaTriangleException ex) {//捕获并处理IllegaTriangleException异常 16. System.out.println(ex.toString());//显示异常信息 17. System.out.println("请重新输入:"); 18. } 19. }val.close();//关闭对象 20. }} 21. class IllegaTriangleException extends Exception{ 22. public double a, b, c;//表示3条边长的字段 23. public IllegaTriangleException (double a,double b,double c) {//构造异常 24. this.a = a; 25. this.b = b; 26. this.c = c;} 27. public String toString() {//重写toString()方法 28. return "边长"+a+","+b+","+c+"无法组成有效的三角形"; 29. } 30. } 31. class Triangle{ 32. private double a,b,c;//构造方法 33. public Triangle (double a,double b,double c)throws IllegaTriangleException{ 34. //在构造方法声明语句中声明可能会抛出的异常类IllegaTriangleException 35. if(a+b>c&&b+c>a&&a+c>b) {//如果两边之和大于第三边 36. this.a = a; 37. this.b = b; 38. this.c = c;} 39. else //否则抛出IllegaTriangleException异常 40. throw new IllegaTriangleException(a,b,c); 41. } 42. public double getArea() {//用于计算三角形面积的getArea()方法 43. double p = (a+b+c)/2.0; 44. double s = Math.sqrt(p*(p-a)*(p-b)*(p-c)); 45. return s; 46. } 47. }