java 异常详解

异常
Exception
异常是一个对象
异常就是错误,是在程序编译阶段或者执行过程中的错误。
学习异常主要是调试程序的错误信息,根据错误信息来发现程序的bug
异常分类:运行时异常和编译异常
异常的级别Error和Exception
Error:表示不可抗因素造成的
Exception:表示程序运行错误,是可以调试的
捕获异常的语法

 try{
        假设代码运行正常
}catch(异常类型){

}finally{
//不管程序是否出错,都执行
}

异常的类型必须要明确的,这样才能准确的找出错误。
throws和throw的区别 声明异常和 抛出异常
声明异常(throws)>=抛出异常(throw)
自定义异常信息:标准的异常中无法描述错误信息,我们需要自己定义一个异常信息。
Catch的捕获需要从小到大
什么时候捕获异常,什么时候抛出异常?
如果我们调用的是标准的API文档的方法,如果该类抛出异常,我们必须要捕获。
在实际开发中,我们所编写的程序的功能执行成功与否,与外界有紧密关系(比如,参数传递,调用关系)必须要抛出异常


某些方法在调用的时候会抛出异常,抛出异常就必须要处理
例如在某些方法在API中描述的时候就把调用时可能会抛出的异常写在之中。
例如,方法中的参数错误传递
以下是Java JDK8对FileInputStreame异常的描述

**Class FileInputStream**
public FileInputStream( ) 
                throws  FileNotFoundException

**Throws:**
 [FileNotFoundException]  - if the file does not exist, is a directory rather than a regular file, or for some other reason cannot be opened for reading.
 [SecurityException]  - if a security manager exists and its checkRead method denies read access to the file.

所以当我们创建一个FileInputStream类的对象时就会抛出一个异常
此时应该使用异常捕捉来捕捉异常

public class FileUtil {
    public void read(){

    }

    public static void main(String[] args) {
        try {
            FileInputStream in = new FileInputStream("");
        }catch (Exception e){

        }
    }
}

关于一个方法中异常的声明

 void func throws Exception/*声明的异常可以范围更小*/(){
 }

代码部分

public class Person {
    public void buyFood(int money)/*声明异常*/throws Exception{
        if (money<=0){
            //抛出异常
            throw new Exception("没有给我钱");
        }else{
            System.out.println("我给你买!!");
        }
    }
    public void buyShoes(int money)throws MyException{
        if(money<500){
            throw new MyException("钱不够");//丢出一个MyException类的异常,MyException异常时我们自己定义的异常

        }else{
            System.out.println("buy!!!!!!!NIKE");
        }
    }

    public static void main(String[] args) {
        try {
            Person p = new Person();
            p.buyFood(0);
            p.buyShoes(100);
            //范围catch需要从小到大捕获
        }catch(MyException e){//异常的捕捉
                System.out.println(e.getMessage());
            }catch(Exception e){
                System.out.println(e.getMessage());
            }
        }

    }

我们自己声明了一个异常类,此异常继承了Exception类

//MyException.java
public class MyException extends Exception{
    public  MyException(String msg){
        super(msg);
    }

}

**切记异常的捕捉必须大于等于异常声明,否则将检查不到异常的存在

猜你喜欢

转载自blog.csdn.net/qq_37913435/article/details/81415600