《Java基础——异常的捕获与抛出》_java捕获异常和抛出异常-程序员宅基地

技术标签: Java  java  开发语言  

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: 用户名小于三位
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Dustpolaris/article/details/126941221

智能推荐

FreeModbus RTU 移植指南_freemodbus临界区保护-程序员宅基地

文章浏览阅读3.5k次,点赞5次,收藏39次。FreeModbus是一个免费纯 C 语言支持 Modbus RTU/ASCII支持 Modbus TCP本文介绍 Modbus RTU 移植。裸机Keil MDK 编译器Cortex-M3 内核芯片(LPC1778/88)1.体系架构相关项目描述INLINE宏,编译器相关,内联指令或关键字宏,按照 C 代码编译宏,进入临界区和退出临界区BOOLUCHARCHARUSHORTSHORTULONGLONG数据类型TRUEFALSE。_freemodbus临界区保护

132.【MySQL_进阶篇】-程序员宅基地

文章浏览阅读4.2w次。存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。Innodb是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后,Innodb是默认的MySQL存储引擎。MyISAM是MySQL早期的默认存储引擎。Memory引擎的表数据时存储在内存中的,由于受到硬件问题、或断点问题的影响,只能将这些表作为临时表或缓存使用。在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。

青铜到王者,9本最好的Python从入门到进阶的书_明解 python-程序员宅基地

文章浏览阅读772次。以前都知道Python是一个技巧性非常高的编程语言,但是看了这本书之后才知道原来技巧性可以这么高,这本书的作者把很多代码都变成了一行,非常简洁,虽然有一些有哗众取宠的感觉,但是帮助你了解python的特性以及一些不错的功能还是非常不错的,尤其是关键的时候可以装逼一把,把别人10几行的代码一行搞定,适合进阶的同学阅读。本书最大的特点就是"实战", 非常贴进实战,里面有100个实战的案例,很多都是有视频讲解的,而且还有大量的Python的面试题目精选,以及针对的100个习题;很多学Python的同学,_明解 python

Python数据处理039:数据分析之csv文件_python 水质分析 water_potability.csv-程序员宅基地

文章浏览阅读6.7k次,点赞3次,收藏28次。Python数据分析之csv文件_python 水质分析 water_potability.csv

LiveQing推流RTMP直播点播流媒体服务播放回调鉴权的配置及示例_流媒体鉴权-程序员宅基地

文章浏览阅读711次。配置播放回调鉴权播放鉴权第三方回调地址, 服务相关鉴权通过后再回调, HTTP GET, 请求参数(透传流地址参数, app, call, name, addr), 响应(200 - 鉴权通过, 其它 - 鉴权不通过)第一部分:调试环境流媒体服务视频源IP: 192.168.2.135客户端访问IP:192.168.2.136回调鉴权接口IP: 192.168.1.11第二部分:调用示例1、播放地址 : http://192.168.2.135:10080/flv/vlive/_流媒体鉴权

C++ 多线程学习(1) ---- 线程的创建_c++ 创建线程-程序员宅基地

文章浏览阅读658次,点赞2次,收藏2次。计算机术语中的并发,指的是单个系统里同时执行多个独立的活动,而不是顺序一个个执行,对于单核CPU来说,某个时刻只可能处理一个任务,但是它却不是顺序执行的一个个任务,而是对CPU进行分时复用,一直在任务之间切换,每个任务完成一部分就去执行下一个任务,看起来任务在并行发生,虽然不是严格意义上执行多个任务,但是我们仍然称之为。注意传递的参数的生命周期,传递的参数 temp,会在主函数执行完毕之后被回收,假设上面的线程使用的是线程分离的模式运行,打印出的 temp 将是错误的结果。_c++ 创建线程

随便推点

html5 accept encoding,html - How to Specify a Vary: Accept-Encoding header? - Stack Overflow-程序员宅基地

文章浏览阅读79次。I found a helpful post to speed up wordpress website or blog https://www.keycdn.com/blog/speed-up-wordpress/With some other optimizations, I am also using below code on my site in .htaccess file (usua..._html5设置accept-encoding

在docker容器内 获取swarm节点IP_docker swarm 指定容器ip-程序员宅基地

文章浏览阅读566次。想在应用内获取当前swarm节点的IP使用.net 6框架 vs2022开发工具。_docker swarm 指定容器ip

国产的文档开发控件,spire.office新版本,一起来看看~_spire.office developer subscription(开发版本)-程序员宅基地

文章浏览阅读922次。Spire.Office 8.6.0更新已发布。在该版本中,Spire.PDF支持转换多页PDF文档为单个SVG文件;Spire.XLS新增了优化删除行的速度的方法;Spire.Presentation支持为TextFrame设置栏数。此外,许多已知问题也在该版本中被成功修复。_spire.office developer subscription(开发版本)

阿里云 oss 文件不能下载 只能直接打开的解决方案_oss无法下载-程序员宅基地

文章浏览阅读1.3w次。阿里云的oss,直接上传后,可以访问,直接是打开有一些程序,需要直接能下载设置oss文件的Content-Disposition属性值为attachment就是直接打开了但oss有很多文件,不能批量设置现在可以用ossutil批量操作=====原理:通过ossutil连接到oss,然后通过命令行,直接修改:Content-Disposition值为attachmentossutil支持多系统===..._oss无法下载

阿里云企业邮箱的stmp服务器地址_阿里云stmp地址-程序员宅基地

文章浏览阅读5k次。使用phpmailer发送邮件服务器地址:smtp.mxhichina.com阿里云邮箱不用获取授权码就可以发送邮件,所以设置发件人的邮箱地址和授权码时直接填写发件人的邮箱和邮箱密码就好了_阿里云stmp地址

c++ 判断数学表达式有效性_高考数学大题如何&quot;保分&quot;?学霸教你六大绝招!...-程序员宅基地

文章浏览阅读136次。高中里有句话,得数学者得高考,此言不虚,清北学生难见数学不足140的,反之,数学140多分的除非特别偏科,大学一般不会差。那么我们怎么“得数学”呢?针对目前高三的学生:如果你的数学水平不高,那么,你需要保住一定的分才能提升;如果中游水平,你需要保住一定的分才能突破;如果你是数学优秀生,你需要保住一定的分才能不败。保分大题,是数学学科的“腰”,你发力的轴承。保分大题的范围就是除去解析几何与..._jinny xie 北大数学