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

任意一个三角形,其任意两边之和大于第三边。当三角形的三条边不满足前述条件时,就表示发生了异常,将这种异常情况定义为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.mzph.cn/pingmian/5960.shtml

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

相关文章

[随记]Mac安装Docker及运行开源Penpot

下载Docker Desktop for Mac&#xff1a;https://www.docker.com/products/docker-desktop/ 安装Docker Desktop for Mac&#xff0c;安装完成后&#xff0c;启动Docker&#xff0c;然后在终端输入&#xff1a; docker version 在Mac电脑的Desktop&#xff0c;随便创建一个文…

零代码编程:用通义千问免费批量翻译英文文档

首先&#xff0c;在阿里云的dashScope灵积模型服务中&#xff0c;申请一个API-key&#xff0c;有挺多免费token的。 然后&#xff0c;在通义千问中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;现在要完成一个编写基于qwen-turbo模型API和dashscope库的程序脚本…

Android Handler用法

Android Handler用法 为什么要设计Handler机制&#xff1f;Handler的用法1、创建Handler2、Handler通信2.1 sendMessage 方式2.2 post 方式 Handler常用方法1、延时执行2、周期执行 HandlerThread用法主线程-创建Handler子线程-创建Handler FAQMessage是如何创建主线程中Looper…

云端芳华、运维之美

今天&#xff0c;在我们享受互联网服务带来的便利与高效的同时&#xff0c;有一群人默默地在幕后为我们提供支持&#xff0c;他们就是云端运维人员。 值此五一国际劳动节来临之际&#xff0c;我们要真诚感谢他们辛勤的劳动和奉献&#xff01;

springcloud自定义全局异常

自行创建一个实体类 /*** 全局异常处理类**/ ControllerAdvice public class GlobalExceptionHandler {ExceptionHandler(Exception.class) ResponseBody public Result error(Exception e){e.printStackTrace(); return Result.fail();}/*** 自定义异常处理方法* param e * re…

2023-2024年汽车行业报告/方案合集(精选345份)

汽车行业报告/方案&#xff08;精选345份&#xff09; 2023-2024年 来源&#xff1a;2023-2024年汽车行业报告/方案合集&#xff08;精选345份&#xff09; 【以下是资料目录】 2023中国汽车科技50强 2023中国智能汽车产业发展与展望 2023比亚迪海豹汽车拆解报告 2023新能…

unity制作app(3)--gps定位

1.unity中定位Unity之GPS定位&#xff08;高德解析&#xff09;_unity gps定位-CSDN博客 代码需要稍微修改一下&#xff0c;先把脚本绑到一个button上试一试&#xff01; 2.先去高德地图认证&#xff08;app定位&#xff09; 创建应用和 Key-Web服务 API | 高德地图API (ama…

C#知识|汇总方法重载与静态方法应用技巧

哈喽&#xff0c;你好&#xff0c;我是雷工&#xff01; 今天学习C#方法重载与静态方法应用技巧的相关内容。 01 方法重载有什么好处&#xff1f; 1.1、可以有效的减少类的对外接口&#xff08;只显示一个方法比较简洁&#xff09;&#xff0c;从而降低类的复杂度。 1.2、方便…

【Vue 2.x】学习vue之二组件

文章目录 Vue二组件第五章es6文件导入出1、导出export 组件&#xff08;component&#xff09;1、定义2、模块化与组件化3、组件的分类1、非单文件组件非单文件三步骤创建组件标准写法简化写法组件的嵌套非单文件的不足之处 2、单文件组件vue单文件组件的使用脚手架创建项目重点…

qml之text

显示字体 Text {text: "The quick brown fox"color: "#303030"font.family: "Ubuntu"font.pixelSize: 28x:200y:200}Text {width:84elide: Text.ElideMiddle y:text1.ytext1.height20text: "一个很长很长的句子 !!!!!!!!!!"style…

全新神经网络架构KAN一夜爆火!200参数顶30万,MIT华人一作 | 最新快讯

白交衡宇发自凹非寺 量子位公众号 QbitAI 一种全新的神经网络架构 KAN&#xff0c;诞生了&#xff01; 与传统的 MLP 架构截然不同&#xff0c;且能用更少的参数在数学、物理问题上取得更高精度。 比如&#xff0c;200 个参数的 KANs&#xff0c;就能复现 DeepMind 用 30 万参数…

Linux 进程间通信之匿名管道

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;Linux知识分享⏪   &#x1f69a;代码仓库:Linux代码练习&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Linux知识   &#x1f51d; 目录 前言 一. 进程间通信介绍 1.进程间通…

【linuxC语言】stat函数

文章目录 前言一、stat函数二、示例代码总结 前言 在Linux系统编程中&#xff0c;stat() 函数是一个非常重要的工具&#xff0c;用于获取文件的元数据信息。无论是在系统管理、文件处理还是应用开发中&#xff0c;都可能会用到 stat() 函数。通过调用 stat() 函数&#xff0c;…

AI视频教程下载:用ChatGPT提示词开发AI应用和GPTs

在这个课程中&#xff0c;你将深入ChatGPT的迷人世界&#xff0c;学习如何利用其能力构建创新和有影响力的工具。你将发现如何创建不仅吸引而且保持用户参与度的应用程序&#xff0c;将流量驱动到你的网站&#xff0c;并开辟新的货币化途径。 **课程的主要特点&#xff1a;** …

Hive优化以及相关参数设置

1.表层面设计优化 1.1 表分区 分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹&#xff0c;该文件夹下是该分区所有的数据文件。Hive 中的分区就是分目录&#xff0c;把一个大的数据集根据业务需要分割成小的数据集。在查询时通过 WHERE 子句中的表达式选择查询所需要…

抖音小店运营实战班,全新升级 从零到进阶精通 分享月销百万小店核心秘密

课程内容&#xff1a; 1 2024抖音电商发展趋势及抖店运营策略(直播2024 0412).mp4 2 1-1抖音小店入驻流程(直播2024 04 12),mp4 3 1-2个体店铺VS企业店铺有什么区别(直播20240412).mp4 4 1-3抖音小店店铺搭建(直播2024 04 12).mp4 5 2-1-如何避免违禁词(附违禁词大全)(直播…

微软如何打造数字零售力航母系列科普07 - Azure PlayFab:你从未想过的世界上最大的开发工具(平台)

Azure PlayFab&#xff1a;你从未想过的世界上最大的开发工具 微软的James Gwertzman告诉GamesIndustry.biz Academy他帮助开发者成功的使命 制作游戏比以往任何时候都更容易上手。现在有无数的游戏引擎可供选择&#xff0c;其中大多数是免费的&#xff0c;PC空间的店面也同样重…

链表经典面试题上

目录 创作不易&#xff0c;如若对您有帮助&#xff0c;还望三连&#xff0c;谢谢&#xff01;&#xff01;&#xff01; 题目一&#xff1a;203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 题目二&#xff1a;206. 反转链表 - 力扣&#xff08;LeetCode&#xff…

python学习笔记----安装pycharm(1)

一、安装pycharm 1. 下载并安装pycharm https://www.jetbrains.com/pycharm/download2.汉化pycharm 安装插件并重启IDE完成汉化 二、 第一个python程序

【机器学习】机器学习在教育领域的应用场景探索

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…