《Java基础——异常的捕获与抛出》
Java基础——异常的捕获与抛出
‘
前言:
- Error类(错误)和Exception类(异常)是Throwable类的子类。
- 异常分为CheckedException类(编译时异常)和RuntimeException类(运行时异常)。
- CheckedException类(编译时异常)必须提前处理。
- RuntimeException类(运行时异常)可选择性处理
一、捕获异常;
规则:
try()里的代码A或代码B只要有一个出现异常就会运行catch()里的代码C。- 无论是否有异常都会运行
finally里的代码D。 - 假如要捕获多个异常,要从小到大。
格式:
try
{
待捕获代码A
待捕获代码B
}
catch(想要捕获的异常类型 对象名)
{
异常被捕获时的输出代码C
}
finally
{
代码D
}
后续代码
例如:
int m=2, n=0;
try
{
System.out.println(m/n);
}
catch(Exception e)
{
System.out.println("除数不能为0");
}
catch(Throwable t)
{
System.out.println("Throwable");
}
finally
{
System.out.println("finally");
}
编译结果:
除数不能为0
finally
二、抛出异常;
规则:
- 当判断方法存在异常时先通过关键字
throws抛出方法异常。 - 然后可以选择在主函数中选择捕获异常或继续抛出异常。
例一:捕获异常
public static void main(String[] args)
{
try
{
int a=num(4,0);
System.out.println(a);
}
catch(Exception e)
{
e.printStackTrace(); //在命令行打印异常信息在程序中出错的位置及原因。
System.out.println("除数不能为0");
}
}
public static int num(int x,int y)throws Exception
{
int result = x/y;
return result;
}
编译结果:
java.lang.ArithmeticException: / by zero
at 源代码.Example.num(Example.java:22)
at 源代码.Example.main(Example.java:10)
除数不能为0
例二:双重抛出异常
public static void main(String[] args)throws Exception
{
num();
}
public static void num()throws Exception
{
int x=4, y=0;
int m=x/y;
System.out.println(m);
}
编译结果:
Exception in thread "main" java.lang.ArithmeticException: / by zero
例三:主动双重抛出异常
public static void main(String[] args)throws Exception
{
num();
}
public static void num()throws Exception
{
int x=4, y=0;
if(y==0)
{
throw new Exception("除数不能为0");
}
int m=x/y;
System.out.println(m);
}
编译结果:
Exception in thread "main" java.lang.Exception: 除数不能为0
三、自定义异常;
规则:
- 定义自定义异常类,继承至
Exception类,重写其中的两个构造方法。 - 在异常所在方法的后面添加
throws语句,表示该方法有一个自定义异常类型的异常信息需要处理。 - 通过if语句设置条件,确定需要抛出异常的位置,使用
throw语句抛出自定义异常类的实例。
格式:
class 自定义异常名 extends Exception
{
public 自定义异常名()
{
}
public 自定义异常名(String msg)
{
super(msg);
}
}
例如:
public class Student
{
public static void main(String[] args)throws MyException
{
String username ="巴提";
if(username.length()<3)
{
throw new MyException("用户名小于三位");
}
System.out.println("用户名格式正确");
}
}
class MyException extends Exception
{
public MyException()
{
}
public MyException(String msg)
{
super(msg);
}
}
编译结果:
源代码.MyException: 用户名小于三位
《Java基础——异常的捕获与抛出》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- Day05 表格
表格 <table width="300" border="1" cellspacing="0"> <caption> ...
- halcon简易标定代码
read_image (Image, 'C:/Users/HJ/Desktop/demo1/4.bmp') threshold(Image, Region, 110, 255) closing_cir ...
- 问题:CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.tuna.tsinghua.edu.cn/anaconda/pk
使用anaconda安装tensorflow (windows10环境) 遇到的问题:CondaHTTPError: HTTP 000 CONNECTION FAILED for url <ht ...
- Unbuntu VS Code启动时闪退暂时的解决方法
背景: 刚刚试着更新了操作系统,没更新成功,在下载系统更新的时候brave浏览器消失了,wps消失了,搜狗拼音输入法消失了.更新时,卡在Kernal Offset上,然后长按电源键再重启就好了.但是v ...
- 初学者对html的认知
首先是关于本人对一个新事物的理解路线 对html的认知: what:首先我得知道它是什么?html是一门超文本标记语言,它不是一门编程语言 why:它为什么会存在?它存在的意义是什么?随着互联网的发展 ...
- 03 MySQL_表相关的SQL
表相关的SQL 什么是表: 表是数据库中保存数据的单位 数据库表的引擎: innodb:支持数据库的复杂操作,包括外键.事务等; myisam:只支持数据库的增删改查操作: 1. 创建表 格式: cr ...
- P3622 [APIO2007]【一本通提高状态压缩类动态规划】动物园
广告 绿树公司 - 官方网站:https://wangping-lvshu.github.io/LvshuNew/ 绿树智能 - 官方网站:https://wangping-lvshu.github. ...
- ExpressionChangedAfterItHasBeenCheckedError详细解释
一个angular组件,他的生命周期是这样的 update bound properties for all child components/directives call ngOnInit, On ...
- 163_技巧_Power BI 一键批量建立自定义字段参数
163_技巧_Power BI 一键批量建立自定义字段参数 一.背景 在 2022 年 5 月开始,Power BI 新增了一个非常有用的功能字段参数.再也不用写一串的 SWITCH 了.字段参数的效 ...
- Eplan创建符号
1.打开Eplan P8 ,新建一个名为"新项目"的项目,然后选择菜单"工具"----"主数据"-----"符号库"-- ...