Java中的异常

认识异常

异常就是程序出现的问题;

Integer.valueOf("aaaa");

Java中的异常_第1张图片

 异常体系

因为写代码时经常会出现问题,Java的设计者们早就为我们写好了很多个异常类,来描述不同场景下的问题。而有些类是有共性的所以就有了异常的继承体系

Java中的异常_第2张图片

 Error:代表的系统级别错误(属于严重问题),也就是说系统一旦出现问题,sun公司会把这些问题封装成Error对象给出来,说白了,Error是给sun公司自己用的,不是给我们程序员用的,因此我们开发人员不用管它

Exception:叫异常,它代表的才是我们程序可能出现的问题,所以,我们程序员通常会用Exception以及它的子类来封装程序出现的问题

运行时异常:RuntimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常(如:数组索引越界异常)(非受检)

int[] arr = {1,2,3,4,5};
Sysout.out.println(arr[5]);

产生ArrayIndexOutOfBoundsExcpetion异常

编译时异常:编译阶段就会出现错误提醒的(如:日期解析异常)(受检)

Java中的异常_第3张图片

 

自定义异常

如果企业自己的某种问题,想通过异常来表示,那就需要自己来定义异常类了。

应用:

public class Test01 {
    public static void main(String[] args) {

    }
    public static void saveAge(int age) throws AgeOutOfBroundException {
        if(age > 0 && age < 150 ){
            info("年龄保存成功");
        }else {
            throw new AgeOutOfBroundException("年龄超出范围");
        }
    }
}
class AgeOutOfBroundException extends Exception{
    public AgeOutOfBroundException() {
    }
    public AgeOutOfBroundException(String 年龄超出范围) {
    }
}

注意咯,自定义异常可能是编译时异常,也可以是运行时异常

1.如果自定义异常类继承Excpetion,则是编译时异常。
    特点:方法中抛出的是编译时异常,必须在方法上使用throws声明,强制调用者处理。
    
2.如果自定义异常类继承RuntimeException,则运行时异常。
    特点:方法中抛出的是运行时异常,不需要在方法上用throws声明。

异常处理

比如有如下的场景:A调用用B,B调用C;C中有异常产生抛给B,B中有异常产生又抛给A;异常到了A这里就不建议再抛出了,因为最终抛出被JVM处理程序就会异常终止,并且给用户看异常信息,用户也看不懂,体验很不好。

此时比较好的做法就是:1.将异常捕获,将比较友好的信息显示给用户看;2.尝试重新执行,看是是否能修复这个问题。

Java中的异常_第4张图片



import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test02 {
    public static void main(String[] args) {
        try {
            test1();
        } catch (ParseException e) {
            System.out.println("你想要找的文件不存在");;
        } catch (FileNotFoundException e) {
            System.out.println("你要解析的时间不正确");
            throw new RuntimeException(e);
        }
    }
    public static void test1() throws ParseException, FileNotFoundException {
        SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
        Date date = dateFormat.parse("2028-02-28 22:18:46");
        System.out.println(date);
        test2();
    }

    private static void test2() throws FileNotFoundException {
        InputStream inputStream = new FileInputStream("D:/movie.pang");

    }
}

第一种处理方式是,在main方法中对异常进行try...catch捕获处理了,给出友好提示。

第二种处理方式是:在main方法中对异常进行捕获,并尝试修复


import java.util.Scanner;
/**
 * 目标:掌握异常的处理方式:捕获异常,尝试修复。
 */
public class Test03 {
    public static void main(String[] args) {
        while (true){
            try {
                System.out.println(getmoney());
                break;
            } catch (Exception e) {
                System.out.println("你输入有误");//打印错误信息
                
            }
        }
    }
    public static double getmoney(){
        Scanner scanner = new Scanner(System.in);
        while (true){
            System.out.println("请输入你的钱数");
            double money = scanner.nextDouble();
            if(money > 0){
                return money;
            }else {
                System.out.println("你输入的价格不合适");
            }
        }
    }
}

你可能感兴趣的:(java基础,java,开发语言)