java---异常

纲要:

1.异常的基本概念

2.异常的分类

3.异常的捕获与处理

4.自定义异常

5.方法的覆盖与异常

内容:

1.1 异常的基本概念

           Java中的异常(Exception)又称为例外,是一个在程序执行期间发生的事件,它中断正在执行的程序的正常指令流。为了能够及时有效地处理程序中的运行错误,必须使用异常类。

 

      注:java中采用类去模拟异常,异常是一类对象,对象是可以创建的。

             例:NullPointerException e = 0x1234;

                    e是引用类型,保存的是指向堆内存中对象的地址,这个对象是NullPointerException类型,这个对象就是真实存在的一个事件,NullPointerException是一类                       事件。

1.2 异常机制的作用

          java语言为我们提供了完善的异常处理机制

          作用是程序发生异常事件时,为我们输出详细的信息,程序员通过这个信息可以对异常进行处理,是程序更加健壮

2.异常的层次结构图

 

 

3.异常的捕获与处理

         1.声明抛出:

             

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class Test {

    public static void main(String[] args) throws FileNotFoundException {
        m1();
    }
    
    public static void m1() throws FileNotFoundException {
        m2();
    }
    public static void m2() throws FileNotFoundException {
        m3();
    }
    
    public static void m3() throws FileNotFoundException{
        FileInputStream fis = new FileInputStream("Test.java");
        
    }
}
View Code

用throws处理异常不是真正的处理异常,而是推卸责任,谁调用就抛给谁,上面的m1方法如果出现了异常,将会继续上抛给jvm,jvm遇到这个异常就会推出jvm。

            2.捕捉:

              

try{
    // 可能出现异常的代码
}catch(异常类型1 变量){

    //处理异常的代码
}catch(异常类型2 变量){

    //处理异常的代码
}catch(异常类型3 变量){

    //处理异常的代码
}........

 

1.catch语句块可以有多个

2.但从上到下catch,必须从小异常类型到大异常类型捕捉

3.try...catch...语句块最多执行一个catch语句块,之行结束之后try...catch...就结束了。

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class Test {

    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("Test.java");
        } catch (FileNotFoundException e) {
            System.out.println(e.getMessage());
        }
        System.out.println("Hello world!");
    }
}

输出: 

Test.java (系统找不到指定的文件。)
Hello world!

1.使用try...catch...处理异常后下面的语句仍然执行

     finally

 finally语句块中的语句一定会执行,所以在程序中为保证某资源一定会释放,一般在finally语句块中释放释放资源

 

public class Test {

    public static void main(String[] args) {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream("Test.java");
            
        } catch (FileNotFoundException e) {
            System.out.println(e.getMessage());
        }finally {
            //为保证资源一定会释放
            if(fis!=null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 

虽然finally语句块的代码一定会执行,但也有例外

public class Test {

    public static void main(String[] args) {
       try {
            System.exit(-1);
        }finally {
            System.out.println("Hello world");
        }
    }
}

Hello world不会输出

 

4.自定义异常

         throw

         

//自定义一个异常
//以注册用户名为例,要求用户名不小于6位
public class InvalidInputException extends Exception{

    public InvalidInputException() {
        
    }
    public InvalidInputException(String msg) {
        super(msg);//传入异常详细信息
    }
}
//顾客注册用户名代码
public
class CustomService { public void Register(String name) throws InvalidInputException{ //注册 if(name.length()<6) { throw new InvalidInputException("用户名不能小于6位"); } System.out.println("注册成功"); } }
//测试类
public class Test {

    public static void main(String[] args) {
        String name = "jack";//用户名
        
        CustomService c = new CustomService();
        try {
            c.Register(name);//调用注册方法
        } catch (InvalidInputException e) {
            
            System.out.println(e.getMessage());
        }
        
    }
    
}

输出:用户名不能小于6位

5.方法的覆盖与异常

 重写的方法不能比被重写的方法抛出更宽泛的异常

 

 

posted @ 2019-11-10 20:42  wwww2  阅读(199)  评论(0编辑  收藏  举报