Java学习记录7 异常

Posted chendejian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习记录7 异常相关的知识,希望对你有一定的参考价值。

1. 异常机制

  1. 异常(Exception):意思是例外。软件程序在运行过程中遇到的例外。

  2. 格式:try{}catch(Exception e){e.printStackTrace();}

  3. Java是采用面向对象的方式来处理异常的。处理过程:

    1. 抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给JRE。

    2. 捕获异常:JRE得到该异常后,寻找相应的代码来处理该异常。JRE在方法的调用栈中查找,从生成异常的方法来开始追溯,直到找到相应的异常处理代码为止。

  4. 异常的分类:

    1. 所有异常的根类:Throwable。

    2. Error:自己处理不了的问题,需要重启虚拟机。

    3. Exception:程序本省能够处理的异常。是所有异常类的父类,其子类对应了各种各样可能出现的异常事件。

      1. Checked Exception已检查异常:编译器需要处理。编译时通不过。方法1:try catch,方法2:throws抛出

        try{
           语句1;
           语句2:
        }catch(Exception1 e){
           
        }catch(Exception2 e/*异常类型*/){
           
        }finally{
           //是否遇到异常,这里都会最后执行。
        }
        如果语句1有异常,语句2就不执行了,直接执行相应的异常处理语句,最后执行finally。
           
        //方法1:捕获异常try catch    
        FileReader reader = null;
        try {

        reader = new FileReader("d:/bb.txt");
        char c1 = (char) reader.read();//读文件的一个字符
        System.out.println(c1);
        } catch (FileNotFoundException e) {//子类异常在父类前面

        e.printStackTrace();//打印异常信息
        } catch(IOException e){
        e.printStackTrace();
        }finally{
        try {
        if(reader != null)
        {
        reader.close();
        }
        } catch (IOException e) {
        ?
        e.printStackTrace();
        }
        }
        方法2:声明异常throws抛出,谁调用谁处理
           
         public static void main(String[] args) throws IOException /*抛給了JRE*/{
        readMyFile();
        }
        ?
        public static void readMyFile() throws IOException {
        FileReader reader = null;
        reader = new FileReader("d:/bb.txt");
        char c1 = (char) reader.read();// 读文件的一个字符
        System.out.println(c1);
        ?
        if (reader != null) {
        reader.close();
        }
        }  

         

      2. Runtime Exception(Unchecked Exception)运行时异常:编译器不需要处理。逻辑判断处理来避免这些异常。

                int a = 0;
        int b = 1;
        if(a != 0)
        {
        System.out.println(b/a);
        }
        //java.lang.NullPointerException 空指针异常
        String str = null;
        if(str != null)
        {
        System.out.println(str.length());
        }

         

    4. 手动抛出异常

      1. 自定义异常:如果继承Exception类,则为受检查异常,必须对其进行处理。如果不想处理,可以让自定义异常类继承运行时异常RuntimeException类。

      2. alt+shift+s:弹出Source下拉框

        public static void main(String[] args) {
    Person p = new Person();
    p.setAge(-10);
    }
    ?
    class Person{
    private int age;
    ?
    public int getAge() {
    return age;
    }
    ?
    public void setAge(int age) {
    if(age < 0){
    try {
    throw new IllegaAgelException("年龄不能为负数");
    } catch (IllegaAgelException e) {

    e.printStackTrace();
    }
    }
    this.age = age;
    }


    }
    class IllegaAgelException extends Exception{
    public IllegaAgelException(){

    }
    public IllegaAgelException(String msg){
    super(msg);

    }
    }

     

以上是关于Java学习记录7 异常的主要内容,如果未能解决你的问题,请参考以下文章

java学习笔记(Core java)7 断言与异常

java.lang.NullPointerException: Attempt to invoke virtual method ‘int android.database.sqlite异常(代码片段

201621123010《Java程序设计》第10周学习总结

201621123047 《Java程序设计》第10周学习总结

java 反射代码片段

java SpringRetry学习的代码片段