Java基础重点知识点《异常02》

   1.异常的细节理论知识

1.1编译时异常还有其他名字:
        受检异常:CheckedException
        受控异常

    
    1.2运行时异常还有其它名字:

        未受检异常:UnCheckedException
        非受控异常

    
    1.3再次强调:所有异常都是发生在运行阶段的。

    1.4Java语言中对异常的处理包括两种方式:

        第一种方式:在方法声明的位置上,使用throws关键字,抛给上一级。
            谁调用我,我就抛给谁。抛给上一级。

        第二种方式:使用try..catch语句进行异常的捕捉。
            这件事发生了,谁也不知道,因为我给抓住了。

        举个例子:
            我是某集团的一个销售员,因为我的失误,导致公司损失了1000元,
            “损失1000元”这可以看做是一个异常发生了。我有两种处理方式,
            第一种方式:我把这件事告诉我的领导【异常上抛】
            第二种方式:我自己掏腰包把这个钱补上。【异常的捕捉】

            
            
张三 --> 李四 ---> 王五 --> CEO
        
        思考:
异常发生之后,如果我选择了上抛,抛给了我的调用者,调用者需要
            对这个异常继续处理,那么调用者处理这个异常同样有两种处理方式。

       

    1.5注意:Java中异常发生之后如果一直上抛,最终抛给了main方法,main方法继续
    向上抛,抛给了调用者JVM,JVM知道这个异常发生,只有一个结果。终止java程序的执行。

2.对之前异常知识的实践

2.1运行时异常
public class Test03 {
    public static void main(String[] agrs){
        /*
        * 程序执行到此处发生了ArithmeticException异常。
        * 底层new了一个ArithmeticException异常对象,
        * 然后抛出了,由于是main方法调用的 100 / 0 所以
        * 这个异常ArithmeticException抛给了main方法,
        * main方法没有处理,把这个异常抛给了JVM。JVM直接
        * 终止了程序的运行,并且把异常输出到了控制台上
        * **(重点)Arithmetic(算数)Exception异常是
        * 一个运行时异常,继承自父类RuntimeException
        * */
        //Exception in thread "main" java.lang.ArithmeticException: / by zero
        //at ExceptionTest01.Test03.main(Test03.java:5)
        System.out.println(100 / 0);
        //在这里"Hello World!!!"程序并未执行
        System.out.println("Hello World!!!");
    }
}

2.2编译时异常

package ExceptionTest01;

public class Test04 {
    public static void main(String[] args){
      /*
      * main方法中调用了doSome()方法
      * 因为doSome()方法的声明位置上有throws ClassNotFoundException
      * 在调用doSome()方法的时候,这个ClassNotFoundException会被抛给
      * main()方法.我们得对这个doSome()方法进行预处理,如果不处理,编译器会报错
      * java: 未报告的异常错误java.lang.ClassNotFoundException; 必须对其进行捕获或声明以便抛出
      * */
        doSome();
    }
    public static void doSome() throws ClassNotFoundException{
        /*
         *doSome()方法在声明位置上使用了:throws ClassNotFoundException
         *这个代码表示了在doSome方法执行的过程中有可能会出现ClassNotFoundException
         *异常。我们把这个异常叫做:类没找到异常。这个异常是一个编译时异常,需要我们
         * 程序员对这个异常进行预处理。
         * */
        System.out.println("我是doSome()!!!!!");
    }
}

3.对异常的处理(简单实践)

package ExceptionTest01;

public class Test05 {
    public static void main(String[] args){
        //第一种方式:在方法声明位置上继续使用throws,继续往上抛出,抛给调用者
        //上抛throws类似于推卸责任(继续把异常传给调用者)
        /*
        * public static void main(String[] args) throws ClassNotFoundException
        *   {
            doSome();
            }
        * */
        //第二种处理方式:try.....catch....
        //捕捉等于把异常拦下了,然后对异常进行处理.异常真正的解决了,调用者不知道
        //我这么写尖括号因为看的清,我视力不好,大家敬请谅解
        try
        {
            doSome();
                     }
            catch (ClassNotFoundException e)
            { 
            e.printStackTrace();
        }
      
    }
    public static void doSome() throws ClassNotFoundException{
        /*
         *doSome()方法在声明位置上使用了:throws ClassNotFoundException
         *这个代码表示了在doSome方法执行的过程中有可能会出现ClassNotFoundException
         *异常。我们把这个异常叫做:类没找到异常。这个异常是一个编译时异常,需要我们
         * 程序员对这个异常进行预处理。
         * */
        System.out.println("我是doSome()!!!!!");
    }
}

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值