java中的异常是什么?

Throwable(所有errorexception的父类:超类)

Java将错误变成对象交给异常处理机制

Error(仅靠程序本身无法恢复的严重错误)

一般是环境的问题,JVM的问题,并非程序的问题;最典型的就是虚拟机中运行的程序过多,造成的虚拟机内存溢出,虚拟机错误,还有系统崩溃之类的,应用程序是无法处理此类错误的。Error不在我们调试代码可以处理的范围中。

AWTError

ThreadDeath

...  ...

Exceptionjava应用程序抛出和处理的非严重型错误

Checked异常(检查时异常),程序必须处理的异常(代码调用,调用方声明有风险)

SQLException
ClassNotFoundException
......

例如文件调用:I/O 有可能找不到的风险


对于以上的文件读取可能发生的异常我们有两种处理方式:

1.    抛出,继续往上抛

2.    现场处理这个异常
 
 

运行时异常,不要求程序必须对它们做出处理(运行时才能抛出异常)

RuntimeException(运行时错误)
NullPointerException

对象没有被初始化生成的

NumberFormatException
ArrayIndexOutOfBoundsException
数组越界错误

......

ArithmeticExecption

数学异常(类似除零错误):

 

Java中的异常处理是通过5个关键字来实现的:

捕获

try 执行可能产生异常的代码

Catch 异常捕获

Finally 无论是否发生异常总能执行的代码

抛出

Throw 手动抛出异常

Throws 声明方法可能要抛出的各种异常

 

使用trycatchfinally的三种情况:

1.程序正常运行(不经过catch):

2.程序发生异常,经过catch且异常匹配:

3.程序发生异常,但是不能被catch和catch的不匹配:

如果出现不能被catch那么程序就会报错,将异常往上抛,抛给JVM。

上面讲的是一段代码只有一种异常的最简单的情况;更多的时候一段代码不止一种异常:

这里的try中有多行代码,可能出现的异常有多种:数学异常,String字符串的空指针异常,在try中如果出现了异常时,会在catch中寻找对应可以解决的catch块,但是如果将exception放在三个catch的最前面,就会报错,因为exception是所有异常的超类,出现异常必然会进入到exception中,后面的两个catch就会失效了


使用throwthrows

在java本身的语法中就是对异常执行抛出的动作,java本身的语法 会把异常一层一层的往上抛,方法中出现了异常,则会把异常抛给调用它的主函数,主函数无法解决,就会把异常再次往上抛出,最后抛到JVM导致JVM死掉。


使用throws抛出的运行时异常相当于提示调用者,该方法有风险,至于是否处理该风险,由调用者决定;如果throws抛出的是检查时异常,那么调用者自己就必须在调用的时候进行处理(利用try ... catch),当然通过throws可以同时抛出多个异常.

 

 

 

------------------------------异常案例------------------------------------

package javaexception;

 

publicclassExceptionTest1{

  publicstaticvoidmain(String[]args){

    Workerworker=newWorker();

    try{

      worker.work(11);

    }catch(Exceptione){

      Doctordoctor=newDoctor();

      try{

        doctor.cure(worker);

        System.out.println("治好了");

      }catch(Exceptione1){

        System.out.println("die");

      }

    }

   

  }

}

 

 

classWorker{

  privatebooleanalive=true;

 

  publicbooleanisAlive(){

    returnalive;

  }

 

  publicvoidsetAlive(booleanalive){

    this.alive=alive;

  }

 

  //工作的方法

  publicvoidwork(intcount)throwsException{

    if(count>10){

      thrownewException("生病");

    }else{

      System.out.println("正常工作");

    }

   

  }

 

}

 

classDoctor{

  publicvoidcure(Workerworker)throwsException{

    intt=(int)(Math.random()*10000);

    if(t==4512){

      worker.setAlive(false);

      thrownewException("death");

    }else{

      worker.setAlive(true);

    }

   

  }

 

}

--------------------------------------------

 

 

 

运行时异常:

捕获:

 

特别提醒:在try... catch...  finally中 finally最好不省略,因为finally是保证程序是否发生异常,都必须执行的代码(即使我们在try块中强行return之后,finally中依然会执行),(例如我们在I/O流里面,必须做的关闭操作就应该放在finally中  ||需要强调的是:唯一能终止finally执行的操作就是 System.exit(0); 及其它相关类似操作,这一类操作是直接终止程序的运行,关闭JVM

如果在finally中发生异常的话,照样也会程序中断,因为没有人处理这个异常。

 

 

抛出:

Throw表示手动抛出一个异常,throws是声明该方法可能会抛出的异常(运行时异常调用者不用必须处理;只是知道这里会抛出这样一个异常)



 

检查时异常:

捕获:

printStackTrace是打印异常堆栈,但是一般我们不建议打印异常堆栈(IDE工具里JVM默认生成的),具体问题具体处理,一层一层的打印堆栈是比较耗性能的。


抛出:

如果抛出的是检查时异常那么就必须被处理,要么在手动抛出的地方立马用try catch进行处理,要么继续往上抛,抛给调用这个方法的方法或者主函数,如下例:

 

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java异常处理机制是一种用于处理程序运行时错误的机制。当程序出现异常情况时,异常处理机制可以捕获并处理这些异常,使程序能够以一种可控的方式继续执行,而不是直接崩溃终止。 Java异常分为两种类型:检查异常(checked exception)和非检查异常(unchecked exception)。 1. 检查异常(Checked Exception): 检查异常是指在编译时必须进行处理的异常。它们继承自`Exception`类,包括诸如`IOException`、`SQLException`等。如果方法可能抛出一个检查异常,要么在方法使用`try-catch`块来捕获并处理异常,要么在方法声明使用`throws`关键字声明将异常抛给调用者处理。 2. 非检查异常(Unchecked Exception): 非检查异常是指不需要在编译时进行处理的异常。它们继承自`RuntimeException`类,包括诸如`NullPointerException`、`ArrayIndexOutOfBoundsException`等。非检查异常通常是由程序逻辑错误造成的,应该在代码进行预防和修复。 Java异常处理机制使用了以下关键字和语句: - `try-catch`块:用于捕获并处理异常。在`try`块编写可能抛出异常的代码,并使用`catch`块来捕获和处理特定类型的异常。 - `throws`关键字:用于在方法声明声明可能抛出的异常,将异常抛给调用者处理。 - `finally`块:可选的`finally`块用于包含在`try-catch`块之后执行的代码,无论是否发生异常都会执行。 通过使用异常处理机制,程序可以更好地处理和恢复错误情况,提高程序的健壮性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值