在Java中已经提供了大量的异常类,但是这些异常类有时野很难满足开发者的要求,所以用户可以根据自己的需要来定义自己的异常类。但自定义的异常类必须继承自Exception或其子类。

可以自定义出的问题称为自定义异常。对于除数为0的情况,可以用ChuShu0异常来表示,除数为0这种异常在java中并没有定义过。那就按照java异常的创建思想,面向对象,将除数为0进行自定义描述,并封装成对象。这种自定义的问题描述称为自定义异常。

code1中体现→自定义类继承Exception或者其子类,通过构造函数定义异常信息。

code1

Class ChuShu0 extends Exception{
     DemoException(String message){
          super(message);//调用Exception有参的构造方法
     }
}

在实际开发中  如果没有特殊要求,自定义的异常类只需继承Exception类,在构造方法中使用super()语句调用Exception的构造方法即可。

既然定义了 自定义的异常类 ,那么怎么使用呢? 其实使用方法和Exception类及其子类是一样的用法的,还是那2种处理方式。

code2中体现→下面来看下除数为0的异常演示

code2

package day10;
class ChuShu0Exception extends Exception{
public ChuShu0Exception(String msg){
super(msg);
}
}
public class TestException3 { public static void main(String[] args){
try{
int result = divide(4,0);
System.out.println(result);
}catch(Exception e){
e.printStackTrace();
}
}
public static int divide(int a , int b ) throws Exception {
if(b==0){
throw new ChuShu0Exception("除数为0");
}
int result = a/b ;
return result ;
}
}

运行结果:

day10.ChuShu0Exception: 除数为0

at day10.TestException3.divide(TestException3.java:19)

at day10.TestException3.main(TestException3.java:11)

P.S.

code3中体现→如果自定义类继承的是RuntimeException,那么运行时异常的特点是Java编译器不会对其进行检查,也就是说,当程序中出现这类异常时,既没有受用try...catch语句捕获或使用throws关键字声明抛出,程序也能编译通过,如果有异常产生,则异常将由JVM进行处理(继续往上抛,直至抛给JVM)

code3

package day10;
class ChuShu0Exception extends RuntimeException{
public ChuShu0Exception(String msg){
super(msg);
}
}
public class TestException3 { public static void main(String[] args){
//try{
int result = divide(4,0);
System.out.println(result);
//}catch(Exception e){
// e.printStackTrace();
//}
}
public static int divide(int a , int b ){
if(b==0){
throw new ChuShu0Exception("除数为0");
}
int result = a/b ;
return result ;
}
}

运行结果:

Exception in thread "main" day10.ChuShu0Exception: 除数为0

at day10.TestException3.divide(TestException3.java:19)

at day10.TestException3.main(TestException3.java:11)

交流企鹅:654249738,和自学者交流群:517284938

JAVA_SE基础——55.自定义异常类的更多相关文章

  1. java基础之自定义异常类及throw和throws的区别

    一.异常的架构: Throwable类:所以异常类都是Throwable的子类,它派生两个子类 Error和Exception. Error类:表示仅靠程序本身无法恢复的的严重错误,比如内存溢出,虚拟 ...

  2. Java基础(55):Exception类详解(转)

    Java中的异常 Exception java.lang.Exception类是Java中所有异常的直接或间接父类.即Exception类是所有异常的根类. 比如程序: public class Ex ...

  3. JAVA_SE基础——70.Math类

    package cn.itcast.other; /*  Math 数学类, 主要是提供了很多的数学公式.    abs(double a)  获取绝对值  ceil(double a)  向上取整 ...

  4. JAVA_SE基础——68.RunTime类

    RunTime类代表Java程序的运行时环境,每一个Java程序都有一个与之对应的Runtime实例,应用程序通过该对象与运行时环境相连,应用程序不能创建自己的Runtime实例,但可以通过getRu ...

  5. JAVA_SE基础——67.System类

    System类对大家都不陌生吧! 以前经常需要打印结果时使用的都是"System.out.println()"语句,这句代码中就使用了System类.System类定义了一些与系统 ...

  6. JAVA_SE基础——66.StringBuffer类 ③

    如果需要频繁修改字符串 的内容,建议使用字符串缓冲 类(StringBuffer). StringBuffer 其实就是一个存储字符 的容器. 容器的具备 的行为 常用方法 String  增加 ap ...

  7. JAVA_SE基础——65.StringBuffer类 ②

    字符串特点:字符串是常量:它们的值在创建之后不能更改.    字符串的内容一旦发生了变化,那么马上会创建一个新 的对象.    注意: 字符串的内容不适宜频繁修改,因为一旦修改马上就会创建一个新的对象 ...

  8. JAVA_SE基础——64.StringBuffer类 ①

     字符串特点:字符串是常量:它们的值在创建之后不能更改 字符串的内容一旦发生了变化,那么马上会创建一个新的对象. 注意:字符串的内容不适宜频繁修改,因为一旦修改马上就会创建一个新的对象. publ ...

  9. JAVA_SE基础——71.Random类制作随机验证码

    public class Demo5 { public static void main(String[] args) { char[] arr={'s','b','g','h','a','c'}; ...

随机推荐

  1. NOIP2017划水记

    考完好久后才想起来写个总结 Day0 在Luogu上码了几道模板题 然后就忍不住和机房的人开始颓了本来说要复习一下的 将军棋到CS,一直在颓CS打的还不错 晚上开了几把后就昏昏沉沉睡了 Day1 好紧 ...

  2. [BZOJ1607] [Usaco2008 Dec] Patting Heads 轻拍牛头 (数学)

    Description 今天是贝茜的生日,为了庆祝自己的生日,贝茜邀你来玩一个游戏. 贝茜让N(1≤N≤100000)头奶牛坐成一个圈.除了1号与N号奶牛外,i号奶牛与i-l号和i+l号奶牛相邻.N号 ...

  3. Win10+QT5.7.1搭建opencv开发环境

    一.准备工作: 1下载Qt5.7.1软件qt-opensource-windows-x86-mingw530-5.7.1.exe(http://download.qt.io/official_rele ...

  4. git上传项目到github简易步骤

    第一步: 在github创建仓库,创建完成进入该仓库,仓库地址如:https://github.com/winerss/wcMall格式 第二步:使用git,cd到本地项目目录下,执行git明令: g ...

  5. Java对于特殊字符做间隔读入的处理(1.3.4)

    先读进字符串,然后再用split分割,注意当默认间隔符有其他意义时,要用\转义字符转义 这道题是pat的一道题,主要读入方法看前面就行了 import java.util.Scanner; publi ...

  6. IntelliJ IDEA 源值1.5已过时,将在未来所有版本中删除

    1. 修改Maven的Settings.xml文件添加如下内容 <profile> <id>jdk-1.8</id> <activation> < ...

  7. jmeter--简单的接口测试(GET/POST)

    最近在学习接口测试,本文就简单的谈一谈对接口相关知识的理解. 一.什么是接口? 程序接口:由一套陈述.功能.选项.其它表达程序结构的形式.以及程序师使用的程序或者程序语言提供的数据组成(百度百科定义) ...

  8. Java生成图片验证码

    在日常我们在登录或者注册的时候,网页上会出现验证码让我们填写,其实利用jdk提供给我们的工具类完全可以模拟出来一个生成验证码图片的功能. package util; import javax.imag ...

  9. 笔记:Hibernate 拦截器和事件

    Hibernate 在执行持久化的过程中,应用程序通常无法参与其中,通过事件框架,Hibernate 允许应用程序能响应特定的内部事件,从而允许实现某些通用的功能,或者对 Hibernate 进行扩展 ...

  10. nginx+lua 根据指定路径反向代理

    location /imgproxytest{ if ($uri ~ ".*\.(jpg|png|jpeg|bmp|gif|swf|css)$"){ rewrite_by_lua ...