Exception(异常)是程序执行期间发生的问题(运行时错误)。这是一些示例方案-如果您的数组大小为10,如果代码中的一行尝试访问该数组中的第11个元素。

如果您试图用0除以一个数字(结果是无穷大,而JVM不知道如何计算它的值)。

发生异常时,程序会在导致异常的行突然终止,从而使程序的其余部分无法执行。为防止这种情况,您需要处理异常。

java中有两种类型的异常。未检查的异常 - 未检查的异常是在执行时发生的异常。这些也称为运行时异常。其中包括编程错误,例如逻辑错误或API使用不当。编译时将忽略运行时异常。

检查异常 - 检查异常是在编译时发生的异常,也称为编译时异常。这些异常不能在编译时简单地忽略。程序员应注意(处理)这些异常。

处理异常

为了处理异常,Java提供了try-catch块机制。

在可能产生异常的代码周围放置了一个try / catch块。try / catch块中的代码称为受保护代码。

语法try {

// Protected code

} catch (ExceptionName e1) {

// Catch block

}

当异常在try块内引发时,JVM将异常详细信息存储在异常堆栈中,并继续处理catch块,而不是终止程序。

catch语句涉及声明您要捕获的异常类型。如果try块中发生异常,将验证try之后的catch块。

如果在catch块中列出了发生的异常类型,则将异常传递给catch块的方式与将参数传递给方法参数的方式一样。

示例import java.io.File;

import java.io.FileInputStream;

public class Test {

public static void main(String args[]){

System.out.println("Hello");

try{

File file =new File("my_file");

FileInputStream fis = new FileInputStream(file);

}catch(Exception e){

System.out.println("找不到给定的文件路径");

}

}

}

输出结果找不到给定的文件路径

重新抛出异常

当将异常缓存在catch块中时,可以使用throw关键字(用于抛出异常对象)将其重新抛出。

重新抛出异常时,您可以抛出相同的异常,而无需将其调整为-try {

int result = (arr[a])/(arr[b]);

System.out.println("Result of "+arr[a]+"/"+arr[b]+": "+result);

}catch(ArithmeticException e) {

throw e;

}

或者,将其包装在新异常中并抛出。 当您将缓存的异常包装在另一个异常中并抛出它时,这称为异常链接或异常包装,通过这样做,您可以调整您的异常,抛出维护抽象的更高级别的异常。try {

int result = (arr[a])/(arr[b]);

System.out.println("Result of "+arr[a]+"/"+arr[b]+": "+result);

}catch(ArrayIndexOutOfBoundsException e) {

throw new IndexOutOfBoundsException();

}

示例

在以下Java示例中,我们在demoMethod()中的代码可能会抛出ArrayIndexOutOfBoundsException和ArithmeticException。我们在两个不同的catch块中捕获了这两个异常。

在catch块中,我们通过包装在更高的异常中来抛出两个异常,而另一个则直接抛出。import java.util.Arrays;

import java.util.Scanner;

public class RethrowExample {

public void demoMethod() {

Scanner sc = new Scanner(System.in);

int[] arr = {10, 20, 30, 2, 0, 8};

System.out.println("Array: "+Arrays.toString(arr));

System.out.println("Choose numerator and denominator(not 0) from this array (enter positions 0 to 5)");

int a = sc.nextInt();

int b = sc.nextInt();

try {

int result = (arr[a])/(arr[b]);

System.out.println("Result of "+arr[a]+"/"+arr[b]+": "+result);

}catch(ArrayIndexOutOfBoundsException e) {

throw new IndexOutOfBoundsException();

}catch(ArithmeticException e) {

throw e;

}

}

public static void main(String [] args) {

new RethrowExample().demoMethod();

}

}

输出结果Array: [10, 20, 30, 2, 0, 8]

Choose numerator and denominator(not 0) from this array (enter positions 0 to 5)

0

4

Exception in thread "main" java.lang.ArithmeticException: / by zero

at myPackage.RethrowExample.demoMethod(RethrowExample.java:16)

at myPackage.RethrowExample.main(RethrowExample.java:25)

输出结果Array: [10, 20, 30, 2, 0, 8]

Choose numerator and denominator(not 0) from this array (enter positions 0 to 5)

124

5

Exception in thread "main" java.lang.IndexOutOfBoundsException

at myPackage.RethrowExample.demoMethod(RethrowExample.java:17)

at myPackage.RethrowExample.main(RethrowExample.java:23)

java catch中throw_Java的catch块中throw e和throw new Exception(e)有什么区别?相关推荐

  1. _091_Java_在catch抛出异常的同时finally块中也抛出异常的情况

    public class TestException_2 {public static void main(String[] args) throws Exception{try {throw new ...

  2. java 静态变量与静态初始化块中变量的初始化顺序

    2019独角兽企业重金招聘Python工程师标准>>> package test;public class Test {//静态变量 aprivate static int a=b( ...

  3. 未命名语句块中的声明

    未命名语句块中的声明 命名块中的局部变量 Verilog允许在命名的begin-end或fork-join块中声明局部变量.局部变量声明的通常用法是声明一个临时变量进行循环控制.局部变量避免了对同名但 ...

  4. CUDA中SM对线程块的调度

    sm流处理器簇对blocks的调度策略 在cuda中,GPU中的SM(比如GTX650有两个SM处理器)被CPU调度器把线程块逐个分配到SM上,每个SM同时处理这个被分配的线程块,但是每次每个时刻只能 ...

  5. try中的return和finally中的return

    我们都知道在try-catch-finally中,try块先执行,如果捕获到异常,则执行catch块,如果没有捕获到异常,那么catch块始终不执行,在catch块执行完之后,finally块最后执行 ...

  6. java如何捕获多个异常_是否可以在单个catch块中捕获多个Java异常?

    例外是程序执行期间发生的问题(运行时错误).发生异常时,程序会突然终止,并且生成异常的行之后的代码将永远不会执行. 代码中有多个异常 在Java 7之前,只要我们有一个可能会生成多个异常的代码,并且如 ...

  7. 在Java中,每个try块后面都必须紧跟catch块吗?

    The question is that "Is it necessary that each try block must be followed by a catch block in ...

  8. (转)java 中的try catch finally 语句中含有return语句的执行情况(总结版)

    原处:http://blog.csdn.net/ns_code/article/details/17485221 在这里看到了try catch finally块中含有return语句时程序执行的几种 ...

  9. java中try 与catch的使用

     (2011-10-08 17:08:43) 转载▼ 标签: 杂谈 分类: Java try{ //代码区 }catch(Exception e){ //异常处理 } 代码区如果有错误,就会返回所写异 ...

  10. java try的用法_Java中try、catch的使用方法

    Java中有两种处理异常的方式,分别是用throws抛出异常.用try.catch捕获异常. try-catch 在Java try-catch语句的语法格式: try{ //代码块 }catch(E ...

最新文章

  1. 李春平:钱不是奥黛莉赫本给的
  2. guns框架字典取值_10分钟搞定Guns快速开发平台
  3. coreboot学习3:启动流程跟踪之bootblock阶段
  4. 在vivo面试 java_面试代码题(vivo)数位之积
  5. SSH远程管理、参数讲解、xshell使用、scp,sftp,ssh命令(ssh两种方式的密钥验证方...
  6. php fakepath,在文件上载中获取真实路径而不是“fakepath”
  7. 全球及中国建筑涂料市场盈利能力分析与产值规模预测报告2022版
  8. xtrabackup 实现mysql的全量备份与增量备份
  9. bootstrap 4 在VS中的使用
  10. E03.04 Blue-Collar Boom: How China Bounced Back From the Virus
  11. MATLAB中FIR滤波器的时延溢出问题详解:线性相位对信号造成的时延溢出及其消除方法,以及fir1等函数的使用
  12. 基础算法4 —— 结构体(成绩统计) + 栈(模拟进制转换 + 优秀的拆分) + 指针
  13. 孙悟空先后取过三次经,儒经、道经与佛经
  14. 怎么选择适合自己的SDWAN部署方案
  15. 华为鸿蒙系统与麒麟系统,搭载鸿蒙系统,麒麟9000处理器
  16. 如何做好软件维护工作
  17. 计算机组装论文的摘要,计算机组装与维修论文摘要怎么写 计算机组装与维修论文摘要范文参考...
  18. 计算机班级平均分分类汇总,使用分类汇总汇总平均分.docx
  19. python学习笔记之代码规范
  20. Explore EPF021D ADC微控制器

热门文章

  1. 一北大毕业生的返乡报告:家乡面目全非 备感无力
  2. 计算机运行黑屏显示器正常,主机正常运行显示器黑屏怎么办_主机正常运行显示器黑屏的处理办法...
  3. A*算法中二叉堆的使用
  4. 计算机u盘病毒清除方式,彻底清除u盘病毒有什么方法呢
  5. mysql 悲观锁 详细讲解_mysql 悲观锁详解
  6. JS的迭代器和可迭代对象详解
  7. 关于求余和取模的区别以及负数取摸
  8. 醋醋SEO基础入门教程_seo入门基础知识
  9. 蜀门Online加密分析
  10. presto web UI介绍