精华内容
下载资源
问答
  • Java 异常 自定义打印内容

    千次阅读 2019-10-27 15:53:45
    Java 异常 自定义打印内容 背景:在开发中,我们可能会使用到自定义异常,但是,这个自定义异常在打印日志时,往往打印的内容比较多。 1.自定义异常打印内容 可以看到,虽然我们使用的是自定义异常,但是当抛出时...

    Java 异常 自定义打印内容

    背景:在开发中,我们可能会使用到自定义异常,但是,这个自定义异常在打印日志时,往往打印的内容比较多。

    1.自定义异常打印内容

    在这里插入图片描述

    可以看到,虽然我们使用的是自定义异常,但是当抛出时,还是会打印出堆栈的全部信息。

    2.查看源码

    通过查看源码,我们可以得知,当抛出异常时,程序会调用此异常的fillInStackTrace方法,但是,大部分异常都没有对该方法做处理。基本是调用super的方法。

    在这里插入图片描述

    可以看到,此方法的父类实现,是在Throwable类中。而且此方法加了synchronized锁,查看堆栈的信息。那么必然会影响性能。

    底层实现是native,调用C语言的方法。

    3.解决方法

    ①.编写自定义异常

    // 此处为lombok注解
    @Getter
    @AllArgsConstructor
    public enum ExceptionEnum {
        AUTH(1, "认证异常")
        ;
        private Integer code;
        private String msg;
    }
    
    
    public class AppException extends RuntimeException {
        public AppException(ExceptionEnum exceptionEnum) {
            super(exceptionEnum.getMsg());
        }
        
        // 关键
        @Override
        public Throwable fillInStackTrace() {
            return this;
        }
    
        public static void main(String[] args) {
            throw new AppException(ExceptionEnum.AUTH);
        }
    }
    

    ②.重写fillInStackTrace方法

    重写该方法后,会只打印第一条信息,这样不仅可以节省日志空间,方便查看,更可以提高部分性能。

        @Override
        public Throwable fillInStackTrace() {
            return this;
        }
    
    

    ③.打印内容

    可以看到,打印内容明显变少

    在这里插入图片描述

    展开全文
  • 你的程序总有一天会崩溃掉,在崩溃掉的时候我们要知道它在哪,为了什么而崩溃掉,数据的保存或者...下面这篇文章主要给大家介绍了关于Java异常学习之自定义异常的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
  • Java自定义异常

    2020-12-22 16:41:21
    Java异常机制可以保证程序更安全和更健壮。虽说Java类库已经提供很多可以直接处理异常的类,但是有时候为了更加地捕获和处理异常以呈现更好的用户体验,需要开发者自定义异常。本文是探讨如何自定义异常以及使用...
  • 主要给大家介绍了关于Java如何自定义异常打印非堆栈信息的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
  • 主要为大家详细介绍了java自定义异常打印内容的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Java 自定义异常和抛出异常的练习demo
  • 自定义异常1.1 定义方式1.2 自定义异常的抛出1.3 自定义异常的捕获2. 异常中的方法覆盖 1. 自定义异常 1.1 定义方式 ① 必须继承自Exception或Exception的子类,常用RuntimeException ② 必须提供无参构造方法; ③...
  • Java自定义异常示例

    千次阅读 2020-05-31 00:12:04
    Java中,有两种类型的异常-已检查和未检查的异常。 这是摘要: 已检查 -扩展java.lang.Exception ,以获取可恢复的条件,尝试尝试捕获异常,并编译错误。...自定义检查异常 注意 一些流行的检查异常: ...
    java-custom-exception

    在Java中,有两种类型的异常-已检查和未检查的异常。 这是摘要:

    1. 已检查 -扩展java.lang.Exception ,以获取可恢复的条件,尝试尝试捕获异常,并编译错误。
    2. 未选中 -扩展java.lang.RuntimeException ,以恢复不可恢复的条件,例如编程错误,无需try-catch,运行时错误。

    1.自定义检查异常

    注意
    一些流行的检查异常: IOExceptionFileNotFoundException

    1.1如果客户端能够从异常中恢复,请使其成为已检查的异常。 要创建自定义的检查异常,请扩展java.lang.Exception

    NameNotFoundException.java
    package com.mkyong.examples.exception;
    
    public class NameNotFoundException extends Exception {
    
        public NameNotFoundException(String message) {
            super(message);
        }
    
    }

    1.2对于检查的异常,您需要尝试捕获异常。

    CustomerService.java
    package com.mkyong.examples;
    
    import com.mkyong.examples.exception.NameNotFoundException;
    
    public class CustomerService {
    
        public Customer findByName(String name) throws NameNotFoundException {
    
            if ("".equals(name)) {
                throw new NameNotFoundException("Name is empty!");
            }
    
            return new Customer(name);
    
        }
    
        public static void main(String[] args) {
    
            CustomerService obj = new CustomerService();
    
            try {
    
                Customer cus = obj.findByName("");
    
            } catch (NameNotFoundException e) {
                e.printStackTrace();
            }
    
        }
    }

    输出量

    com.mkyong.examples.exception.NameNotFoundException: Name is empty!
    	at com.mkyong.examples.CustomerService.findByName(CustomerService.java:10)
    	at com.mkyong.examples.CustomerService.main(CustomerService.java:39)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
    

    2.自定义未经检查的异常

    注意
    一些流行的未经检查的异常: NullPointerExceptionIndexOutOfBoundsExceptionIllegalArgumentException

    2.1如果客户端无法采取任何措施从异常中恢复,请将其设置为未经检查的异常。 要创建自定义的未经检查的异常,请扩展java.lang.RuntimeException

    ListTooLargeException.java
    package com.mkyong.examples.exception;
    
    public class ListTooLargeException extends RuntimeException{
    
        public ListTooLargeException(String message) {
            super(message);
        }
    
    }

    2.3对于未检查的异常,尝试捕获异常是可选的。

    CustomerService.java
    package com.mkyong.examples;
    
    import com.mkyong.examples.exception.ListTooLargeException;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class CustomerService {
    
        public void analyze(List<String> data) {
    
            if (data.size() > 50) {
                //runtime exception
                throw new ListTooLargeException("List can't exceed 50 items!");
            }
    
    		//...
        }
    
        public static void main(String[] args) {
    
            CustomerService obj = new CustomerService();
    
    		//create 100 size
            List<String> data = new ArrayList<>(Collections.nCopies(100, "mkyong"));
    
            obj.analyze(data);
    
    
        }
    }

    输出量

    Exception in thread "main" com.mkyong.examples.exception.ListTooLargeException: List can't exceed 50 items!
    	at com.mkyong.examples.CustomerService.analyze(CustomerService.java:25)
    	at com.mkyong.examples.CustomerService.main(CustomerService.java:38)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
    

    参考文献

    1. 未经检查的例外情况-争议
    2. java.lang.RuntimeException和java.lang.Exception之间的区别

    翻译自: https://mkyong.com/java/java-custom-exception-examples/

    展开全文
  • 自己编写异常类型 ,自定义错误异常进行全局捕捉。实现项目全局的拦截定义输出。。。
  • JAVA自定义异常

    2017-04-27 09:38:21
    java基本语法,自定义异常
  • 主要为大家详细介绍了java简单自定义异常实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • java如何自定义异常

    2021-03-05 17:37:13
    这三方面的信息分别对应着三种消息的"接收者":(1) 异常的类型--对于divide方法的调用者有特别重要的意义。调用divide方法的程序可以通过捕获特定类型的异常(如MyArithmeticException)而忽略其它类型异常。(2) 发生...

    这三方面的信息分别对应着三种消息的"接收者":

    (1) 异常的类型--对于divide方法的调用者有特别重要的意义。调用divide方法的程序可以通过捕获特定类型的异常(如MyArithmeticException)而忽略其它类型异常。

    (2) 发生异常的位置--对于程序员或客户技术支持来说有着特别重要的意义。他们需要通过stacktrace信息来分析错误或调试程序。

    (3) 异常的信息--对于那些解释错误信息的用户来讲有着特别重要的意义。

    如果在你的开发过程中遇到任何Java提供的异常类都不能描述的异常情况时,你可以创建自己的异常类:

    通过继承Exception类或它的子类,实现自定义异常类;

    对于自定义异常,必须采用throw语句抛出异常,这种类型的异常不会自行产生。

    具体分为两步:

    第1步 定义异常类。

    class MyArithmeticException extends ArithmeticException{

    public MyArithmeticException(){

    public MyArithmeticException(String errorDescription){

    super(errorDescription);

    }

    }

    }

    第2步 创建异常对象,并抛出该对象。。

    public static int divide(int a,int b) throws MyArithmeticException{

    int result;

    if (b==0)

    throw new MyArithmeticException("divide by zero");

    else   result=a/b;

    return result;

    }

    public static void main(String args[ ]) {

    try{     divide(10,0);

    }catch(userException e) {

    e.printStackTrace();

    }

    }

    当方法divide抛出MyArithmeticException异常时,它同时"抛出"了三方面的信息:

    (1) 异常的类型,这里是MyArithmeticException。

    (2) 发生异常的位置,可以通过异常的printStackTrace()方法得到。

    (3) 异常的信息,在这里是通过指定errorDescription字符串("divide by zero")来表达的。

    当程序抛出一个异常的时候,必须选择合适的异常类型,以便方法的调用者程序可以根据异常的类型来作出正确的处理;必须设置有意义的异常信息,以便看到异常或日志记录的用户能明白发生了什么事;必须让stacktrace反映出异常发生的最原始的位置信息。

    一个方法所声明抛出的异常,是设计该方法时必须考虑的重要因素。程序员应该站在方法调用者的立场去考虑这个问题,而不是站在书写这个方法的开发者的立场:

    (1) 哪些异常是对调用者有意义的 ?调用者可以方便地捕获并处理这些异常。

    (2) 哪些异常是调用者应当忽略的?调用者可以把这些异常传递给它们的调用者或用户。

    在Java语言规范中,对于一个方法声明异常的数量没有一个硬性的指标,但通常声明较少的异常为好。

    当程序员在一个方法中抛出一个异常,即书写一个throws句子时,对于每一个想抛出的异常,首先要考虑:

    (1)   方法的调用者接收到这个异常后,能够做些什么?

    (2) 方法的调用者是否能够区分异常的不同类型,从而做出不同的处理?

    如果考虑后的回答是否定的,那么书写该throws句子的程序员应在该方法中自行处理该异常,或者将它改为对调用者更为有意义的异常。

    在设计方法的定义时,将相关的异常组织成对象树,只在方法中声明父类异常,这是保持throws子句稳定性的好方法。当需要增加一种异常时,只需从适当的父类中派生一个异常类即可。不需要修改方法的定义,因而也避免了修改所有该方法调用者的定义代码。

    将多个“低级异常”映射到少量“高级异常”的处理方法,还有一个显著的好处:它可以避免throws子句随着方法实现的改变而改变。

    在设计方法的初期,就声明这个方法抛出调用者所预期的异常,而不是在方法的实现阶段根据当前的实现方法来决定抛出何种异常。

    展开全文
  • Java 自定义异常

    2021-03-03 10:42:34
    Java面向对象设计 - Java自定义异常我们可以创建我们自己的异常类。它们必须扩展现有的异常类。 class extends {}<Class Name> is the exception class name.创建一个MyException类,它扩展了java.lang....

    Java面向对象设计 - Java自定义异常

    我们可以创建我们自己的异常类。

    它们必须扩展现有的异常类。 class extends {

    }<Class Name> is the exception class name.

    创建一个MyException类,它扩展了java.lang.Exception类。

    语法

    语法如下:public class MyException extends Exception {

    }

    异常类与Java中的任何其他类一样。通常,我们不向我们的异常类中添加任何方法。

    许多有用的方法可以用来查询异常对象的状态在Throwable类中声明。

    自定义异常类构造函数

    通常,我们为我们的异常类包括四个构造函数。

    所有构造函数将使用super关键字调用其超类的相应构造函数。class MyException extends Exception {

    public MyException() {

    super();

    }

    public MyException(String message) {

    super(message);

    }

    public MyException(String message, Throwable cause) {

    super(message, cause);

    }

    public MyException(Throwable cause) {

    super(cause);

    }

    }

    第一个构造函数创建一个具有null的异常作为其详细消息。

    第二个构造函数创建一个具有详细消息的异常。

    第三和第四个构造函数允许您通过包装/不包含详细消息的另一个异常来创建异常。

    您可以抛出类型MyException的异常。throw new MyException("Your message goes here");

    我们可以在方法/构造函数声明中的throws子句中使用MyException类,或者在catch块中使用参数类型。public void m1() throws MyException {

    }

    或捕获异常类try {

    }catch(MyException e) {

    }

    Throwable

    下面的列表显示了Throwable类的一些常用方法。

    Throwable类是Java中所有异常类的超类。此表中显示的所有方法在所有异常类中都可用。Throwable getCause()

    返回异常的原因。如果未设置异常的原因,则返回null。

    String getMessage()

    返回异常的详细消息。

    StackTraceElement[] getStackTrace()

    返回堆栈跟踪元素的数组。

    Throwable initCause(Throwable cause)

    设置异常的原因。

    有两种方法可以将异常设置为异常的原因。其他方法是使用构造函数,它接受原因作为参数。

    void printStackTrace()

    在标准错误流上打印堆栈跟踪。

    void printStackTrace(PrintStream s)

    将堆栈跟踪打印到指定的PrintStream对象。

    void printStackTrace(PrintWriter s)

    将堆栈跟踪打印到指定的PrintWriter对象。

    String toString()

    返回异常对象的简短描述。

    例外

    以下代码演示了对异常类使用printStackTrace()方法。public class Main {

    public static void main(String[] args) {

    try {

    m1();

    } catch (MyException e) {

    e.printStackTrace(); // Print the stack trace }

    }

    public static void m1() throws MyException {

    m2();

    }

    public static void m2() throws MyException {

    throw new MyException("Some error has occurred.");

    }

    }

    class MyException extends Exception {

    public MyException() {

    super();

    }

    public MyException(String message) {

    super(message);

    }

    public MyException(String message, Throwable cause) {

    super(message, cause);

    }

    public MyException(Throwable cause) {

    super(cause);

    }

    }

    上面的代码生成以下结果。

    42d0bcb672df57d98830dbeadee8f08b.png

    例2

    以下代码显示了如何将异常的堆栈跟踪写入字符串。import java.io.PrintWriter;

    import java.io.StringWriter;

    public class Main {

    public static void main(String[] args) {

    try {

    m1();

    } catch (MyException e) {

    String str = getStackTrace(e);

    System.out.println(str);

    }

    }

    public static void m1() throws MyException {

    m2();

    }

    public static void m2() throws MyException {

    throw new MyException("Some error has occurred.");

    }

    public static String getStackTrace(Throwable e) {

    StringWriter strWriter = new StringWriter();

    PrintWriter printWriter = new PrintWriter(strWriter);

    e.printStackTrace(printWriter);

    // Get the stack trace as a string String str = strWriter.toString();

    return str;

    }

    }

    class MyException extends Exception {

    public MyException() {

    super();

    }

    public MyException(String message) {

    super(message);

    }

    public MyException(String message, Throwable cause) {

    super(message, cause);

    }

    public MyException(Throwable cause) {

    super(cause);

    }

    }

    上面的代码生成以下结果。

    c70f57217325b7d177c0401240fb93b5.png

    展开全文
  • java自定义异常类之用户登录,帮助大家更好的理解之定义异常
  • 我有一个自定义异常类,它扩展了Exception类(如下所示).public class SomeABCException extends Exception但是,当我在以前在catch块中使用Exception的所有地方使用这个SomeABCException时,即使它扩展了Exception类...
  • 一、何为异常异常:在Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)Java程序在执行过程中所发生的异常事件可分为两类:Error: Java虚拟机无法解决的严重问题。...
  • Java 异常处理与自定义异常 摘要 :Java 程序运行期间发生的错误称为异常 异常产 生后 ,应有相应的异常处理机制来捕获异常或抛出异常 JDK 平台为我们提供了丰富和完整的异常类 ,通过它们来处理程序运行中的错误 ,防止...
  • java自定义异常详解及实例代码下面做了归纳总结,欢迎批评指正自定义异常class chushulingexception extends exception{public chushulingexception(string msg){super(msg);}}class chushufuexception extends ...
  • JAVA异常自定义异常处理

    千次阅读 2019-01-30 23:04:03
    作为一个码农想必对异常这一块滴已经是相当熟悉了就是我们常说的try/catch/finally吗,然后抛出捕获的异常信息,那么当我们在开发中有些异常需要我们给出特定的提示统一对异常进行处理展示可能就会用到自定义异常。...
  • 在编写内容之前,先简单介绍一下java异常异常分为两大类,运行时异常(RuntimeException)和除了运行时异常之外的其他异常(编译时异常)。好多程序猿在异常的处理上都是比较模糊或者笼统的,有的是在catch代码块...
  • Java实现自定义异常

    2021-02-12 15:50:14
    自定义异常类步骤创建一个类继承异常父类Exception在具体的实现方法首部抛出异常类(自己创建的那个类),throws的运用在具体的实现方法的内部抛出异常信息,throw的运用创建一个类继承异常父类Exceptionpublic class ...
  • JAVA异常分类和自定义异常定义

    千次阅读 2019-06-10 11:16:59
    异常概念: 1、如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法。在这种情况下 会抛出一个...2、Throwable 是 Java 语言中所有错误或异常的超类。下一层分为 Error 和 Exception Error 1....
  • java自定义异常及处理

    热门讨论 2012-06-13 16:57:53
    1:异常的分类以及区别 2:自定义异常的实现 3:自定义异常的处理 4:异常的妙用
  • java自定义异常

    2021-02-12 10:13:02
    hello,大家好,今天跟大家分享一下java中如何自定义异常,以后如果有新的心得,再添加,欢迎前辈指导。。。首先,上Api,看一下异常和错误的父类:然后,现在假设我有个循环(i=0;i<100;i++),我想在i==10的时候...
  • java自定义异常抛出

    2021-03-06 03:41:04
    importjava.awt.*;importjava.awt.event.*;...//自定义异常类classNumExceptionextendsException{publicStringtoString(){return"输入的值太小";}publicStringshuru...import java.awt.*;import java.awt.event...
  • JAVA自定义异常

    2021-03-09 22:29:38
    创建自定义异常是为了表示应用程序的一些错误类型,为代码可能发生的一个或多个问题提供新含义。可区分代码运行时可能出现的相似问题的一个或多个错误,或给出应用程序中一组错误的特定含义。//自定义异常类需要继承...
  • 自定义异常 javaCustom Exceptions or User-Defined Exceptions are very common in Java applications. We can easily create custom exception classes for different use cases. 自定义异常或用户定义的异常在...
  • java自定义异常

    万次阅读 多人点赞 2018-08-05 20:44:16
    简单介绍一下java自定义异常类的使用 背景:这里我简单模拟登陆操作,检测到密码不正确则抛出异常 自定义异常类的使用步骤如下: 1、自定义异常类继承Exception类 /** * 自定义异常类 */ public class ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 350,645
精华内容 140,258
关键字:

java异常自定义

java 订阅