异常及其处理

概述

异常的体系

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

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

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

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

抛出异常

        ●在方法上使用throws关键字,可以将方法内部出现的异常抛出去给调用者处理。

 

捕获异常

        ●用 try...catch 直接捕获程序出现的异常。

 自定义异常

        Java无法为这个世界上全部的问题都提供异常类来代表,如果企业自己的某种问题,想通过异常来表示,以便用异常来管理该问题,那就需要自己来定义异常类了。

自定义运行时异常

  1. 定义一个异常类继承RuntimeException。(必须让这个类继承自RuntimeException,才能成为一个运行时异常类。)
  2. 重写构造器。
  3. 通过throw new异常类(xx)来创建异常对象并抛出。
  • 编译阶段不报错,提醒不强烈,运行时才可能出现。

自定义编译时异常

  1. 定义一个异常类继承Exception。
  2. 重写构造器。
  3. 通过throw new异常类(xxx)来创建异常对象并抛出。
  • 编译阶段就报错,提醒更加强烈!

自定义异常的作用

  1. 异常是用来查寻系统Bug的关键参考信息。
  2. 异常可以作为方法内部的一种特殊返回值,以便通知上层调用者底层的执行情况。

 异常的处理

开发中对于异常的常见处理方式

        1.捕获异常,记录异常并响应合适的信息给用户。

public cLass ExceptionTest {
    public static void main(String[] args) {
        try {
            test1();
        } catch (Exception e) {
            System.out.println("您当前操作有问题");
            e.printStackTrace(); //打印出这个异常对象的信息。记录下来。
        }
    }

    public static void test1() throws Exception {
        SimpleDateFormat sdf = new SimpLeDateFormat("yyyy-MM-dd HH:mm:ss"
        Date d = sdf.parse("2028-11-11 10:24:11");
        System.out.println(d) ;
        test2();
    }

    public static void test2() throws Exception {
        //读取文件。
        InputStream is = new FileInputStream("D:/DoNotHave.png");
    }
}

         2.捕获异常,尝试重新修复。

import java.util.Scanner;

public class Time {
    public static void main(String[] args) {
        while (true) {
            try {
                System.out.println(num());
                return;
            } catch (Exception e) {
                System.out.println("请输入数字");
            }
        }
    }

    public static double num() throws Exception{
        Scanner sc = new Scanner(System.in);
        double a;
        while (true) {
            a = sc.nextDouble();
            if (a >=0) {
                return a;
            }else {
                System.out.println("请输入不小于0的数");
            }
        }
        
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值