Java异常处理机制详解(建议收藏保存)。

Posted 百思不得小赵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java异常处理机制详解(建议收藏保存)。相关的知识,希望对你有一定的参考价值。

前言

异常层次结构图:

Java异常处理机制详解(建议收藏保存)。_exception

一、概述

  1. 异常机制:程序在执行过程中发生了不正常的情况。

代码演示:

public class ExceptionText 
public static void main(String[] args)
int a=100;
int b=0;
System.out.println(a/b);

运行结果:

Java异常处理机制详解(建议收藏保存)。_java_02


没有正确输出,抛出了被 0 除异常

通过以上示例,我们看到 java 给我们提供了这样一个体系结构,当出现问题的时候,它会告

诉我们,并且把错误的详细信息也告诉我们了,这就是异常的体系结构,这样我们的程序更健

壮,我们可以把这个信息,再进行处理以下告诉用户。从上面大家还可以看到,java 异常都是

类,在异常类中会携带一些信息给我们,我们可以通过这个类把信息取出来


  1. java提供异常处理机制,将不正常情况输出在控制台,供程序员参考,修改代码,提高代码的健壮性!!!


  1. 例如常见的:​​ArrayIndexOutOfBoundsException异常​​​、​​ClassCastException异常​​​、​​NullPointerException异常​


  1. 异常在java中以类和对象的形式存在每个类可以创建对象。

  1. Throwable下有两个分支:Error(不可处理,直接退出JVM)和Exception(可处理的)
    Exception下有两个分支:Exception的直接子类:编译时异常(要求程序员在编写程序阶段必须预先对这些异常进行处理,如果不处理编译器报错)。RuntimeException:运行时异常。(在编写程序阶段程序员可以预先处理,也可以不处理)


  2. 编译时异常(受控异常)和运行时异常(非受控异常),都是发生在运行阶段。
  3. 编译时异常和运行时异常的区别?


编译时异常一般发生的概率比较高。
举个例子:
你看到外面下雨了,倾盆大雨的。
你出门之前会预料到:如果不打伞,我可能会生病(生病是一种异常)。
而且这个异常发生的概率很高,所以我们出门之前要拿一把伞。
“拿一把伞”就是对“生病异常”发生之前的一种处理方式。
对于一些发生概率较高的异常,需要在运行之前对其进行预处理。
运行时异常一般发生的概率比较低。
举个例子:
小明走在大街上,可能会被天上的飞机轮子砸到。
被飞机轮子砸到也算一种异常。
但是这种异常发生概率较低。
在出门之前你没必要提前对这种发生概率较低的异常进行预处理。
如果你预处理这种异常,你将活的很累。


二、异常处理

Java中异常处理有两种方式:

  • 在方法声明的位置上,使用throws关键字,抛给上一级。谁调用我,我就抛给谁。抛给上一级。
public class ExceptionText 
public static void main(String[] args) throws Exception
int a=100;
int b=0;
divide(a,b);


public static void divide(int a, int b) throws Exception
int c = a / b;
System.out.println(c);

  • 使用try…catch语句进行异常的捕捉。
public class ExceptionText 
public static void main(String[] args)
int a=100;
int b=0;
try
divide(a,b);
catch (Exception e)
e.printStackTrace();


public static void divide(int a, int b) throws Exception
int c = a / b;
System.out.println(c);

注意:


1.Java中异常发生之后如果一直上抛,最终抛给了main方法,main方法继续向上抛,抛给了调用者JVM,JVM知道这个异常发生,只有一个结果。终止java程序的执行。
2.try语句中某一行出现异常该行后续代码不执行try…catch捕获后,后续代码可执行。


try…catch和finally概述

  • 语法格式:
try 

catch(OneException e)

catch(TwoException e)

finally

  • try 中包含了可能产生异常的代码
  • try 后面是 catch,catch 可以有一个或多个,catch 中是需要捕获的异常
  • finally 表示:不管是出现异常,还是没有出现异常,finally 里的代码都执行,finally 和 catch
    可以分开使用,但 finally 必须和 try 一块使用
try 

finally

  • ​catch(异常1 | 异常2 |异常3 |......)​​jdk8新特性!!

示例代码(1):

public class ExceptionText 
public static void main(String[] args)
int a=100;
int b=0;
try
divide(a,b);
//上一行代码有异常,直接进入catch里面!!
System.out.println("我能执行吗?");
catch (Exception e)
System.out.println("被0除了!!");


public static void divide(int a, int b) throws Exception
int c = a / b;
System.out.println(c);

运行结果:

被0除了!!

示例代码(2):

public class ExceptionText 
public static void main(String[] args)
int a=100;
int b=0;
try
divide(a,b);
//上一行代码有异常,直接进入catch里面!!
System.out.println("我能执行吗?");
catch (Exception e)
System.out.println("被0除了!!");
finally
System.out.println("finally执行了!!");


public static void divide(int a, int b) throws Exception
int c = a / b;
System.out.println(c);

运行结果:

被0除了!!
finally执行了!!

throws与try…catch如何选择?

需要上报异常使用throws,需要捕获异常时使用try…catch进行捕获!!

finally重要面试题:

示例代码(3):

public class FinallyText 
public static void main(String[] args)
System.out.println(n());


public static int n()
int i=100;
try
return i;
finally
i++;


运行结果:你们猜猜?有兴趣的铁子评论区讨论讨论一番哦!!!

Java异常处理机制详解(建议收藏保存)。_编程语言_03

final、finalize 和 finally区别详述。

  1. final:是一个关键字,表示最终的,不变的,可修饰属性、方法等!
  2. finalize:是Object类的一个方法,无需程序员调用,JVM垃圾回收器GC调用。
  3. finally:与try一起使用,异常处理机制中,finally语句块一定执行!!

三、异常中两个迷人的方法

取得异常描述信息:getMessage()

示例代码(4):

public class ExceptionText01 
public static void main(String[] args)
int a=100;
int b=0;
try
int c=a/b;
System.out.println(学懂Java异常处理

关于java中异常机制

最新 Java 系列教程,共 99+ 篇,建议收藏~

JAVA 异常处理机制

异常 异常处理

java异常处理详解!!