标签分类 技术文章:
当前位置:首页 > Java技术文章 > java简单自定义异常实例代码

java自定义异常实例详解

  • 发布时间:
  • 作者:码农之家原创
  • 点击:151

这篇文章主要知识点是关于java、自定义、异常、详解、Java异常学习之自定义异常详解 的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

精通Java并发编程
  • 类型:Java大小:200.7 MB格式:PDF出版:人民邮电出版社作者:哈维尔
立即下载

更多Java相关的学习资源可以参阅 Java电子书程序设计电子书 等栏目。

java简单自定义异常实例代码

此处主要便于对异常类的使用上,方便大家理解,以一个公约数为例做了一个简单自定义异常的处理代码如下:

如果操作者输入数字符合要求程序运行,不符合则抛出错误。

package 自定义异常简单实例;
import java.util.Scanner;
public class CommonDivisor {
 static Scanner in;
 public void gongyue(int m,int n) throws Exception{
 if(m<0||n<0) {
 throw new Exception("所求数都不能为负数");
 }
 else {
 int p,o=0;
 if(m<n) {
 p=m;
 }
 else {
 p=n;
 }
 for(int i=1;i<=p;i++) {
 if(m%i==0&&n%i==0) {
 o=i;
 }
 }
 System.out.println("所输入的两个数的最大公约数为"+o);
 }
 }
 public static void main(String args[]){
 in=new Scanner(System.in);
 CommonDivisor a=new CommonDivisor();
 int p1,p2;
 System.out.println("请输入两个数系统会求输入数的公约数");
 p1=in.nextInt();
 p2=in.nextInt();
 try {
 a.gongyue(p1, p2);
 } catch(Exception e) {
 e.printStackTrace(); 
 }
 }
 
}

异常类中方法可以直接调用——直接定义对象直接使用方法。

异常类使用时也可以自定义一个异常类直接继承Exception类代码如下

public class MyException extends Exception { 
 public MyException(String ErrorMessagr) { 
 super(ErrorMessagr); 
 }
} //主函数中定义异常语句时可直接使用MyException操作

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。

Java异常学习之自定义异常详解

前言

哎呀,妈呀,又出异常了!俗话说:“代码虐我千百遍,我待代码如初恋”。

Java异常学习之自定义异常详解

小Alan最近一直在忙着工作,已经很久没有写写东西来加深自己的理解了,今天来跟大家聊聊Java异常。Java异常的体系什么的,理论知识啥的我就懒得去BB太多了,是个搞Java开发的都知道,只是可能理解的不深,这个大家可以自己多看看资料,我就简单的说说。

什么是异常?

我不知道大家都是怎么去理解的,我的理解很简单,那就是不正常的情况,比如我现在是个男的,但是我却有着女人所独有的东西,在我看来这尼玛肯定是种异常,简直不能忍。就拿上面的异常图片来说,你应该是有小弟弟的,但你却没有小弟弟,这就是不正常的情况了,所以Java这个妹子会告诉你,你应该有小弟弟的才能办事,或者你没小弟弟就别来办事,你没小弟弟也要强上别人,那也没法玩啊是吧?

常说我们人的祖宗是猿,异常Exception的祖宗那就是Throwable类了,除了Exception类外,Throwable还有一个子类Error 。Error这玩意就不说了,你如果遇到了它你可以把电脑砸了,呼呼呼...跟大家开个玩笑,反正这玩意不是我们程序能处理的,它在程序处理的范畴之外。至于异常Exception又分为傻傻啥的,我就不BB了,再BB就B到这上面了。

给大家随便列举几个异常:

RuntimeException:你不能跑得足够快,可能因为你太胖了。关掉你的电脑,出门锻炼吧。

NullPointerException:你没有狗。请你先找一只狗,比如一只布烈塔尼獵犬,然后再试一次。

IndexOutOfBoundsException:你把食指放在了无法接收的地方,重新放置,再试一次。

FileNotFoundException:一名木匠应该总是知道他的工具放在哪里。

NotSerializableException:你正试图把一部电影改成电视剧。

这尼玛什么鬼?反正我是没看懂。还好今天我要理解的对象不是上面的这些玩意,搞错对象就不好了,看看就好了,但是别乱搞,男人都懂的,啧..啧..啧...。

自定义异常

今天我们要来理解的是什么是自定义异常,为什么要使用自定义异常,使用自定义异常有哪些好处,有哪些不好的地方?

要使用自定义异常就跟你和女朋友相处一样的,首先你得知道你为什么要跟你女朋友在一起,你女朋友有哪些好处,有哪些不好的地方,再来和你女朋友谈婚论嫁过一辈子,我们就先来说说这些问题,最后再来看怎么使用自定义异常,自定义异常的实现和使用非常简单,关键还是理解why的内容。

为什么要使用自定义异常,有什么好处?

      1.我们在工作的时候,项目是分模块或者分功能开发的 ,基本不会你一个人开发一整个项目,使用自定义异常类就统一了对外异常展示的方式。

      2.有时候我们遇到某些校验或者问题时,需要直接结束掉当前的请求,这时便可以通过抛出自定义异常来结束,如果你项目中使用了SpringMVC比较新的版本的话有控制器增强,可以通过@ControllerAdvice注解写一个控制器增强类来拦截自定义的异常并响应给前端相应的信息(关于springMVC控制器增强的知识有空再和大家分享)。

      3.自定义异常可以在我们项目中某些特殊的业务逻辑时抛出异常,比如"中性".equals(sex),性别等于中性时我们要抛出异常,而Java是不会有这种异常的。系统中有些错误是符合Java语法的,但不符合我们项目的业务逻辑。

      4.使用自定义异常继承相关的异常来抛出处理后的异常信息可以隐藏底层的异常,这样更安全,异常信息也更加的直观。自定义异常可以抛出我们自己想要抛出的信息,可以通过抛出的信息区分异常发生的位置,根据异常名我们就可以知道哪里有异常,根据异常提示信息进行程序修改。比如空指针异常NullPointException,我们可以抛出信息为“xxx为空”定位异常位置,而不用输出堆栈信息。

说完了为什么要使用自定义异常,有什么好处,我们再来看看自定义异常的毛病:

毋庸置疑,我们不可能期待JVM(Java虚拟机)自动抛出一个自定义异常,也不能够期待JVM会自动处理一个自定义异常。发现异常、抛出异常以及处理异常的工作必须靠编程人员在代码中利用异常处理机制自己完成。这样就相应的增加了一些开发成本和工作量,所以项目没必要的话,也不一定非得要用上自定义异常,要能够自己去权衡。

最后,我们来看看怎么使用自定义异常:

在 Java 中你可以自定义异常。编写自己的异常类时需要记住下面的几点。

       •所有异常都必须是 Throwable 的子类。

       •如果希望写一个检查性异常类,则需要继承 Exception 类。

       •如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。

可以像下面这样定义自己的异常类:

class MyException extends Exception{ }

我们来看一个完整的实例:

package com.czgo.exception;

/**
 * 自定义异常类(继承运行时异常)
 * @author AlanLee
 * @version 2016/11/26
 */
public class MyException extends RuntimeException {

 private static final long serialVersionUID = 1L;

 /**
  * 错误编码
  */
 private String errorCode;

 /**
  * 消息是否为属性文件中的Key
  */
 private boolean propertiesKey = true;

 /**
  * 构造一个基本异常.
  *
  * @param message
  *   信息描述
  */
 public MyException(String message)
 {
  super(message);
 }

 /**
  * 构造一个基本异常.
  *
  * @param errorCode
  *   错误编码
  * @param message
  *   信息描述
  */
 public MyException(String errorCode, String message)
 {
  this(errorCode, message, true);
 }

 /**
  * 构造一个基本异常.
  *
  * @param errorCode
  *   错误编码
  * @param message
  *   信息描述
  */
 public MyException(String errorCode, String message, Throwable cause)
 {
  this(errorCode, message, cause, true);
 }

 /**
  * 构造一个基本异常.
  *
  * @param errorCode
  *   错误编码
  * @param message
  *   信息描述
  * @param propertiesKey
  *   消息是否为属性文件中的Key
  */
 public MyException(String errorCode, String message, boolean propertiesKey)
 {
  super(message);
  this.setErrorCode(errorCode);
  this.setPropertiesKey(propertiesKey);
 }

 /**
  * 构造一个基本异常.
  *
  * @param errorCode
  *   错误编码
  * @param message
  *   信息描述
  */
 public MyException(String errorCode, String message, Throwable cause, boolean propertiesKey)
 {
  super(message, cause);
  this.setErrorCode(errorCode);
  this.setPropertiesKey(propertiesKey);
 }

 /**
  * 构造一个基本异常.
  *
  * @param message
  *   信息描述
  * @param cause
  *   根异常类(可以存入任何异常)
  */
 public MyException(String message, Throwable cause)
 {
  super(message, cause);
 }
 
 public String getErrorCode()
 {
  return errorCode;
 }

 public void setErrorCode(String errorCode)
 {
  this.errorCode = errorCode;
 }

 public boolean isPropertiesKey()
 {
  return propertiesKey;
 }

 public void setPropertiesKey(boolean propertiesKey)
 {
  this.propertiesKey = propertiesKey;
 }
 
}

使用自定义异常抛出异常信息:

package com.czgo.exception;

public class MyExceptionTest {

 public static void main(String[] args) {
  
   String[] sexs = {"男性","女性","中性"};
   for(int i = 0; i < sexs.length; i++){
    if("中性".equals(sexs[i])){
     throw new MyException("你全家都是中性!");
    }else{
     System.out.println(sexs[i]);
    }
   } 
 }
}

运行结果:

Java异常学习之自定义异常详解 

就是这么简单,我的话实现了很多构造函数,可以根据实际业务需求去抛出相应的自定义异常。

结束语

现在搞软件开发的人越来越多了,高手数不胜数,菜鸟也数不胜数,把这行的行情搅的比较混乱。所以初入这行的哥们一定要有危机意识。公司都想要工资开的不高,又能做一大把事情的人,搞开发很累,但是在当前的环境下,一定要不断的去提高自己。到了洗牌的时候,可能被淘汰的人里面就有你,除非你去做别的,不然就硬着头皮干几年把技术搞扎实,该复习的知识就多多复习,该学习的知识就多多学习,基础扎实了就去看看底层的东西,比如理解理解Java虚拟机,研究研究Spring源码。多关注关注前沿技术的发展,因为你现在所用的东西或许某一天大部分公司就不用了,或者根本满足不了项目的需求,这都是有可能的。希望大家都能混出自己的一片天地,小Alan现在也还在吃土中,所以大家都在一起前行,这世界终究是属于年轻人的,别气馁。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对码农之家的支持。

以上就是本次给大家分享的关于Java的全部知识点内容总结,大家还可以在下方相关文章里找到java实现杨辉三角两种输出、 java中jvm虚拟机栈的作用总、 java实现的密码强度检测功、 等java文章进一步学习,感谢大家的阅读和支持。

上一篇:SpringBoot实现前端验证码图片生成和校验的实例讲解

下一篇:SpringCloud中Ribbon的使用方法

展开 +

收起 -

学习笔记
网友NO.515777

Java抛出异常与自定义异常类应用示例

本文实例讲述了Java抛出异常与自定义异常类。分享给大家供大家参考,具体如下: 异常处理常用方法: 常用的异常处理方法有: 一、try()catch() 语句 二、throw / throws 语句 三、自定义异常类 用途: 众所周知,当程序运行过程中,如果遇到了错误(比如数组下标越界,空指针等)程序就会自动终止,但这种错误一般是偶然的,可能是用户输入不呵呵程序编写者的意图导致,而不是程序本身问题,这是我们要做的,是让操作者知道发生了什么事情,而不是直截了当的结束程序,这时我们就用到了异常处理(语句发生错误时,只抛出异常,而不结束程序)。 这里一源码为例 详细介绍一下: 一、try()catch() 语句: 原理剖析: 将可能发生异常的语句放在 tr() 中,运行到try这一行时,如果无异常,则正常执行 try() 中语句,执行完 try() 内语句之后,程序自动跳过 catch() 语句,去执行 catch() 之后的语句。 反之,如果在执行 try() 内语句时,出现异常情况,则执行跳转到catch()语句中,进行异常处理,一处处以之后不再回到try的()内,而是结束try()catch()内的所有操作,去运行后面的catch语句后面的语句。 举个例子就明白了: public class ClassText { public static void main(String[] args) { int textArray[] = new int[3];//用于测试数组越界异常的数组 int j;//用来……

网友NO.688702

Java自定义异常类的实例详解

Java自定义异常类的实例详解 为什么要自己编写异常类?假如jdk里面没有提供的异常,我们就要自己写。我们常用的类ArithmeticException,NullPointerException,NegativeArraySizeException,ArrayIndexoutofBoundsException,SecurityException这些类,都是继续着RuntimeException这个父类,而这个父类还有一个父类是Exception。那么我们自己写异常类的时候,也是继续Exception这个类的。 实践: class MyException extends Exception { //继续了Exception这个父类private int detail;MyException(int a) {detail = a;}public String toString() {return "MyException[" + detail + "]";}}class ExceptionDemo {static void compute(int a) throws MyException {System.out.println("调用 compute(" + a + ")");if(a 10)throw new MyException(a);System.out.println("常规退出 ");}public static void main(String args[]) {try {compute(1);compute(20);} catch (MyException e) {System.out.println("捕捉 " + e); //这样就可以用自己定义的类来捕捉异常了}}} 如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持! ……

网友NO.243865

Java如何自定义异常打印非堆栈信息详解

前言 在学习Java的过程中,想必大家都一定学习过异常这个篇章,异常的基本特性和使用这里就不再多讲了。什么是异常?我不知道大家都是怎么去理解的,我的理解很简单,那就是不正常的情况,比如我现在是个男的,但是我却有着女人所独有的东西,在我看来这尼玛肯定是种异常,简直不能忍。想必大家都能够理解看懂,并正确使用。 但是,光学会基本异常处理和使用不够的,在工作中出现异常并不可怕,有时候是需要使用异常来驱动业务的处理,例如: 在使用唯一约束的数据库的时候,如果插入一条重复的数据,那么可以通过捕获唯一约束异常DuplicateKeyException来进行处理,这个时候,在server层中就可以向调用层抛出对应的状态,上层根据对应的状态再进行处理,所以有时候异常对业务来说,是一个驱动方式。 有的捕获异常之后会将异常进行输出,不知道细心的同学有没有注意到一点,输出的异常是什么东西呢? 下面来看一个常见的异常: java.lang.ArithmeticException: / by zero at greenhouse.ExceptionTest.testException(ExceptionTest.java:16) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.……

<
1
>

Copyright 2018-2019 xz577.com 码农之家

版权责任说明