java catch中throw_Java的catch块中throw e和throw new Exception(e)有什么区别?
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)有什么区别?相关推荐
- _091_Java_在catch抛出异常的同时finally块中也抛出异常的情况
public class TestException_2 {public static void main(String[] args) throws Exception{try {throw new ...
- java 静态变量与静态初始化块中变量的初始化顺序
2019独角兽企业重金招聘Python工程师标准>>> package test;public class Test {//静态变量 aprivate static int a=b( ...
- 未命名语句块中的声明
未命名语句块中的声明 命名块中的局部变量 Verilog允许在命名的begin-end或fork-join块中声明局部变量.局部变量声明的通常用法是声明一个临时变量进行循环控制.局部变量避免了对同名但 ...
- CUDA中SM对线程块的调度
sm流处理器簇对blocks的调度策略 在cuda中,GPU中的SM(比如GTX650有两个SM处理器)被CPU调度器把线程块逐个分配到SM上,每个SM同时处理这个被分配的线程块,但是每次每个时刻只能 ...
- try中的return和finally中的return
我们都知道在try-catch-finally中,try块先执行,如果捕获到异常,则执行catch块,如果没有捕获到异常,那么catch块始终不执行,在catch块执行完之后,finally块最后执行 ...
- java如何捕获多个异常_是否可以在单个catch块中捕获多个Java异常?
例外是程序执行期间发生的问题(运行时错误).发生异常时,程序会突然终止,并且生成异常的行之后的代码将永远不会执行. 代码中有多个异常 在Java 7之前,只要我们有一个可能会生成多个异常的代码,并且如 ...
- 在Java中,每个try块后面都必须紧跟catch块吗?
The question is that "Is it necessary that each try block must be followed by a catch block in ...
- (转)java 中的try catch finally 语句中含有return语句的执行情况(总结版)
原处:http://blog.csdn.net/ns_code/article/details/17485221 在这里看到了try catch finally块中含有return语句时程序执行的几种 ...
- java中try 与catch的使用
(2011-10-08 17:08:43) 转载▼ 标签: 杂谈 分类: Java try{ //代码区 }catch(Exception e){ //异常处理 } 代码区如果有错误,就会返回所写异 ...
- java try的用法_Java中try、catch的使用方法
Java中有两种处理异常的方式,分别是用throws抛出异常.用try.catch捕获异常. try-catch 在Java try-catch语句的语法格式: try{ //代码块 }catch(E ...
最新文章
- 李春平:钱不是奥黛莉赫本给的
- guns框架字典取值_10分钟搞定Guns快速开发平台
- coreboot学习3:启动流程跟踪之bootblock阶段
- 在vivo面试 java_面试代码题(vivo)数位之积
- SSH远程管理、参数讲解、xshell使用、scp,sftp,ssh命令(ssh两种方式的密钥验证方...
- php fakepath,在文件上载中获取真实路径而不是“fakepath”
- 全球及中国建筑涂料市场盈利能力分析与产值规模预测报告2022版
- xtrabackup 实现mysql的全量备份与增量备份
- bootstrap 4 在VS中的使用
- E03.04 Blue-Collar Boom: How China Bounced Back From the Virus
- MATLAB中FIR滤波器的时延溢出问题详解:线性相位对信号造成的时延溢出及其消除方法,以及fir1等函数的使用
- 基础算法4 —— 结构体(成绩统计) + 栈(模拟进制转换 + 优秀的拆分) + 指针
- 孙悟空先后取过三次经,儒经、道经与佛经
- 怎么选择适合自己的SDWAN部署方案
- 华为鸿蒙系统与麒麟系统,搭载鸿蒙系统,麒麟9000处理器
- 如何做好软件维护工作
- 计算机组装论文的摘要,计算机组装与维修论文摘要怎么写 计算机组装与维修论文摘要范文参考...
- 计算机班级平均分分类汇总,使用分类汇总汇总平均分.docx
- python学习笔记之代码规范
- Explore EPF021D ADC微控制器