5.1. 异常层次结构

一. 异常的基本概念

1. 什么是异常, java提供异常处理机制有什么用?

异常就是程序执行过程中的不正确情况。

==以下程序执行过程中发生了不正常的情况,而这种不正常的情况叫做:异常
java语言是很完善的语言,提供了异常的处理方式,以下程序执行过程中出现了不正常情况,
java把该异常信息打印输出到控制台,供程序员参考。程序员看到异常信息之后,可以对
程序进行修改,让程序更加的健壮。==

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

int a = 10;
int b = 0;
int c=a/b;
System. out.println(a + "/”+ b + "="+ c);
    }
}
image.png

观察到异常信息之后,对程序进行修改,更加健壮

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

            int a=10;
            int  b=0;
            if(b == 0){
                System.out.println("除数不能为0");
                return; 
            }
            int c= a/b;
            System. out.println(a + "/"+ b + "=" + c);
        }
    }

2. 上述程序出现了异常信息:

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at ExceptionText.main(ExceptionText.java:6)

这个信息被我们称为:异常信息。这个信息是JVM打印的

二. java中异常以类和对象形式存在

1. 异常在Java中以类的形式存在,每一个异常类都可以创建异常对象

public class ExceptionText {
        public static void main(String[] args) {
            
            //java.lang.NumberFormatException: 数字格式化异常
            NumberFormatException nfe = new NumberFormatException("数字格式化异常");
            System.out.println(nfe);

            NullPointerException npe = new NullPointerException("空指针异常发生了");
            // java.lang.NullPointerException:空指针异常发生了
            System.out.println(npe);
        }
    }
image.png

2. 异常对应的现实是怎样的?

火灾(异常类)
2008年8月8日,小明家着火了(异常对象)
2008年8月9日,小刚家着火了(异常对象)
2008年9月8日,小红家着火了(异常对象)

类是模板,对象是实际存在的个体

三. 异常的继承结构

1. Object下有Throwable(可抛出的)

不管是错误还是异常都是可以抛出的。

2. Throwable下有两个分支

  1. Error(不可处理的,直接退出JVM)
  2. Exception(可处理的)

所有的错误只要发生,Java程序只有一个结果,那就是终止程序的执行。退出JVM,错误是不能处理的。

3. Exception下有两个分支

  • Exception的直接子类(Exceptionsubclass):编译时异常(要求程序员在编写程序阶段必须预先对这些异常进行处理,如果不处理编译器报错,因此得名编译时异常)


  • RuntimeException: 运行时异常。(在编写程序阶段程序员可以预先处理,也可以不管)


image.png

四. 编译时异常和运行时异常区别

1. 编译时异常因为什么而得名

编译时异常和运行时异常,都发生在运行阶段。编译阶段异常是不会发生的。编译时异常因为什么而得名?

==因为编译时异常必须在编译(编写)阶段预先处理,如果不处理编译器报错,因此得名。
所有异常都是运行阶段发生的。因为只有程序运行阶段才可以new对象。
因为异常的发生都是new异常对象。==

2. 编译时异常和运行时异常区别

  • 编译时异常一般发生的概率比较高。
    对于一些发生概率较高的异常,需要在运行之前对其进行预处理。
  • 运行时异常一般发生的概率比较低。

假设java中没有对异常进行划分,没有分为:编译时异常和运行时异常,所有的异常都需要在编写程序阶段对其进行预处理,将会是怎样的效果呢?

如果代码是这样的话,程序肯定是绝对安全的。但是程序员编写程序太累,代码到处都是处理异常的代码

3. 编译时异常还有其他名字

  • 受控异常 (CheckException)
  • 受检异常

4. 运行时异常还有其他名字

  • 未受检异常(UnCheckException)
  • 非受控异常

5. 所有异常都发生在运行阶段的

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇