Java基础——异常的捕获与抛出

‘ 

前言:

  1. Error类(错误)和Exception类(异常)是Throwable类的子类。
  2. 异常分为CheckedException类(编译时异常)和RuntimeException类(运行时异常)。
  3. CheckedException类(编译时异常)必须提前处理。
  4. RuntimeException类(运行时异常)可选择性处理

一、捕获异常;


规则:

  1. try()里的代码A或代码B只要有一个出现异常就会运行catch()里的代码C。
  2. 无论是否有异常都会运行finally里的代码D。
  3. 假如要捕获多个异常,要从小到大。

格式:

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

二、抛出异常;


规则:

  1. 当判断方法存在异常时先通过关键字throws抛出方法异常。
  2. 然后可以选择在主函数中选择捕获异常或继续抛出异常。

例一:捕获异常

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

三、自定义异常;


规则:

  1. 定义自定义异常类,继承至Exception类,重写其中的两个构造方法。
  2. 在异常所在方法的后面添加throws 语句,表示该方法有一个自定义异常类型的异常信息需要处理。
  3. 通过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基础——异常的捕获与抛出》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. CF778C 题解

    题目连接就不放了,人类应该反对阴间题目描述 下面给出一个作为正常人能够看懂的题面描述: 给一棵 \(\text{trie}\) 树,可以删掉某一层的所有节点和边. 被删除的节点的子节点会代替当前节点, ...

  2. Unity3D学习笔记6——GPU实例化(1)

    目录 1. 概述 2. 详论 3. 参考 1. 概述 在之前的文章中说到,一种材质对应一次绘制调用的指令.即使是这种情况,两个三维物体使用同一种材质,但它们使用的材质参数不一样,那么最终仍然会造成两次 ...

  3. 如何学习Vim

    如果你是Linux用户,学习Vim会有很大的好处. 如果你是windows用户,个人建议还是使用vscode. 准备大约40min的学习时间,打开终端,输入下面命令开启自带教程 vimtutor 按操 ...

  4. APISpace 尾号限行API接口 免费好用

    尾号限行是一种为了缓解城市交通压力而催生的交通制度,措施实施以后对城市交通拥堵起到缓解作用.每个地区的尾号限行规定都有所不同,具体的以当地的为准.   尾号限行API,提供已知所有执行限行政策的共计6 ...

  5. docker安装confluence

    目录 一.docker安装 二.破解 三.配置mysql数据库 四.域名配置 五.参考 一.docker安装 1.安装镜像 docker pull atlassian/confluence-serve ...

  6. Gorgerous -「歌词」留言板

    歌者,献祭「心声」,以沐浴「新生」. Oh love. How I miss you every single days when I see you on those streets. Oh lov ...

  7. Note -「序列元素在线段树上的深度」 感悟

    0x01 前言 想法源于一道你谷的毒瘤题目. 这个方面的知识点好像挺新颖的. 于是和 JC 一起想出了该命题的 \(O(n)\) 解法. 0x02 算法本身 总所周知,线段树上的节点都对应表示的原序列 ...

  8. Nginx 的基本概念

    Nginx 简介 什么是 Nginx Nginx 是一个高性能的 HTTP 和 反向代理 web服务器 占用内存少,并发能力强,高性能,热部署 但不支持 Java,Java 得配合 tomcat 使用 ...

  9. Linux 用户管理相关命令

    1 sudo adduser username # 添加用户 2 sudo adduser --system username # 添加系统用户 3 sudo deluser username # 删 ...

  10. WPF 截图控件之画笔(八)「仿微信」

    前言 接着上周写的截图控件继续更新添加 画笔. 1.WPF实现截屏「仿微信」 2.WPF 实现截屏控件之移动(二)「仿微信」 3.WPF 截图控件之伸缩(三) 「仿微信」 4.WPF 截图控件之绘制方 ...