Throwable -抛出异常类与自定义异常类

/*
    自定义异常类
        java提供的异常类,不够我们使用,需要自己定义一些异常类
     格式:
        public class XXXException extends Exception/runtimeException{
            添加一个空参数的构造方法
            添加一个带异常信息的构造方法
        }
      注:
        1.自定义异常类一般是Exception结尾,说明该类是一个异常类
        2.必须继承Exception/RuntimeException
 */
public class RegisterException extends Exception {
    //添加一个带空参数的异常
    public RegisterException() {
    }

    //查看异常源码可知,可以让父类的构造方法来解决异常信息
    public RegisterException(String message) {
        super(message);
    }

}
 1 import java.util.Scanner;
 2
 3 /**
 4  * 利用异常,模拟注册功能
 5  */
 6
 7 public class IsRegister {
 8     //1.数组保存已经注册的用户名(数据库)
 9     static String[] usename = {"赵", "王", "孙"};
10
11     public static void main(String[] args) /*throws RegisterException*/ {
12         //2.一般从前端获取数据源
13         Scanner sc = new Scanner(System.in);
14         System.out.println("请输入用户名: ");
15         String name = sc.nextLine();
16         checkUsename(name);
17
18     }
19     //3.定义一个方法对用户输入的数据进行判断
20     public static void checkUsename(String name) /*throws RegisterException*/ {
21         for (String usename : usename) {
22             if(usename.equals(name)){
23                 try {
24                     throw new RegisterException("用户已注册"); //运行期异常,可以不用throws和try catch
25                 } catch (RegisterException e) {
26                     e.printStackTrace();
27                     return;//结束
28                 }
29             }
30         }
31         //注册成功
32         System.out.println("注册成功");
33     }
34 }
/*
//Throwable所有异常的超类
      Exception -编译异常,可以throws或者try{}catch{}  -子类
      RuntimeException -运行异常,可以不处理,让JVM处理
      Error -无法处理,必须修改源代码,内存溢出,系统崩溃 -子类
  异常处理过程:方法里面异常,查看有没有异常处理逻辑,若没有
               ——把内容,原因,位置报告JVM——找到方法的调用者(main)
               ——查看有没有异常处理逻辑,若没有——返回给JVM,JVM控制台打印,并且中断程序

//运行时异常
  throw关键字
        作用:可以使用throw关键字在指定的方法中抛出指定的异常
             格式:throw new xxxException("异常产生的原因")
             注:1.throw关键字必须在方法的内部
                2.throw关键字new的必须是Exception或其子类对象
                3.throw关键字抛出指定的异常对象,我们必须处理这个对象
                    1.throw关键字后边创建的是RuntimeException或其子类对象,可以交给JVM(打印异常+中断程序)
                    2.throw关键字后边创建的是编译异常(写代码的时候),要么throws,要么try catch
工作中,必须对对方传递过来的方法进行合法化校验,不合法,则抛出异常的方式给到调用者

//编译异常
  throws关键字:异常处理的第一种方式,交给被人处理
        作用:
            当方法的内部抛出异常对象的时候,那么我们就必须处理这个异常对象
            throws将异常对象声明(内容,原因,位置)给调用者,自己不处理,最终会交付给JVM
        格式:
            修饰符 返回值类型 方法名(参数列表)throws XXXException,XXX,XXX{
                throw new XXXException("异常的原因")
            }
        注意:throws 后面的异常声明必须是Exception或其子类
              方法内部如果有多个异常对象,throws必须声明多个
              如果异常对象有子父类对象,直接声明父类异常即可
  此外,如一旦声明抛出异常的方法,就必须处理该异常,要么继续在调用对象throws声明异常,最后交给方法调用者最后交给JVM,中断
  要么try...catch自己处理(一般这种比较好)不中断

  try catch:异常处理的第二种方式,自己处理
        格式:try{
            可能异常的代码
        }catch(定义一个异常变量接受try中异常变量){
            异常处理逻辑,工作中会把信息记录进日志
        }
        ...
          catch(定义一个异常变量接受try中异常变量){
            异常处理逻辑,工作中会把信息记录进日志
        }
        注:try中可能有对个异常对象,所以需要多个catch来处理
            如果try中产生异常,就会执行catch的异常处理逻辑,继续执行之后的代码
            如果catch里的异常类有父子类关系,子类应该写在上边(二义性),Exception所有的异常类

  finally
        格式:try{
            可能异常的代码
        }catch(定义一个异常变量接受try中异常变量){
            异常处理逻辑,工作中会把信息记录进日志
        }
        ...
          catch(定义一个异常变量接受try中异常变量){
            异常处理逻辑,工作中会把信息记录进日志
        }finally{
           无论代码是否出现异常,这里都会执行
        }
        注:finally不能单独使用,必须与try一起用,finally一般用于资源释放,无论程序是否有异常,均需要释放资源

*/

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;

public class Throwable {
    public static void main(String[] args) /*throws IOException*/ {
        //RuntimeException可以不用自己处理交给JVM
        //int[] num=new int[5];
        //getElement(num,6);

        //编译异常,需要自己处理,使用throws
        //readFile("c:\\b.txt");不会执行,因为上面的异常JVM让程序已经中断

        //使用try catch
        try {
            readFileC("c:\\b.txt");  //有可能出现异常的代码
        } catch (ArrayIndexOutOfBoundsException e) {//throws声明的什么异常,就用来生成对象来接收
            //异常处理逻辑
            /*
        Throwable类中定义了三个方法:
             String toString()    - 返回此 throwable 的详细消息字符串。
             StackTraceElement[] getStackTrace() - 提供编程访问由 printStackTrace() 输出的堆栈跟踪信息,JVM打印默认调用此方法
             String getMessage() -返回此 throwable 的简短描述。
           */
            System.out.println(e.toString());   //java.lang.ArrayIndexOutOfBoundsException: Index 4 out of bounds for length 3
            System.out.println(e.getMessage()); //Index 4 out of bounds for length 3
            System.out.println(e.getStackTrace()); //[Ljava.lang.StackTraceElement;@4e50df2e
        }finally {
            System.out.println("资源释放");  //finally无论是否异常,均执行
        }
        System.out.println("劳资没有中断,太强了");

    }

    public static void getElement(int[] arr, int index) {

        //运行期异常,可以不用自己处理
        if (index > 4 || index < 0) {
            throw new ArrayIndexOutOfBoundsException("数组索引有问题");  //ArrayIndexOutOfBoundsException运行期异常,交给JVM,不用自己throw
        }
        //在Objects里有个判断NullPointerException的方法可以判断 对象 是否为空,简化上述代码
        //格式Objects.requireNonNull(对象名);
        //另一个重载Objects.requireNonNull(对象名,"抛出的信息")

    }

    /*
    定义一个方法,对传递的文件路径合法化判断,使用throws
                由于FileNotFoundException extends IOException
                所以声明IOException即可
     */
    public static void readFile(String src) throws IOException {
        //抛出文件位置异常
        if (!src.equals("c:\\a.txt")) {
            throw new FileNotFoundException("文件位置不匹配");
        }
        //抛出文件后缀异常
        if (!src.endsWith(".txt")) {
            throw new IOException("文件位置不匹配");

        }
    }

    public static void readFileC(String src) {
        List<Integer> integers = List.of(1, 2, 3);
        integers.get(4);

    }
}

原文地址:https://www.cnblogs.com/huxiaobai/p/11517693.html

时间: 2024-10-12 15:40:15

Throwable -抛出异常类与自定义异常类的相关文章

自定义异常类:三角形的判断和面积

要求: 自定义类Sanj,其中有成员 x,y,z,作为三边长,构造方法Sanj(a,b,c)分别 给x,y,z赋值,方法求面积getArea和显示三角形信息(三个边长)showInfo,这2个方法中当三条边不能构成一个三角形时要抛出自定义异常NotSanjiaoException,否则显示正确信息.在另外一个类中的主方法中构造一个Sanj对象(三边为命令行输入的三个整数),显示三角形信息和面积,要求捕获异常. 代码如下: 1 package Test; 2 3 import java.util.

[转]如何编写和应用Java的自定义异常类

编写自定义异常类实际上是继承一个API标准异常类,用新定义的异常处理信息覆盖原有信息的过程.常用的编写自定义异常类的模式如下: public class CustomException extends Exception {    //或者继承任何标准异常类 public CustomException()  {}                //用来创建无参数对象 public CustomException(String message) {        //用来创建指定参数对象 sup

java中自定义异常类

hello,大家好,今天跟大家分享一下java中如何自定义异常,以后如果有新的心得,再添加,欢迎前辈指导... 首先,上Api,看一下异常和错误的父类: 然后,现在假设我有个循环(i=0;i<100;i++),我想在i==10的时候停止运行,并执行我自定义的异常,该怎么做呢,请看: //自定义异常类: 自定义异常类,需要继承Throwable或Exception,并且重写printStackTrace()方法,此方法就是自定义异常的执行结果 public class MyException ex

Java 自定义异常类

类1:public class LogicException extends RuntimeException {    //业务逻辑异常    /**     *      * @param message 异常信息     */    public LogicException(String message) {        super(message);    }    /**     *      * @param message 异常信息     * @param cause  当前

自定义异常类

/* sun提供了很多的异常类给我们用于描述程序中各种的不正常情况,但是sun 给我 提供异常类还不足以描述我们现实生活中所有不正常情况,那么这时候我们就需要 自定义异常类. 需求: 模拟feiQ上线的时候,如果没有插上网线,那么就抛出一个没有插上网线的异常, 如果已经插上了网上,那么就正常显示好友列表. 自定义异常类的步骤: 自定义一个类继承Exception即可. */ //自定义了一个没有网线的异常类了. class NoIpException extends Exception{ pub

Java -- 异常的捕获及处理 -- 自定义异常类

7.4 自定义异常类 定义异常类只需要继承Exception类即可. 例:自定义异常类 Class : MyException package limeThrowable._7_4; public class MyException extends Exception { // 自定义异常类,继承Exception类 /** * */ private static final long serialVersionUID = 1L; // 构造方法接收异常信息 public MyException

Java自定义异常类以及异常拦截器

自定义异常类不难,但下面这个方法,它的核心是异常拦截器类. 就算是在分布式系统间进行传递也可以,只要最顶层的服务有这个异常拦截器类(下例是在springmvc项目中) 1.自定义异常类,继承自 RuntimeException,参数只有一个异常错误码 public class BingException extends RuntimeException { private final int code; public BingException(int code) { this.code = c

C#高级编程八十二天----用户自定义异常类

用户自定义异常类 前面已经说了不少关于异常的问题了,现在来给大家说一下自定义异常时咋个回事以及咋样. 为啥会出现自定义异常类呢?用用脚趾头想想也明白,是为了定义咱们自己的异常,自定义异常类继承自ApplicationException 首先异常(Exception)分为两大类,一个是预定义的异常类,后者是用户自定义异常类时需要继承的类. 案例: using System; using System.Collections.Generic; using System.Linq; using Sys

PHP 错误与异常 笔记与总结(13 )自定义异常类

针对不同的异常,进行不同的处理,可以通过自定义异常类记录特定的异常信息来处理不同类型的异常.自定义异常类通过继承基类(Exception),对基类进行扩展. 自定义异常类 1 <?php 2 header('content-type:text/html; charset=utf-8'); 3 /* 4 自定义异常类 5 */ 6 class MyException extends Exception{ 7 //重写父类构造函数 8 public function __contruct($mess