小工具知识网

当前位置: 首页 > 行业知识 > Java-异常处理-定义三角形类Triangle和异常三角形IllegalTriangleException类 (1/2)

行业知识

Java-异常处理-定义三角形类Triangle和异常三角形IllegalTriangleException类 (1/2)

2026-10-27 00:20:43 来源:互联网转载

任意一个三角形,其任意两边之和大于第三边。当三角形的三条边不满足前述条件时,就表示发生了异常,将这种异常情况定义为IllegalTriangleException类。

自定义异常类IllegalTriangleException:

  1. 当三角形的三条边不满足条件:“任意一个三角形,其任意两边之和大于第三边”时,就抛出该类型的异常对象。IllegalTriangleException是一个非运行时异常。

  2. 为IllegalTriangleException类定义带一个字符串参数的构造器,该参数表示异常对象的异常信息(Message)

class IllegalTriangleException ………… {//定义一个构造器,带一个字符串参数,字符串表示异常信息}

定义三角形类Triangle:

三角形类定义要求如下:

  1. 三个私有成员变量,side1、side2、side3,分别表示三角形的三条边;
  2. 一个带三个参数的构造器,用传入的三个参数初始化三角形的三条边,如果出现两条边之和小于等于第三边,则抛出 IllegalTriangleException异常对象,异常对象中包含异常信息:“无法创建三角形,三角形的两边之和要大于第三边”,并在构造器的声明中要声明抛出 IllegalTriangleException类
  3. 定义一个成员方法:double getPerimeter(),该方法返回三角形的周长。
class Triangle {}

测试程序Main类:

import java.util.Scanner;public class Main {    public static void main(String[] args) {        try {            Scanner scanner = new Scanner(System.in);            double side1 = scanner.nextDouble();            double side2 = scanner.nextDouble();            double side3 = scanner.nextDouble();            Triangle triangle = new Triangle(side1,side2,side3);            System.out.println("三角形的周长是:"+triangle.getPerimeter());        } catch (IllegalTriangleException e) {            System.out.println(e.getMessage());        }    }}

输入样例:

在这里给出一组输入。例如:

1 3 9

 我们据需求来学习异常:这道题我们看下来,有俩个疑问

  1. JAVA中的异常是什么
  2. 异常怎么使用

先进行知识的补充,再来解决问题

JAVA中的异常是什么

异常,白话就是不正常。JAVA中的异常,就是换了个语境,指代码中的异常。代码产生的异常莫非有两种:一种是在编译阶段,jvm分析出来的可能产生的异常:常见的就是代码逻辑上的;还有一种是运行时产生的错误,比如要求输入整数,用户却输入abcd,堆栈溢出...

总结来说:一动一静。

众所周知,Java里面“万物皆可对象”。Java为了体现异常这块儿,也专门做了一个异常类。

这动起来的,就是RuntimeException(运行时异常)。咱们就图可以看到a,大胆推测:这受检查异常就是咱们说的静

其实实际上,确实也是。运行时异常又叫Unchecked Exception(非受检异常)正好和 受检查异常相对。把前面的修饰去掉(不管你受不受检查),就是它们共同的父类,Exception。不知道,屏幕前的小伙伴是否会想到抽象与具体,继承...

至于Runtime异常下面的分支我们在此省略,看看就行了。以后有的是机会碰上。

再看左边的Error,中文就是错误。这种异常,咱们可以说是Bug了,碰上了直接改就行。

Error和Exception它们共同的父类,Throwable,——可抛出的?

为什么要叫可抛出的?根据这父类取名叫可抛出的,咱们就知道这些异常包括Error的共同特点就是可抛出的。那我们到底在抛什么,怎么抛的?

殊不知,这些问题就是通往异常大门的关键。

异常类:

我们这里先看Exception类。说起类,难免心头涌上大明湖畔的类的三部曲:导包,实例化,专有操作。

API文档里,白纸蓝字写着:“lang包”,这就意味着它就是自带的,我们不需要导

我们要写一个异常类,不是名字带上Exception就是一个异常类了。咱们的类必须有那个血统——没错就是继承。

继承Exception类。 而间接父类我们可以看到在继承链上的顶端(我们这里说异常),就是Throwable。Throwable有两个重要的属性——message,cause

有了属性,一般都会有相应的带参数的构造器 

message就是对异常的描述,cause就是异常产生的原因

举个场景就懂了:小明吃坏了东西,拉肚子。

这里小明的身体产生了异常,message就是小明拉肚子,cause就是吃坏了东西。

我们写的类也会同样继承间接父类的属性和方法。这俩属性在咱们异常类构造器里就派上了用场

class IllException extends Exception(){   public IllException(String message,Throwable cause)   {      super(message,cause);//继承过来的是私有属性,调用父类的公开构造器方法来进行访问和赋值属性         }}

 我们在定义异常类里面,该继承的都继承了,交代了异常的具体情况(message),有时也会需要异常产生的原因(cause)。

就比如这儿,异常类里面需要一个产生异常的字符串,那就是message

那么,这个异常类我们就可以写出来了:

class IllegalTriangleException extends Exception//只有继承Exception才算一个真正的异常类{    public IllegalTriangleException(String message)    {        super(message);//构造器,带参数,这个构造方法来源于间接父类Throwable    }}

接下来,我们就要看看到底哪里会用上我们的异常类。

 异常怎么使用

 就这道题而言,我们分析题目。就很明显,

读完这段话,什么最关键?

抛出IllegalTriangleException异常对象。

懂了,异常就是拿来抛的。

抛的就是实例化的类,怎么抛?

抛出语句 

  1. 先实例化
  2. 抛——throw 对象
  3. 写抛出声明

 咱们根据题目来说

   if(任意俩边之和小于等于第三边)  {     IllegalTriangleException e = new IllegalTriangleException("无法创建三角形,三角形的两边之和要大于第三边");//实例化异常类,就是new一个对象,注意构造器里是否有参数            throw e;//这里抛出了异常,可见这是个可抛异常方法  }

既然是个可抛异常方法,编译器要求我们要在方法后写上throws 某某个异常类

比如这里:构造器,“构造器怎么不算方法呢?”

public Triangle(double side1,double side2,double side3) throws IllegalTriangleException{//...}

那这道题关于异常的部分不就都写出来了?

class IllegalTriangleException extends Exception//只有继承Exception才算一个真正的异常类{    public IllegalTriangleException(String message)    {        super(message);//构造器,带参数,这个构造方法来源于间接父类Throwable    }}

 

class Triangle{    double side1;    double side2;    double side3;    //一般有成员变量,必写带参数的构造器    public Triangle(double side1,double side2,double side3) throws IllegalTriangleException    {        this.side1 = side1;        this.side2 = side2;        this.side3 = side3;        if(side1 + side2 

上一篇:SIP电话源码深度解析,揭秘内部工作原理与实现细节

下一篇:Win10启动盘制作宝典,一键搞定,轻松上手!