《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

智能推荐

怎么增加android模拟器内存卡,增加android模拟器的内存大小-程序员宅基地

文章浏览阅读548次。Android模拟器启动速度慢是众所周知的,运行也很缓慢如何加速你的Android Emulator呢? 今天Android123给大家支招了,修改Android模拟器RAM大小,运行流畅度加倍,尤其是3.0 honeycomb这种吃RAM的平板没有真机使用emulator简直是煎熬,官方默认才给分配256MB运行内存,远比Xoom这样的1GB RAM的真机要少很多。我们以Windows平台的SD..._手机模拟器加nm卡

Android平台使用MediaCodec压缩摄像头图像时设置码率无效或码率偏差很大的问题解决_mediacodec设置帧率无效-程序员宅基地

文章浏览阅读1.7w次,点赞6次,收藏12次。Android从4.1系统开始,引进了MediaCodec API,支持对图像进行硬编码,但很多读者刚开始使用这套API遇到很多问题,特别是不知道如何正确设置编码器的参数。设置MediaCodec编码器涉及如下几个重要的参数:码率模式(固定码率、可变码率),码率,帧率、I帧间隔,H264的Profile和Level,下面是一段初始化参数的代码: public AvcEncode(int wi..._mediacodec设置帧率无效

c 语言全局变量的声明及用法,《c语言全局变量的用法》-程序员宅基地

文章浏览阅读3.8k次。//全局变量的用法。/*有一个一维数组,内放n个学生的成绩,(n由用户自己指定,通过调用函数实现定义一个数组。)写一个函数,当主函数调用此函数后,能求出平均分,最高分,最低分。*/#includefloat Max,Min; //定义全局变量.//定义数组函数.float array(int n){int i;float a[n];printf("enter %d numbers:");fo..._c语言全局变量的声明

CSS中content可以用到的字符编码_css content 编码-程序员宅基地

文章浏览阅读718次。基本形状▲ 9650 25B2 ► 9658 25BA ► 9658 25BA ▼ 9660 25BC◄ 9668 25C4 10084 2764 9992 2708 ★ 9733 2605✦ 10022 2726 9728 2600 ◆ 9670 25C6 ◈ 9672 25C8▣ 9635 25A3标点,特殊符号« 171 00AB » 187 00BB ‹ 139 008B › 155 009B “ 8220 201C ” 8221 201D‘ 8216 201._css content 编码

java练级第一天(细致了解数据类型)-程序员宅基地

文章浏览阅读257次,点赞9次,收藏2次。这个是小鱼对数据类型的总结,以后自己也会用来复习用,字数不多,都是精华,看完之后甚至还会感叹再来一篇,大家如果感兴趣可以看看

前端-h5直播视频流(xgplayer 篇)_xgplayer.js-程序员宅基地

文章浏览阅读9.2k次,点赞2次,收藏20次。前言1、通过接口获取媒体流地址或静态地址;(省略)2、通过 西瓜播放器插件xgplayer + video标签实现直播本质:始终在调用流地址实现视频播放(个人理解)使用template <div ref="video" id="mmid" v-show="islivea" ></div>安装西瓜播放器插件官网$ npm install xgplayer$ npm install xgplaye_xgplayer.js

随便推点

java 过滤器跳转页面_过滤器Filter(拦截jsp页面的跳转)案例:-程序员宅基地

文章浏览阅读1.2k次。创建一个 Filter , class类: 其继承于 接口 Filte(接口导包:import javax.servlet.Filter;)在 web.xml 文件中配置并映射该 Filter. 其中 url-pattern 指定该 Filter 可以拦截哪些资源,即可以通过哪些 url 访问到该 Filter,并进行拦截;案例:username=Tom,password=1234,设计Filt..._过滤器里怎么控制页面的跳转

ICCV2015跟踪算法SRDCF原理及代码解析_srdcf算法问题-程序员宅基地

文章浏览阅读1.2w次,点赞10次,收藏45次。文章和代码下载地址:Martin Danelljan, Gustav Häger, Fahad Khan, Michael Felsberg. "Learning Spatially Regularized Correlation Filters for Visual Tracking." ICCV (2015). [paper] [project]一、创新点:1、加入了空间正则来解决..._srdcf算法问题

k8s集群中service的域名解析、pod的域名解析_spec:servicename-程序员宅基地

文章浏览阅读1.6w次,点赞12次,收藏35次。在k8s集群中,service和pod都可以通过域名的形式进行相互通信,换句话说,在k8s集群内,通过service和pod的域名,可以直接访问内部应用,不必在通过service ip地址进行通信,一般的,我们创建service的时候不建议指定service的clusterIP,而是让k8s自动为service分配一个clusterIP,这样,service的IP是自动分配,但是service名字总是固定的吧,这样在集群内部就可以直接通过service的域名来连接即可,如前端pod应用直接通过service_spec:servicename

Flutter正在被悄悄放弃?浅析Flutter的未来_谷歌放弃flutter的原因-程序员宅基地

文章浏览阅读1.4k次。在现如今快速迭代的开发大环境下,**能够实现“一套代码、多端运行**”是众多互联网开发团队的梦想,阿里、腾讯也都做过很多尝试,美团也一样!重点说说美团的开发团队,他们做了非常多跨平台开发框架的尝试:React Native、PWA、Weex 等等。但都没有得到很好的解决,直至遇到 Flutter_谷歌放弃flutter的原因

cad标注桩号lisp_道路桩号标注(批量标注、任意点标注) - AutoCAD与GIS测绘 - CAD论坛 - 明经CAD社区 - 标注,道路中桩,文本,lisp - Powered by Dis...-程序员宅基地

文章浏览阅读2.5k次。本帖最后由 skg123 于 2014-8-29 09:36 编辑[code="lisp];By luozegang 葛洲坝基础公司;2010-5-9 修改了小数保留位数(保留0位);2011-6-15修改了尾桩号小数位数(保留3位);设置捕捉,标注线不乱连接,增加桩号步长设置。(terpri)(If (= (Tblsearch "layer" "道路桩号") nil)(Command "laye..._读取cad线路外任意点的里程桩号和左右偏距

推荐文章

热门文章

相关标签