栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA 异常一文全搞定

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA 异常一文全搞定

学习一个新的类的方法

1 此类作用
2 此类常用的方法
3 此类相关的面试题和练习

何为异常?

异常是Java用于描述程序非正常情况的一组类。
顶级父类:Throwable 要想成为一个异常类 就必须要直接或者间接继承Throwable类

两个构造方法
1:无参构造 Throwable throw = new Throwable();
2:有参构造 Throwable throw = new Throwable(String message); //message适用于描述出现该异常的原因

三个常用方法:
1.getMessage() :获取到产生此异常的原因
2.printStackTrace():打印堆栈信息
3.toString():获取异常的描述

Throwable throwable = new Throwable();//无参构造方法
        Throwable throwable1=new Throwable("我是一个异常,快来处理我把!"); //有参构造
        System.out.println(throwable.getCause()); //null
        System.out.println(throwable1.getCause());//null

        System.out.println(throwable.getMessage()); //null
        System.out.println(throwable1.getMessage()); // 我是一个异常,快来处理我把!
        
        throwable.printStackTrace();
        throwable1.printStackTrace();
        
        System.out.println(throwable.toString()); //null
        System.out.println(throwable1.toString());// 是一个异常,快来处理我把!
**(可以看到 在产生异常之后,我们迫切想知道的是在程序中产生异常的原因,并通过合理的方式区改正我们的代码并修复它。)**
Error错误类

子类1:Error 错误
此类是用于描述在程序中用业务逻辑无法处理的严重错误,是程序员无法处理的,程序员也无需关心。
出现Error错误一般不是由于你编写的代码出现问题,而是由于JVM运行你这段代码出现了问题,比如堆溢出,配置文件出错等,
这些你是无法人为的在你代码里可以保证的,必须要额外的去操作,重新配置虚拟机,修改配置文件等等。

package Error;

public class ErrorDemo {
    public static void main(String[] args) {
        Error error = new Error();
        Error error1 = new Error("AAAAAA");

        System.out.println(error.getMessage()); //null
        System.out.println(error1.getMessage());//AAAAA
        
        error.printStackTrace();
        error1.printStackTrace();
        //java.lang.Error
        //	at Error.ErrorDemo.main(ErrorDemo.java:7)
        //java.lang.Error: AAAAAA
        //	at Error.ErrorDemo.main(ErrorDemo.java:8)
    }
}
Exception例外,意料之外
package Exception;

public class ExceptionDemo {
    public static void main(String[] args) {
        Exception exception =new Exception();
        Exception exception1 =new Exception("奥里给 干了兄弟们");

        System.out.println(exception.getMessage()); //null
        System.out.println(exception1.getMessage()); //奥里给 干了兄弟们

        exception.printStackTrace();
        exception1.printStackTrace();
//        at Exception.ExceptionDemo.main(ExceptionDemo.java:5)
//        java.lang.Exception: 奥里给 干了兄弟们
//        at Exception.ExceptionDemo.main(ExceptionDemo.java:6)

        System.out.println(exception.toString());
        System.out.println(exception1.toString());
//        java.lang.Exception
//        java.lang.Exception: 奥里给 干了兄弟们
    }
}
学完了构造方法,,和三个常用的方法之后,我们就来探讨一下常见的异常有哪些?

异常分为检查时异常和运行时异常
1.检查时异常: 在你使用该类的时候,编译器强制要求要处理的异常,通常是因为该类中有它自己无法处理的或者自己不想处理的异常,那么此时调用者就必须对该异常进行处理。
2.运行时异常: 在我们编译的时候,编译器并不会提示你会产生该异常,只有在程序运行时,出现了该异常,编译器才会报异常。称为运行时异常。
下图就是常见的异常分类,我们都来测试一下。

package Exception;
import java.text.SimpleDateFormat;

public class ExceptionDemo1 {
    public static void main(String[] args) {
    //long[][][] a=new long[1024][1024][1024]; 1.java.lang.OutOfMemoryError: Java heap space 内存爆了
    String str="";
    // str=null; System.out.println(str.length()); 2.java.lang.NullPointerException 空指针
    // System.out.println(str.charAt(1)); 3.java.lang.StringIndexOutOfBoundsException: String index out of range: 1 字符串下标越界
    int[] arr=new int[1];
    //System.out.println(arr[2]); 4.java.lang.ArrayIndexOutOfBoundsException: 2
    //System.out.println(2/0); 5.java.lang.ArithmeticException: / by zero
    //System.out.println(new SimpleDateFormat("yyyy-MM-dd").parse("2002/3/4")); 6.ParseException: Unparseable date: "1827/11/11"
    //int a=Integer.parseInt("abc"); 7.java.lang.NumberFormatException: For input string: "abc"
    }
}
说完了一些比较常见的异常,接下来就是作为程序员如何去处理这些异常呢?
 方式1:当本方法没有能力去处理这个异常的时候,就去找人帮忙,意思就是把自己的异常向外抛出,本方法不去处理,当一个甩手掌柜,谁用我谁来处理。
         使用throws关键字 在方法名的后面抛出异常
         public void method1() throws Exception{
         int a=1;
         int b=0;
         System.out.println(a/b);
        }
 方式2:Java提供了一套处理异常的模板,用此模板 我们就可以来处理方法产生的异常了。
    public void method2() throws Exception{
        try {
            int a=1;
            int b=0;
            System.out.println(a/b);
        }catch (Exception e){
            e.printStackTrace();//这里就用到了 那个打印原因的方法
        }
    }

那么我们说完了一些常见的异常以及异常的类型以及处理方式。可是在开发中有一些问题,在Java已经提供的异常类中,并不能很好的满足我们的需求。

此时 我们联想到了,任何作为异常的类都必须间接或直接实现Throwable类,那么我们是不是也可以自定义一个类 去实现Throwable类,然后作为我们自己的异常类呢。说干就干

MyException myException = new MyException("22");
System.out.println(myException.getMessage());

package Exception;

public class MyException extends Throwable {
    @Override
    public String getMessage() {
        return super.getMessage();
    }

    @Override
    public void printStackTrace() {
        super.printStackTrace();
    }
    @Override
    public String toString() {
        return super.toString();
    }
    public MyException(String message) {
        super("这是我 自定义的异常!");
    }
}
制作不易,有问题请留言啊!!!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/287701.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号