异常( 第11章 )

本文介绍了Java中的异常处理机制,包括编译时异常和运行时异常的区别,异常的抛出与捕获,以及如何使用try-catch-finally语句块进行异常处理。示例代码展示了当尝试设置年龄小于18时抛出运行时异常的情况。
摘要由CSDN通过智能技术生成

Mind

Object
java.langThrowable
Error
Exception
RuntimeException运行时异常
编译时异常
异常
可检测异常
不可检测异常
RuntimeException及其后代类

编译阶段:
Java不会运行代码,只会检查语法是否错误,或者做一些性能的优化

  1. Exceptions 异常 由程序或运行时环境抛出,可以根据需要进行相应的捕获和处理,父类Exception
  2. error 错误 代表不可恢复的问题(系统级别的错误)并且必须捕获处理
  3. 异常和错误都是对象,代表非正常情况或无效处理
  4. 常见异常:
  • 试图做除0处理
  • 数组索引越界
  • 找不到指定的文件
  • 不能正常完成被请求的I/O操作
  • 执行了空引用
  • 执行的操作违反了某种安全规则
  1. 异常处理方法
  • 抛出处理
  • throws
    写在方法定义处,表示声明一个异常,告诉调用者,使用本方法,可能会有哪些异常
  • 编译时异常必须要写
  • 运行时异常可以不写
  • throw
    写在方法内,结束方法,手动抛出异常对象,交给调用者,方法中下面的代码就不再执行了
    加粗样式
public void method()throws 异常类名1,异常类名2...{
    ...
}
public void 方法(){
   throw new NullPointerException();
}
  • 根本不处理异常(程序终止运行或程序处于不正常状态)
  • 当异常发生时处理异常
  • 在程序的某个位置集中处理异常(上层,先运行的位置)
    原因:异常的传递
    如果在一个异常的发生处没有捕获和处理该异常,则该异常将传递给上级调用方法,直到传递出main方法,报错,程序停止运行
  • 捕获
  • 自己处理异常(当代码出现问题时可以继续往下执行,不会停止运行)

try…catch

  try {
          //可能出现异常的代码;
      }catch (异常类名 变量名){
          //异常的处理代码;
      }
  • 如果try中没有问题,会把try中的代码全部执行完,不会执行catch里面的代码
  • 一个try可以写多个catch分别捕获相对应的异常,如果没有相对应的异常捕获则try里面的语句不执行
  • 如果捕获多个异常,这些异常中存在父子关系,异常的父类写在下面
  • JDK7之后,我们可以在catch中捕获多个异常,中间用|隔开,且只能用一个
  • 如果catch捕获的异常与try里面的不一致,那么将会报错,程序停止运行
  • 如果try上面的语句出现异常被捕获,下面的语句将不再执行
  1. 作用
  • 查看bug的关键参考信息
  • 可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况
package Java;

public class Exception {
    public static void main(String[] args) {
        Student s = new Student();
        s.setAge(8);

    }
    static class Student{
        private int age;

        public Student() {
        }

        public Student(int age) {
            this.age = age;
        }
        public void setAge(int age){
            if(age < 18){
                throw new RuntimeException();//抛出异常
            }else this.age = age;
        }
    }
}

  1. 异常抛出时所输出的信息,提供了方法调用堆栈踪迹,调用堆栈踪迹可以显示引起异常方法发生的各个方法的调用顺序
  • getMessage方法返回一个字符串,解释异常抛出的原因
  • printStackTrace方法输出调用堆栈踪迹信息

Throwable成员方法

方法名称说明
public String getMessage()返回此throwable的详细消息的字符串
public String toString()返回此可抛出的简短描述
public void printStackTrance()把异常的错误信息输出在控制台,不会停止程序运行

了解:System.err.println(123)//输出红色的123,打印顺序也有所不同

finally子句

  • 写在所有catch语句之后,无论怎样,都会在最后执行finally里的语句

自定义异常

在这里插入图片描述
在这里插入图片描述

I/O异常(可检测异常)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值