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

news2024/10/7 0:27:37

任意一个三角形,其任意两边之和大于第三边。当三角形的三条边不满足前述条件时,就表示发生了异常,将这种异常情况定义为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 <= side3 || side2 + side3 <= side1 || side1 + side3 <= side2)
        {
            IllegalTriangleException e = new IllegalTriangleException("无法创建三角形,三角形的两边之和要大于第三边");
            throw e;//这里抛出了异常,可见这是个可抛异常方法

        }
    }
    public double getPerimeter()
    {
        return side1 + side2 + side3;
    }
}

异常的应对

异常被抛出后,谁会接过来?

就是调用这个方法的方法,就好比这道题,可抛异常的三角形构造器被main方法调用,异常就被main接过来。main有两种选择:一个是接着抛,一个是应对处理异常。如果继续抛,说明Main方法也是个可抛异常的方法,接着使用

其实三角形构造器面对自己产生的异常也有两种选择,不过这里题目上要求了只让我们抛出去。

可见,异常有两种用法:1.抛 2.捕获

那么,前面的四个问题就是浓缩这一章的内容:

  1. JAVA中的异常是什么 - 也是个类
  2. 异常怎么使用 - 抛 / 捕获
  3. 抛什么  - 实例化的异常类
  4. 怎么抛的   - 抛出语句

接着,我们就来看看异常的捕获,以及什么时候选择抛,什么时候选择直接处理异常 

Java-异常处理-处理RuntimeException(2/2)-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1640093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构学习/复习3--顺序表的实现/数组下标思想类编程题

一、顺序表的实现 realloc函数的原异地扩容 二、编程练习题 1. 2. 3.

解决WordPress无法强制转换https问题

原因&#xff1a;我在用cs的时候&#xff0c;突然老鸟校园网突然断了&#xff0c;客户端cs连不上了&#xff0c;进程也杀不死&#xff0c;cpu占用100%&#xff0c;只能重启&#xff0c;但是重启后我的blog网站打不开了 开始以为是Nginx的问题&#xff0c;重启它说配置出了问题…

STM32——GPIO篇

技术笔记&#xff01; 1. 什么是GPIO&#xff1f; GPIO是通用输入输出端口&#xff08;General-purpose input/output&#xff09;的英文简写&#xff0c;是所有的微控制器必不可少的外设之一&#xff0c;可以由STM32直接驱动从而实现与外部设备通信、控制以及采集和捕获的功…

java中的字符串(String)常量池理解

下面创建String对象的方式一样吗&#xff1f; 上述程序创建对象类似&#xff0c;为什么s1和s2引用对象一样&#xff0c;但是s3和s4不一样呢&#xff1f; 在java程序中&#xff0c;许多基本类型的字面常量会经常用到&#xff0c;例如2,3.11&#xff0c;“hyy”等。为了提升程序…

算法学习系列(五十四):单源最短路的综合应用

目录 引言一、新年好二、通信线路三、道路与航线四、最优贸易 引言 关于这个单源最短路的综合应用&#xff0c;其实最短路问题最简单的就是模板了&#xff0c;这是一个基础&#xff0c;然后会与各种算法结合到一块&#xff0c;就是不再考察单个知识点了&#xff0c;而是各种知…

【RBAC鉴权】node-casbin基础教程

一、RBAC概述 RBAC鉴权&#xff0c;完整的英文描述是&#xff1a;Role-Based Access Control&#xff0c;中文意思是&#xff1a;基于角色&#xff08;Role&#xff09;的访问控制。这是一种广泛应用于计算机系统和网络安全领域的访问控制模型。 简单来说&#xff0c;就是通过…

a-table 控制列的展示和隐藏

一、业务场景&#xff1a; 最近在使用 Antd-vue 组件库的时候&#xff0c;a-table需要根据不同角色的权限显示和隐藏 columns的列 为了避免大家走弯路&#xff0c;为大家整理了一下&#xff0c;粘走可以直接用的那种 二、具体实现步骤&#xff1a; 1.在需要显示与隐藏的列增加一…

Android Studio实现简单的自定义钟表

项目目录 一、项目概述二、开发环境三、详细设计3.1、尺寸设置3.2、绘制表盘和指针3.3、动态效果 四、运行演示五、总结展望六、源码获取 一、项目概述 在安卓开发中&#xff0c;当系统自带的View已经无法满足项目需求时&#xff0c;就要自定义View。在Android中是没有与钟表有…

深度学习之基于Matlab BP神经网络烟叶成熟度分类

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 烟叶的成熟度是评估烟叶品质的重要指标之一&#xff0c;它直接影响着烟叶的口感、香气和理化特性。传…

jupyter notebook切换conda虚拟环境

首先&#xff0c;切换到某个虚拟环境&#xff0c;本人切换到了d2l环境&#xff1a; (d2l) C:\Users\10129>pip install ipykernel然后&#xff0c;如代码所示安装ipykernel包 最后&#xff0c;按下述代码执行&#xff1a; (d2l) C:\Users\10129>python -m ipykernel i…

软件工程全过程性文档(软件全套文档整理)

软件项目相关全套精华资料包获取方式①&#xff1a;进主页。 获取方式②&#xff1a;本文末个人名片直接获取。 在软件开发的全过程中&#xff0c;文档是记录项目进展、决策、设计和测试结果的重要工具。以下是一个简要的软件全过程性文档梳理清单&#xff1a; 需求分析阶段…

Ex1-C6油气化工防爆轮式巡检机器人

Ex1系列防爆轮式巡检机器人整机采用防爆设计&#xff0c;防爆等级为Exd II CT4 Gb。机器人通过无轨3D形态导航技术&#xff0c;结合360度防爆云台和无线防爆充电桩&#xff0c;实现整套防爆标准&#xff0c;可广泛应用于石油、燃气、化工、冶金等II类爆炸环境中&#xff0c;代替…

【Qt QML】QLibrary加载共享库中的类

QLibrary是一个用于加载动态链接库&#xff08;或称为共享库&#xff09;的类。它提供了一种独立于平台的方式来访问库中的功能。 在QLibrary中&#xff0c;可以通过构造函数或setFileName()方法设置要加载的库文件名。当加载库文件时&#xff0c;QLibrary会搜索所有平台特定的…

VmWare 虚拟机没有网络解决办法

由于最近需要&#xff0c;装了个VM虚拟机&#xff0c;但是突然发现本机有网络&#xff0c;虚拟机却没有网络&#xff0c;更换了虚拟机的网络设置&#xff0c;都尝试过了 都不管用&#xff0c; 最后尝试了这种方法完美解决 还原网络默认设置 首先还原虚拟网络编辑器设置 启动V…

Re69:读论文 LaMDA: Language Models for Dialog Applications

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名称&#xff1a;LaMDA: Language Models for Dialog Applications ArXiv网址&#xff1a;https://arxiv.org/abs/2201.08239 本文介绍谷歌提出的对话大模型LaMDA&#xff0c;主要关注对各项指标&#x…

使用 MediaMTX 和 FFmpeg 推拉 RTSP 流媒体

实时流传输协议 RTSP&#xff08;Real-Time Streaming Protocol&#xff09;是 TCP/IP 协议体系中的一个应用层协议&#xff0c;由哥伦比亚大学、网景和 RealNetworks 公司提交的 IETF RFC 标准。该协议定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。RTSP 在体系…

idea常用知识点随记

idea常用知识点随记 1. 打开idea隐藏的commit窗口2. idea中拉取Git分支代码3. idea提示代码报错&#xff0c;项目编译没有报错4. idea中实体类自动生成序列号5. idea隐藏当前分支未commit代码6. idea拉取新建分支的方法 1. 打开idea隐藏的commit窗口 idea左上角File→Settings…

Linux的软件包管理器-yum

文章目录 软件包的概念yum源的配置的原因yum的使用查看软件包安装软件卸载软件 软件包的概念 软件包(SoftWare Package)是指具有特定的功能&#xff0c;用来完成特定任务的一个程序或一组程序。可分为应用软件包和系统软件包两大类 在Linux系统中&#xff0c;下载安装软件的方式…

设计模式: 模板模式

目录 一&#xff0c;模板模式 二&#xff0c;特点 三&#xff0c;组成部分 四&#xff0c;实现步骤 五&#xff0c;案例 一&#xff0c;模板模式 模板模式&#xff08;Template Pattern&#xff09;是一种行为型设计模式&#xff0c;它在超类中定义了一个算法的骨架&#…

React Native支持Tailwind CSS 语法

React Native支持Tailwind CSS 语法 一、前沿背景 回想下我们平时按照官方的规范进行书写样式是什么样&#xff1f; 是像下面这样&#xff1a; const MyComponent () > {return (<View><Text style{{ fontSize: 20 }}>开发者演示专用</Text></View…