JAVA异常处理——三角形面积
自定义类Sanj,其中有成员 x,y,z,作为三边长,构造方法Sanj(a,b,c)分别 给x,y,z赋值,方法求面积getArea和显示三角形信息(三个边长)showInfo,这2个方法中当三条边不能构成一个三角形时要抛出自定义异常NotSanjiaoException,否则显示正确信息。在另外一个类中的主方法中构造一个Sanj对象(三边为命令行输入的三个整数),显示三角形信息和面积,要求捕获异常。
import java.util.Scanner;public class Sanj { double x; double y; double z; public Sanj(double a,double b,double c) throws NotSanjiaoException { x=a; y=b; z=c; try { 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)) { throw new Exception("这三个三角形不能构成三角形"); } } catch(Exception e){ System.err.println("Exception handled in the method NotSanjiaoException"); throw new NotSanjiaoException("出现异常",e); } } public double getArea() { double p; p=(x+y+z)/2.0; double s=p*(p-x)*(p-y)*(p-z); s=Math.sqrt(s); retu s; } public void showInfo() { System.out.println("第一条边的长度:"+x+"第二条边的长度"+y+"第三条边的长度"+z); } public static void main(String[] args) { double a1,a2,a3; System.out.println("请依次输入三角形边的长度:"); Scanner sc =new Scanner(System.in); a1=sc.nextDouble(); a2=sc.nextDouble(); a3=sc.nextDouble(); sc.close(); try { Sanj s = new Sanj(a1,a2,a3); double x = s.getArea(); System.out.println("三角形的面积为:"+x); s.showInfo(); } catch(Exception e ) { System.err.println("对不起,您输入的边长:"+a1+" "+a2+" "+a3+"不能构成三角形"); } }}class NotSanjiaoException extends Exception{ private static final long serialVersionUID = 1L; public NotSanjiaoException(String Message,Throwable Cause) { super(Message,Cause); } public NotSanjiaoException(String Message) { super(Message); } public NotSanjiaoException(Throwable cause) { super(cause); }}
toString()方法用来获取异常种类和信息;getCause()用来获取异常的原因;getMessage()用来获取异常的信息;printStackTrace在控制台打印出异常种类,错误信息和出错位置;
同时throws关键字代表可能会有异常,可以在方法的参数括号后面加 throws Exception或者用try catch语句。
在try catch中,可以有多个catch语句,在try语句中写入可能会出现的异常,当程序遇到异常后就会在catch里寻找与之对应的异常,然后进行处理,最后不管程序是否异常,都会执行到finally语句,finally语句为异常的统一出口,finally可以省略,如果不写,在catch语句执行完以后则会继续执行下面的程序。
在处理多个异常的时候需要将捕获范围小的异常放在捕捉范围大前面,否则会出现语法错误
作者:目小喵
来源链接:https://blog.csdn.net/weixin_44154732/article/details/105710263
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。