异常的介绍和自定义异常,异常的常用方法,异常详解

文章目录

异常详解

import org.omg.CORBA.portable.ApplicationException;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.rmi.AlreadyBoundException;
import java.rmi.activation.ActivationException;
import java.util.zip.DataFormatException;

/**
 * 异常:
 *          Exception 实现了 throwable接口,表示所有的异常都是可以抛出的
 *
 *          Exception的子类是有:
 *                      1.Exception 的直接子类,如流方面的异常,类不存在等,这种直接子类,称为编译时异常
 *                      2.Exception 的子类,有一个RunTimeException 的各种子类,是运行时异常
 *
 *
 *
 *      1.运行时异常
 *      2.编译时异常
 *
 *
 *  1.运行时异常:
 *          在编写代码的时候,需要预先处理的异常,底层throw了一个异常,但是不需要try cathc 和throws,使用的时候考虑这种异常
 *          发生的概率低
 *  2.编译时异常:
 *          在编写的时候需要预先处理,底层thorw了一个异常,需要try catch 或者throws ,使用的时候考虑这种异常发生的概率高
 *

   try   catch   的详解:

  建议的方式:      这个会捕捉到异常,try里面写执行的语句块,
                  catch 后面括号是捕捉到的异常,可以范围更大,不能更小,依次catch 多个异常的时候,之能从小到大一次catch

  不建议的方式:    一个catch里面可以写多个异常用  |  隔开,处理这个异常的时候,必须在try里面有出现相应异常的方法
                  才能这样,try里面没有出现异常的方法,你不能凭空捕捉,但是运行时异常可以凭空捕捉,但是运行时异常没有需要
                  处理的必要,同时这样的并行的处理异常的方式不可靠,需要精细化处理,使用多个catch处理多个异常,而不是一个catch里面
                  用多个| 隔开多个异常一起处理

 try catch的流程:
                当出现异常的时候,出现异常的部分,如果是抛出,则直接抛出,异常下面的部分不会执行,会走处理异常的流程
                如果是catch 就catch 执行catch里面的部分,在try里面异常下面的部分仍然不会执行,处理完异常,catch后面的程序会依次执行



  try  和finally

        try 不能单独执行,起码要和finally一起执行
        finally也不能单独执行,必须和try一起执行,finally 是一定会执行的,除非在这之前阻塞了线程,或者停止了jvm,
        finally是一定会执行的,然后return是执行之后方法 一定结束的,程序的执行顺序一定是从上到下的,
        这里的执行顺序一般是指的是 class文件反编译过来的源文件,finally在反编译之后是在return前面的,但是
        在最初的源文件,finally可以写在return之后,
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */
public class ExceptionTest {
    //自定义一个异常的类
    //继承了Exception 是一个编译时异常,考虑的概率较高,自定义异常,只需要写两个构造方法就行了
    //运行时异常和编译时异常的抛出方法是一样的,都是需要手动昂throw抛出,但是 运行时异常不需要throws处理,也不需要try  catch

    static class MyException extends  Exception {

        public MyException(String message) {
            super(message);
        }

        public MyException() {

        }
    }
//覆盖测试
    static class Cat extends Animal {
        @Override
        public void doSome() throws ActivationException,AlreadyBoundException,ApplicationException,MyException {
            //覆盖的方法在抛出异常的时候,只能抛出,父类异常的子类异常,或者父类异常本身,或者不抛出(个数不限制)

        }
        //自定义异常抛出测试

    public void sum(int c) throws MyException {

            //这个异常首先是在一定的条件下触发的,这里定义条件,然后异常是需要手动throw 抛出,和throws 不同,这里需要throw一个new的异常
        //异常里面可以跟一个String类型的信息,这个信息是异常的getMassaget方法可以拿到的信息
        if (c < 100) {
            throw new MyException("参数小于100");

        }




        }

    public int finallyTest() {
            int c=100;
        try {
            return c;

        }finally {
            c++;
        }

    }
    }
//覆盖测试
    static class Animal {
        public void doSome() throws DataFormatException,Exception {
            //这是编译时异常,子类不能抛出更大范围的异常

        }
    }




    public static void main(String[] args){

        Cat cat = new Cat();
        try {
            cat.sum(20);
            new FileInputStream("asdf");
        } catch (MyException|FileNotFoundException e) {
            e.printStackTrace();//这个方法打印异常的栈信息,提示异常出现的位置,建议使用这个方法,下面的方法使用意义不大,简单的获取提示信息没啥用,不能定位到出现异常的位置
            System.out.println(e.getMessage());//这个getMessage方法拿到提前填入的提示信息


            //处理异常的打印的各种信息,都是独立的线程来完成的
        }
        System.out.println(cat.finallyTest());
        //这里返回的是100,还是101 呢,结果是100,结果一定是100,
        //反编译之后,是j=c; 然后 C++ c是101 ,return j,最终返回的是j
    }








}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值