《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 安装并启动 ...
随机推荐
- 配置Apollo阿波罗.net core 3.1 c#
直接上代码: public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(a ...
- 求求你们,别再刷 Star 了!这跟“爱国”没关系!
这几年,随着几大互联网公司的强大,纷纷投入云计算产业的建设,开源项目作为维护潜在客户群体(开发者)的重要手段,是各大云计算厂商都在努力做的事. 这几年也诞生了很多真正优秀和看似优秀的开源项目.真正优秀 ...
- CesiumJS 2022^ 源码解读[7] - 3DTiles 的请求、加载处理流程解析
目录 1. 3DTiles 数据集的类型 2. 创建瓦片树 2.1. 请求入口文件 2.2. 创建树结构 2.3. 瓦片缓存机制带来的能力 3. 瓦片树的遍历更新 3.1. 三个大步骤 3.2. 遍历 ...
- Codeforces Round #802 (Div. 2)
题集链接 A Optimal Path 水 代码 #include <bits/stdc++.h> #define endl "\n" using namespace ...
- 攻防世界MISC进阶区 52-55
52.Excaliflag 得到一张png,扔进stegsolve中查看,找到flag 53.Just-No-One 得到一个exe,运行后居然是一个安装程序,看了一下没什么问题,扔进ida pro中 ...
- c++头文件的一个误导
通常情况下,我们都认为c++的头文件是这样的: #include <bits/stdc++.h> using namespace std; int main() 但c++也可以用c的头文件 ...
- springmvc源码笔记-HandlerMethodReturnValueHandler
返回值解析器 用于对controller的返回值进行二次处理 结构 // 返回值解析器 public interface HandlerMethodReturnValueHandler { // 判断 ...
- Python3.7将普通图片(png)转换为SVG图片格式并且让你的网站Logo(图标)从此”动”起来
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_148 在之前的几篇文章中,介绍了业界中比较火爆的图片技术SVG(Scalable Vector Graphics),比如Iconf ...
- CF580D Kefa and Dishes (状压DP)
枚举最后食物 #include <iostream> #include <cstdio> #include <cstring> #include <algor ...
- SvelteUI:运用svelte3构建的网页版UI组件库(升级版)
距离上次分享的svelte-ui 1.0已经一月有余,这次带来全新升级完整版svelte-ui 2.0. 这次优化并新增15+个组件.在开发之初借鉴了element-ui组件库,所以在组件结构及语法上 ...