java手动抛出异常、用户自定义异常类、异常处理5个关键字、throw和throws的区别

2023-11-02

1.6手动抛出异常

用throw的时候最常用new Exception或者RuntimeException,要是知道详细的,可以写最详细的

1.6.1代码

package com.my.java2;

public class StudentTest {
	public static void main(String[] args) {
		try {
			Student s = new Student();
			s.register(-1001);
			System.out.println(s);
		} catch (Exception e) {
//			e.printStackTrace();
			System.out.println(e.getMessage());
		}
	}
}
class Student{
	private int id;
	public void register(int id) throws Exception{
		if(id > 0) {
			this.id = id;
		}else {
//			System.out.println("您输入的数据非法!");
			//用throw的时候最常用new Exception或者RuntimeException,要是知道详细的,可以写最详细的
			//手动抛出异常对象
//			throw new RuntimeException("您输入的数据非法!");
			throw new Exception("您输入的数据非法!");
		}
	}
	@Override
	public String toString() {
		return "Student [id=" + id + "]";
	}
	
	
}

1.6.2结果

在这里插入图片描述

1.6.3throw和throws的区别

throw是手动的生成一个异常的对象
throws是处理一个异常

1.7用户自定义异常类

用户自己的异常类必须继承现有的异常类(RuntimeException 、Exception)。一般地,用户自定义异常类都是RuntimeException的子类。
自定义异常类通常需要编写几个重载的构造器。
自定义异常需要提供serialVersionUID
自定义的异常通过throw抛出。
自定义异常最重要的是异常类的名字,当异常出现时,可以根据名字判断异常类型。

package com.my.java2;

public class NegativeException extends RuntimeException{
	
	static final long serialVersionUID = -7034897193246939L;
	
	public NegativeException() {
		
	}
	
	public NegativeException(String message) {
		super(message);
	}

}


测试代码

package com.my.java2;

public class StudentTest {
	public static void main(String[] args) {
		try {
			Student s = new Student();
			s.register(-1001);
			System.out.println(s);
		} catch (Exception e) {
//			e.printStackTrace();
			System.out.println(e.getMessage());
		}
	}
}
class Student{
	private int id;
	public void register(int id) throws Exception{
		if(id > 0) {
			this.id = id;
		}else {
			throw new NegativeException("您输入的数据非法!");
		}
	}
	@Override
	public String toString() {
		return "Student [id=" + id + "]";
	}
	
	
}

在这里插入图片描述

1.8异常处理5个关键字

在这里插入图片描述

1.9综合练习

  • 编写应用程序EcmDef.java,接收命令行的两个参数,要求不能输入负数,计算两数相除。
  • 对数据类型不一致(NumberFormatException) 、 缺少命令行参数(ArrayIndexOutOfBoundsException、 除0(ArithmeticException)及输入负数(EcmDefNegativeException 自定义的异常)进行异常处理。
  • 提示:
  • (1)在主类(EcmDef)中定义异常方法(ecm)完成两数相除功能。
  • (2)在main()方法中使用异常处理语句进行异常处理。
  • (3)在程序中,自定义对应输入负数的异常类(EcDef)。
  • (4)运行时接受参数 java EcmDef 20 10 //args[0]=“20” args[1]=“10”
  • (5)Interger类的static方法parseInt(String s)将s转换成对应的int值。 如:int a=Interger.parseInt(“314”); //a=314;

1.9.1主函数

package com.my.java3;

public class EcmDef {
	public static void main(String[] args) {
		try {
			int i = Integer.parseInt(args[0]);
			int j = Integer.parseInt(args[1]);
			
			int ans = ecm(i, j);
			
			System.out.println(ans);
		}catch(NumberFormatException e) {
			System.out.println("数据类型不一致");
		}catch(ArrayIndexOutOfBoundsException e) {
			System.out.println("缺少命令行参数");
		}catch(ArithmeticException e) {
			System.out.println("除0");
		}catch(EcmDefNegativeException e) {
			System.out.println(e.getMessage());
		}
		
	}
	public static int ecm(int i , int j) throws EcmDefNegativeException{
		if(i < 0 || j < 0) {
			throw new EcmDefNegativeException("分子或分母为负数");
		}
		return i / j;
		
	}
}

1.9.2自定义异常类

package com.my.java3;

public class EcmDefNegativeException extends Exception{
	
	static final long serialVersionUID = -3387516993124229948L;
	
	public EcmDefNegativeException() {
		
	}
	
	public EcmDefNegativeException(String message) {
		super(message);
	}
}

1.10一首小悟结束异常处理

世界上最遥远的距离,是我在if里你在else里,似乎一直相伴又永远分离;
世界上最痴心的等待,是我当case你是switch,或许永远都选不上自己;
世界上最真情的相依,是你在try我在catch。无论你发神马脾气,我都默默承受,静静处理。到那时,再来期待我们的finally。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java手动抛出异常、用户自定义异常类、异常处理5个关键字、throw和throws的区别 的相关文章

随机推荐

  • C++tuple快速而随意的数据结构

    初始化 lt 学号 姓名 年龄 gt tuple
  • 转:通过注册表查看操作系统默认编码的方法

    在 转 使用DOS命令chcp查看windows操作系统的默认编码以及编码和语言的对应关系 介绍了一种通过chcp查看windows操作系统默认编码的方法 同时还有一种通过注册表查看默认编码的方法 虽然是以没有dos命令简单 但也可以使用
  • mbedtls交换服务器证书,mbedtls

    mbedtls系列文章 Demo工程源码 https github com Mculover666 mbedtls study demo 本工程基于STM32L41RCT6开发板 包含了本系列文章中所编写的所有Demo 持续更新 文章目录
  • xgboost 调参经验

    本文介绍三部分内容 xgboost 基本方法和默认参数 实战经验中调参方法 基于实例具体分析 1 xgboost 基本方法和默认参数 在训练过程中主要用到两个方法 xgboost train 和xgboost cv xgboost trai
  • LambdaQueryWrapper用法简单介绍

    1 层级关系 2 LambdaQueryWrapper 与QueryWrapper查询类似 不过使用的是Lambda语法 举例如下 package com mszlu blog dao pojo import lombok Data Dat
  • pywintypes.com_error: (-2147221008, ‘CoInitialize has not been called.‘, None, None)

    在使用xlwings多线程时 出现这样的报错 导致Excel表无法打开 是多线程调用的问题 解决方法 import pythoncom 在这个线程的函数开始运行之前调用这句即可 def daily report pythoncom CoIn
  • C语言:选择+编程(每日一练Day16)

    目录 选择题 题一 题二 题三 题四 题五 编程题 题一 数对 思路一 题二 截取字符串 思路一 本人实力有限可能对一些地方解释和理解的不够清晰 可以自己尝试读代码 或者评论区指出错误 望海涵 感谢大佬们的一键三连 感谢大佬们的一键三连 感
  • 解决vscode空格间距过小 tab不是四格的问题

    打开顺序 1 文件 首选项 设置 2 在框框中输入font 如下图所示 3 在 Editor Font Family的框框中 注意 是把第一个逗号前面的东西换成Consolas 如下图所示 即可
  • Java基础-作用域

    基本概念 在Java当中 主要的变量就是属性 成员变量 和局部变量 java中作用域的分类 全局变量 也就是属性 作用域为整个类体 局部变量 除了属性之外的其他变量 作用域为定义的代码块当中 目录 局部变量 举例 结果 局部变量没有默认值
  • Scala安装

    1 需要到官方下载window版本的Scala2 12x 注意去官方第找到Download下载 2 直接下载 第二种下载方式打开技能大赛课程里面的资料 3 双击安装文件进行安装 在安装的过程需要注意安装目录不要空格 中文和特殊符号 建议在D
  • Docker安装和Portainer图形界面安装

    文章目录 1 概述 2 docker简介 2 1 架构 2 2 优点 2 3 docker和虚拟机比较 比如vmware 3 docker安装 centos环境 3 1 卸载旧版本 没有可以不执行 3 2 设置仓库 3 3 正式安装 3 4
  • 数组练习题2

    1 题目 打印杨辉三角的前n行 注 杨辉三角的本质是它的两条斜边都是1 其余数则等于它肩上的两个数之和 如 1 11 121 1331 14641 思路 计算杨辉三角的时候1 先定义第一列的值为1 2 定义对角线上的值为1 3 根据某项值
  • 卸载 kubernetes

    kubeadm reset f modprobe r ipip lsmod rm rf kube rm rf etc kubernetes rm rf etc systemd system kubelet service d rm rf e
  • linux:真机安装centos linux(突发事件:解决卡在安装界面){寻找镜像--u启制作--引导u盘--解决卡在安装界面--安装配置}

    首先准备一个8 16 g的u盘 格式为 fat32 寻找镜像 寻找可以上阿里云或者各大镜像网站以及官网寻找 我是在阿里云找的 阿里巴巴开源镜像站 OPSX镜像站 阿里云开发者社区 aliyun com 寻找你要找的版本 我这里就选7 9版本
  • 【JAVA并发编程-黑马】第一章

    文章目录 一 创建线程的几种方式 二 查看进程的方法 三 线程运行原理 栈桢Debug 四 线程运行原理图解 4 1 类加载 4 2 启动main线程 五 线程上下文切换 Thread Context Switch 六 常用方法 6 1 r
  • 【记录11】前端项目上传至gitee仓库及相关命令

    本篇文章适用于初次使用git base来上传项目至gitee仓库的初学者 使用git base来上传项目至国内gitee 判断当前项目是否连接仓库 2022 3 29 查看当前的用户 git config user name 查看当前用户地
  • Android Genemotion模拟器一直卡在黑屏界面

    Android Genemotion模拟器一直卡在黑屏界面 解决办法 调大对应的模拟器的内存 第一步 右键你要修改的模拟器 弹出的菜单中选择 Settings 第二步 增大或者减小内存
  • MySQL必知必会 学习笔记 第九章 用正则表达式进行搜索

    正则表达式是用来匹配文本的特殊的串 它用正则表达式语言来建立 MySQL支持的正则表达式仅为正则表达式的一个很小的子集 可通过WHERE子句使用正则表达式过滤SELECT检索出的数据 检索条件列包含字符100的所有行 SELECT colu
  • 如何搭建websocket及使用

    保持一个长连接 当服务端有新的消息 能够实时的推送到使用方 像知乎的点赞通知 评论等 都可以使用WebSocket通信 那该如何搭建呢 首先在utils文件夹下创建一个websocket ts文件 import onUnmounted fr
  • java手动抛出异常、用户自定义异常类、异常处理5个关键字、throw和throws的区别

    文章目录 1 6手动抛出异常 1 6 1代码 1 6 2结果 1 6 3throw和throws的区别 1 7用户自定义异常类 1 8异常处理5个关键字 1 9综合练习 1 9 1主函数 1 9 2自定义异常类 1 10一首小悟结束异常处理