手记

乌托邦漂流者的Java学习笔记11

起得最早的一天。。。。
异常:

error异常:系统崩溃,虚拟机异常,内存溢出等,线程死锁
exception异常:
1.runtimeexception(非检查异常):
NullPointerException - 空指针引用异常
ArithmeticException - 算术运算异常
ArrayIndexOutOfBoundsException,数组下标越界
ClassCastException,类型强制转换异常
2.Checked Exception(检查异常),
各种奇葩原因,文件不存在等,需要try...catch解决
try....catch....finally异常处理:
try{可能发生异常的语句}
catch{捕获到异常并且做出行动}
try后可以加多个catch,顺序有小到大,由子类到父类,会就近原则处理异常,
善后工作finally
try{}
catch{}
finally{//要执行的代码}

public class TryCatch {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        TryCatch op=new TryCatch();
        int result=op.test();
        System.out.println("result的值为"+result);
    }

    public int test(){
        try{
            int i=10;
            int b=100;
            int result=10;
            while(i>-1){
                result=result+b/i;
                i--;
            }

        }
        catch(Exception e){

            System.out.println("异常发生了");
            e.printStackTrace();
        }
        finally{
            System.out.println("finally执行了");
        }
        return 15;
    }

}

打印出异常方法:e.printStackTrace();
无论是否发生异常finally都会执行,
如果try。。。catch没有返回值会继续执行异常之后的语句;
抛出异常throw,throws:
throws写在参数列表之后,方法体之前}
throw是一个动词,会抛出具体的异常,会交给try....catch.....,如果没有,会交给更上级,
自定义异常,class 自定义异常类 extends 异常类型{},可以添加含参构造器,也可以添加更多复杂的功能
异常链:一个异常会包装成为新异常中的引用,一个异常发生另一个也会发生,这样的链式反应

public class ChainTest {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根

            ChainTest t=new ChainTest();
          try {
                t.test2();
            } catch (Exception e) {
                e.printStackTrace();
                // TODO 自动生成的 catch 块
                System.out.println("终于执行了");
            }

    }

    public void test1() throws Drunk{
        throw new Drunk("喝酒别开车");
    }

    public void test2() 
    {
        try {
            test1();
        } catch (Drunk e) {
            // TODO 自动生成的 catch 块
            RuntimeException newExc=new RuntimeException("hahaha");
            newExc.initCause(e);
            throw newExc;
        }
    }

}

initCause,会包装异常,执行过后,用throw时不需要用throws

1人推荐
随时随地看视频
慕课网APP