Java中把非正常情况分为两种,异常(Exception)和错误(Error)。

异常.png

Error:一般是指与虚拟机相关的问题(虚拟机错误、线程死锁等),这种错误无法回复或不可能捕获

Exception:强制性要求用户必须处理

RuntimeException:非检查异常,是Exception的子类,由用户选择是否进行处理

自定义异常:继承自Exception类,可以使用父类的大量的方法,也可自己编写方法来处理特定的事件。

自定义异常示例:

class MyException extends Exception {

public MyException(String message) {

super(message);

}

}

public class DefinedException {

public static void main(String[] args) {

try {

throw new MyException("\n自定义异常类!");

} catch(MyException e) {

System.out.println(e);

}

}

}

1、 异常抛出

1.1 throws关键字

使用throws将异常进行抛出,throws声明的方法表示该方法不处理异常,而由系统自动将所捕获的异常信息抛给上级调用方法。抛出的异常由上级调用者处理,上级调用者可以进行处理或抛出异常,上级调用者可以抛出更广泛的异常。

如果main方法也不知道如何处理异常就也可以使用throws抛出异常,那么该异常就会交给JVM处理。JVM将打印异常的跟踪栈信息,并中止程序运行。

示例

public class throwsDemo {

public static void main(String[] args) {

int[] a = new int[5];

try {

setZero(a,10);

} catch(ArrayIndexOutOfBoundsException ex) {

System.out.println("数组越界错误!");

System.out.println("异常:"+ex);

}

System.out.println("main()方法结束。");

}

private static void setZero(int[] a,int index) throws ArrayIndexOutOfBoundsException {

a[index] = 0;

}

}

1.2 throw关键字

除了使用throws抛出异常外也可以使用throw自行抛出异常。throw语句可以单独使用, throw语句抛出的不是异常类,而是一个异常实例,而且每次只能抛出一个异常实例。

示例

public class ExceptionDemo {

public static void main(String[] args) {

int[] a = new int[5];

try {

setZero(a,10);

} catch(ArrayIndexOutOfBoundsException e) {

System.out.println("异常:"+e);

}

System.out.println("main()方法结束!");

}

public static void setZero(int[] a,int index) throws ArrayIndexOutOfBoundsException {

System.out.println("setZero方法开始:");

try {

a[index] = 0;

} catch(ArrayIndexOutOfBoundsException ex) {

throw ex;

} finally {

System.out.println("setZero方法结束。");

}

}

}

对应抛出的异常实例,既可以显式捕获该异常,也可完全不理会该异常,把该异常交给该方法调用者处理。

2、 异常捕获

而对于Exception我们乐意使用try...catch进行捕获。try...catch不允许存在单独的try或者catch块,可存在多个catch块。try块中存放业务功能代码,catch块中存放异常处理代码。对于捕获的异常一般可以使用printStackTrace()方法追踪输出至标准错误流。

try...catch后可以添加finally,使用finally可以保证系统退出,finally块中代码绝对执行,捕获异常需要先补货小异常,否则小异常将无法被捕获。

示例

public class DealException {

public static void main(String args[]) {

try { //要检查的程序语句

int a[] = new int[5];

a[10] = 7;//出现异常

} catch(ArrayIndexOutOfBoundsException ex) {//异常发生时的处理语句

System.out.println("超出数组范围!");

ex.printStackTrace();//显示异常的堆栈跟踪信息

} catch(ArithmeticException ex) {//在异常捕捉的过程中要进行两个判断,第一是try程序块是否有异常产生,第二是产生的异常是否和catch()括号内想要捕捉的异常相同。

//可以在一个try语句后跟上多个异常处理catch语句,来处理多种不同类型的异常。

System.out.println("算术运算异常");

ex.printStackTrace();

} finally{ //这个代码块一定会被执行

System.out.println("*****");

}

System.out.println("异常处理结束!");

}

}

参考文档:

java 捕捉的异常抛出_Java异常抛出和捕获相关推荐

  1. java 异常面试问题_Java异常面试问答

    java 异常面试问题 Java provides a robust and object-oriented approach to handle exception scenarios known ...

  2. java方法后面throw的作用_Java异常处理中throw与throws的用法区别

    前言 说到异常,我们当然会想到try catch finally.当然如果用这个的话,被try块包围的代码说明这段代码可能会发生异常,一旦发生异常,异常便会被catch捕获到,然后需要在catch块中 ...

  3. java 异常怎么划分_java异常的分类

    所有异常都继承自java.lang.Throwable类,throwable有两个直接子类Exception和Error. 1 Exception Exception分两类:运行时异常RuntimeE ...

  4. java 异常后重试_java – 异常后自动重试的功能

    如果抛出一些异常,我已经使这个抽象类自动重试网络调用. >我在InterruptedException&之后注意不要重试 的UnknownHostException. >我重试了5 ...

  5. java异常详细讲解_java异常的讲解

    java的异常类----Throwable是所有异常类的超类哦,俗称:超人 Throwable |--Error |--Exception |--NullPointException |--..... ...

  6. java 正则表达式 中文数字和字母_Java中过滤出字母、数字和中文的正则表达式 | 学步园...

    1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式 [^(A-Za-z)] (2)过滤出数字的正则表达式 [^(0-9)] (3)过滤出中文的正则表达式 [^(\\u4e0 ...

  7. java 正则表达式 中文数字和字母_Java中过滤出字母、数字和中文的正则表达式...

    1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式 [^(A-Za-z)] (2)过滤出数字的正则表达式 [^(0-9)] (3)过滤出中文的正则表达式 [^(\\u4e0 ...

  8. java在文件里搜字段_Java 如何找出两个文本文件中有相同字段的行

    Java有什么方便的类库做文件对比吗?比如:文件Old.txt和New.txt,第一行是列名,需要取出文件中Name字段相同的内容.部分数据如下: Old.txt New.txt Name   Dep ...

  9. java出现次数最多的数_java如何找出一个int数组中出现次数最多

    展开全部 其实这个问题,涉及到两个过程首先是统计数组中数字出现的次数,应该要有类32313133353236313431303231363533e78988e69d8331333365636666似& ...

最新文章

  1. 用牛顿迭代法求浮点数的平方根
  2. python电脑要求-学python对电脑配置有要求么
  3. Linux 历史命令巧用
  4. UNITY崩溃的日志
  5. Science上发表的超赞聚类算法
  6. js----CSRF-跨站请求伪造攻击
  7. 最新android proguard下载
  8. 计算机网络技术之城域网与三网融合技术
  9. 几种常用设计模式的简单示例
  10. 小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_3、快速创建SpringBoot应用之手工创建web应用...
  11. MATLAB compatloose,麻烦帮忙看下这个视频
  12. ARM9 S3C2440 定时器中断
  13. SageMaker 基于 Blazing Text的中文新闻标题分类
  14. 用python写模拟鼠标脚本
  15. 没病到一定程度,你千万别去。
  16. MATLAB实现数字滤波器的频带变换
  17. python3 excel 图表导出图片_使用python代码将excel中的图表导出为图片
  18. 机器学习-特征归一化
  19. Pose for Everything: Towards Category-Agnostic Pose Estimation 阅读笔记
  20. BIOS界面部分信息

热门文章

  1. 学生选课管理系统 jsp + servlet + mysql (2021)
  2. xss漏洞利用方式总结
  3. Python版本控制工具 py launcher
  4. 微型计算机认证部件,节能产品认证-微型计算机用开关电源
  5. C#连接Access数据库
  6. 高德地图坐标的获取( JavaScript API )
  7. json-editor-vue3 Vue3 json编辑器使用
  8. LPC24xx系列CAN波特率计算
  9. 牛客寒假算法基础集训营2:处女座的砝码(初遇三进制)
  10. Java 提供的默认排序算法