Java 异常处理机制

Java 异常处理机制

作者:邹爱红
撰写时间:2019年05月08日

Java异常处理机制为:抛出异常,捕捉异常,处理异常。

使用try…catch捕获异常有五点要注意:

  1. 不要过度使用异常,不能使用异常处理机制来代替正常的流程控制语句:就是不能用异常代替流程控制语句:比如:ifelse,能用流程控制语句解决的问题,不要扔给异常

  2. 异常捕获时,一定要先捕获小范围异常,再捕获大范围异常。否则小范围异常将无法被捕获,如果大范围的在上面先捕获,下面的小范围就不能捕获了,Exception是大范围的

  3. 避免出现庞大的try块:被扔到try块中的代码就相当于Java虚拟机会有一个监视得类去监视它。运行过程是慢的

  4. 避免使用catch(Exception e){}所有的异常,

  5. 不要忽略异常:就是catch中要有代码块,不能是空的

异常的根类 :
Throwable 可抛出的生成Error错误类,出现错误就无法往回的
Exception常用方法:
printStackTrace标准错误流默认打印方式 打印出错误的追踪信息(从哪里错的一直打印到调用的位置为止)帮助你追踪错误产生的过程。
打印异常信息printStackTrace打印错误的信息到指定的文件
getMessage()只返回消息字符串 打印文字的信息
getLocalizedMessage 打印出本地错误信息
getMessage 只返回消息字符串,打印出文字错误信息等等

Java异常体系分两种(异常(Exception)和错误(Error)),
异常(Exception):可以抛出多种异常,常用的有这些……
NumberFormatException 数字格式异常 转换异常数字
ArithmeticException:算术异常
ArrayIndexOutOfBoundsException 数组索引越界
IndexOutOfBoundsException索引越界异常
Exception其它异常

Error错误类: 出现错误就无法往回的
Checked异常和Runtime异常
有一些异常必须抛,有一些不用抛
Checked异常可检测的异常,没有完善错误处理的代码根本就不会被执行!

Runtime异常运行时异常,不会显示声明抛出,如果程序需要捕获
Runtime异常,也可以使用try…catch块来实现。

  1. throws抛出异常和throw抛出异常

throws把异常给抛出去,在这个方法中,如果用了throws,就是在告诉调用者,这些异常不处理,给调用者去处理。;如果main方法也不知道如何处理这种类型的异常,也可以使用throws声明抛出异常,该异常将交给JVM处理。JVM对异常的处理方法是,打印
异常的跟踪栈信息,并中止程序运行。谁调用谁处理。只是声明抛出去,但是不处理这个异常,声明不处理当前这个方法.

throw给一个权限,手动去抛出一个异常:就是那个异常是自己定义的在有些判断的情况下,需要让上层知道的时候,可以结合异常机制的时候,自己手动去抛一个异常,这个就是在那些try
catch中去自定义一些错误信息。 如果需要在程序中自行抛出异常,则应使用throw语句,throw语句可以单独使用,
throw语句抛出的不是异常类,而是一个异常实例,而且每次只能抛出一个异常实例

自定义异常类需要继承Exception

  1. 需要自定义哪个异常(自己定义一个类起名字)就需要继承一个java里面的异常Exception Class Demo1Exception extends Exception {
  2. 然后默认序列化id
  3. 需要提供两个构造器:一个是无参数的构造器;另一个是带个字符串参数的构造器(定义一个有参数的构造器把参数调用给super(里面是字符串的参数),不调用super就获取不了信息),主要是为了描述信息。

只需要实现以下
它的无参数构造器和有字符串参数的构造器(跟类名一致),其它需要什么就往里面加,
主方法里面就可以用自定义异常实例throw的来捕捉错误信息
try {
被扔到try块中的代码就相当于Java虚拟机会有一个监视得类去监视它。运行过程是慢的
} catch (Demo1Exception e) { 捕获自定义Demo1Exception异常
e.printStackTrace();打印追踪信息
}
public static int shang(int x, int y) throws 构造器1{
if (y < 0) {
throw new 构造器1(“自定义错误信息”);
在有些判断的情况下,需要让上层知道的时候,可以结合异常机制的时候,自己手动去抛一个异常,
}

Java中允许用户自定义异常,买单时自定义异常类必须继承Exception或者子类:

public class ExceptionDemo3 {
public static void main(String[] args)
{
//下面定义一个try catch语句捕获异常
try {
shang(4,-2);
}
catch (Demo1Exception e) {//捕获自定义异常
e.printStackTrace();
}
}
public static int shang(int x, int y) throws Demo1Exception{
if (y < 0) {
throw new Demo1Exception(“被除数小于0”);// 抛出自定义异常
}
int m = x / y;
return m;
}
}
//自定义异常类继承Exception异常基类
class Demo1Exception extends Exception {
//序列化ID
private static final long serialVersionUID = 1L;
// 1、提供一个无参构造器
public Demo1Exception() {
}
// 2、带一个字符串参数的构造器
public Demo1Exception(String msg) {
super(msg);
}
}

自定义异常的结果:
在这里插入图片描述

一般Java里面都是用Java自身的异常,来捕捉错误,自定义异常类很少。
try { 代码
} catch (ArrayIndexOutOfBoundsException e) { JAVA中的数组索引越界异常
e.printStackTrace();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值