要求:
自定义类Sanj,其中有成员 x,y,z,作为三边长,构造方法Sanj(a,b,c)分别 给x,y,z赋值,方法求面积getArea和显示三角形信息(三个边长)showInfo,这2个方法中当三条边不能构成一个三角形时要抛出自定义异常NotSanjiaoException,否则显示正确信息。在另外一个类中的主方法中构造一个Sanj对象(三边为命令行输入的三个整数),显示三角形信息和面积,要求捕获异常。
代码如下:
1 package Test; 2 3 import java.util.Scanner; 4 5 class NotSanjiaoException extends Exception{ 6 /** 7 * 8 */ 9 private static final long serialVersionUID = 1L; 10 11 public NotSanjiaoException(String Message,Throwable Cause) { 12 super(Message,Cause); 13 } 14 15 public NotSanjiaoException(String Message) { 16 super(Message); 17 } 18 19 public NotSanjiaoException(Throwable cause) { 20 super(cause); 21 } 22 } 23 24 class Sanj{ 25 double x; 26 double y; 27 double z; 28 public Sanj(double a,double b,double c) throws NotSanjiaoException { 29 x=a; 30 y=b; 31 z=c; 32 try { 33 if((x>=y+z)||(x<=Math.abs(y-z))||(y>=x+z)||(y<=Math.abs(x-z))||(z>=y+x)||(z<=Math.abs(y-x))||(x==0)||(y==0)||(z==0))34 throw new Exception("这三个三角形不能构成三角形"); 35 36 } 37 catch(Exception e){ 38 System.err.println("Exception handled in the method NotSanjiaoException"); 39 throw new NotSanjiaoException("出现异常",e); 40 41 } 42 } 43 44 public double getArea() { 45 double p; 46 p=(x+y+z)/2.0; 47 double s=p*(p-x)*(p-y)*(p-z); 48 s=Math.sqrt(s); 49 return s; 50 51 } 52 53 public void showInfo() { 54 System.out.println("第一条边的长度:"+x+"第二条边的长度"+y+"第三条边的长度"+z); 55 } 56 } 57 public class Test { 58 public static void main(String[] args) { 59 double a1,a2,a3; 60 System.out.println("请依次输入三角形边的长度:"); 61 Scanner sc =new Scanner(System.in); 62 a1=sc.nextDouble(); 63 a2=sc.nextDouble(); 64 a3=sc.nextDouble(); 65 sc.close(); 66 try { 67 Sanj s = new Sanj(a1,a2,a3); 68 double x = s.getArea(); 69 System.out.println("三角形的面积为:"+x); 70 s.showInfo(); 71 } 72 catch(Exception e ) { 73 System.err.println("对不起,您输入的边长:"+a1+" "+a2+" "+a3+"不能构成三角形"); 74 75 76 } 77 78 } 79 }
该题一共包含三个类,其中Sanj类,用来声明三个边,以及构造函数,面积函数,显示三边大小的函数,其中构造函数里面有异常语句,try catch。其中判断是否为三角形的条件尤为重要,if((x>=y+z)||(x<=Math.abs(y-z))||(y>=x+z)||(y<=Math.abs(x-z))||(z>=y+x)||(z<=Math.abs(y-x))||(x==0)||(y==0)||(z==0)),尤其是中间的||要通过特殊方法来想。
第二个类,自定义异常类继承于Exception类,有三个构造方法,参数分别为错误信息message,错误原因cause。两个参数,共有三种构造方法。
第三个类主类,输入边长,然后构造新对象,包含异常语句。
运行结果:
toString()方法用来获取异常种类和信息;getCause()用来获取异常的原因;getMessage()用来获取异常的信息;printStackTrace在控制台打印出异常种类,错误信息和出错位置;
同时throws关键字代表可能会有异常,可以在方法的参数括号后面加 throws Exception或者用try catch语句。
在try catch中,可以有多个catch语句,在try语句中写入可能会出现的异常,当程序遇到异常后就会在catch里寻找与之对应的异常,然后进行处理,最后不管程序是否异常,都会执行到finally语句,finally语句为异常的统一出口,finally可以省略,如果不写,在catch语句执行完以后则会继续执行下面的程序。
在处理多个异常的时候需要将捕获范围小的异常放在捕捉范围大前面,否则会出现语法错误
异常语句的处理流程:
异常处理流程
原文地址:https://www.cnblogs.com/tkg1314/p/11756006.html