深圳坪山网站制作公司,做国外网站用什么颜色,h5作品欣赏,开发平台都有哪些目录
6.3 方式2#xff1a;声明异常#xff08;throws#xff09;
6.4 手动抛出异常throw
6.4.1 概述
6.4.2 使用格式#xff1a;
6.4.3 实例代码
6.4.4 为什么要手动抛出异常对象#xff1f;
6.4.5 如何理解“自动”和“手动” 抛出异常对象
6.4.6 注意点
❓面试…目录
6.3 方式2声明异常throws
6.4 手动抛出异常throw
6.4.1 概述
6.4.2 使用格式
6.4.3 实例代码
6.4.4 为什么要手动抛出异常对象
6.4.5 如何理解“自动”和“手动” 抛出异常对象
6.4.6 注意点
❓面试题Java中throw和throws的区别
6.5 异常注意事项 6.3 方式2声明异常throws
1. 声明异常将问题标识出来报告给调用者。如果方法内通过throw抛出了编译时异常而没有捕获处理稍后讲解该方式那么必须通过throws进行声明让调用者去处理。
关键字throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常).
2. 声明异常格式 修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{ } 3. 声明异常的代码演示
public static void main(String[] args) throws FileNotFoundException {read(a.txt);
}// 如果定义功能时有问题发生需要报告给调用者。可以通过在方法上使用throws关键字进行声明
public static void read(String path) throws FileNotFoundException {if (!path.equals(a.txt)) {//如果不是 a.txt这个文件 // 我假设 如果不是 a.txt 认为 该文件不存在 是一个错误 也就是异常 throwthrow new FileNotFoundException(文件不存在);}
} throws用于进行异常类的声明若该方法可能有多种异常情况产生那么在throws后面可以写多个异常类用逗号隔开。
public static void main(String[] args) throws IOException {read(a.txt);
}public static void read(String path)throws FileNotFoundException, IOException {if (!path.equals(a.txt)) {//如果不是 a.txt这个文件 // 我假设 如果不是 a.txt 认为 该文件不存在 是一个错误 也就是异常 throwthrow new FileNotFoundException(文件不存在);}if (!path.equals(b.txt)) {throw new IOException();}
}
4. 是否真正处理了异常
从编译是否能够通过的角度来看看成是给出了异常万一要是出现时候的解决方案。此方案就是继续向上抛出throws).
但是此throws的方式仅是将可能出现的异常抛给了此方法的调用者。此调用者仍然需要考虑如何处理相关异常。从这个角度看throws的方式不算是真正意义上处理了异常。 5. 方法的重写的要求针对于编译时异常来说的
子类重写的方法抛出的异常类型可以与父类被重写的方法抛出的异常类型相同或是父类被重写的方法抛出的异常类型的子类。 7. 开发中如何选择异常处理的两种方式重要经验之谈 如果程序代码中涉及到资源的调用流、数据库连接、网络连接等则必须考虑使用try-catch-finally来处理保证不出现内存泄漏。 如果父类被重写的方法没有throws异常类型则子类重写的方法中如果出现异常只能考虑使用try-catch-finally进行处理不能throws. 开发中方法a中依次调用了方法b,c,d等方法。方法bc,d之间是递进关系此时如果方法b,c,d,中有异常我们通常选择使用throws,而方法a中通常选择使用try-catch-finally. 6.4 手动抛出异常throw
6.4.1 概述
Java 中异常对象的生成有两种方式 由虚拟机自动生成程序运行过程中虚拟机检测到程序发生了问题那么针对当前代码就会在后台自动创建一个对应异常类的实例对象并抛出。 由开发人员手动创建new 异常类型([实参列表]);如果创建好的异常对象不抛出对程序没有任何影响和创建一个普通对象一样但是一旦throw抛出就会对程序运行产生影响了。
在编写程序时我们必须要考虑程序出现问题的情况。比如在定义方法时方法需要接受参数。那么当调用方法使用接受到的参数时首先需要先对参数数据进行合法的判断数据若不合法就应该告诉调用者传递合法的数据进来。这时需要使用抛出异常的方式来告诉调用者。
在java中提供了一个throw关键字它用来抛出一个指定的异常对象。那么抛出一个异常具体如何操作呢 创建一个异常对象。封装一些提示信息(信息可以自己编写)。 需要将这个异常对象告知给调用者。怎么告知呢怎么将这个异常对象传递到调用者处呢通过关键字throw就可以完成。throw 异常对象。 throw用在方法内用来抛出一个异常对象将这个异常对象传递到调用者处并结束当前方法的执行。
6.4.2 使用格式 throw new 异常类名(参数); throw语句抛出的异常对象和JVM自动创建和抛出的异常对象一样。 如果是编译时异常类型的对象同样需要使用throws或者try...catch处理否则编译不通过。 如果是运行时异常类型的对象编译器不提示。 可以抛出的异常必须是Throwable或其子类的实例。
6.4.3 实例代码
学习完抛出异常的格式后我们通过下面程序演示下throw的使用。
public static void main(String[] args) {//创建一个数组 int[] arr {2,4,52,2};//根据索引找对应的元素 int index 4;int element getElement(arr, index);System.out.println(element);System.out.println(over);
}/** 根据 索引找到数组中对应的元素*/
public static int getElement(int[] arr,int index){ //判断 索引是否越界if(index0 || indexarr.length-1){/*判断条件如果满足当执行完throw抛出异常对象后方法已经无法继续运算。这时就会结束当前方法的执行并将异常告知给调用者。这时就需要通过异常来解决。 */throw new ArrayIndexOutOfBoundsException(哥们角标越界了~~~);}int element arr[index];return element;
}
注意如果产生了问题我们就会throw将问题描述类即异常进行抛出也就是将问题返回给该方法的调用者。
那么对于调用者来说该怎么处理呢一种是进行捕获处理另一种就是继续将问题声明出去使用throws声明处理。
6.4.4 为什么要手动抛出异常对象
在实际开发中如果出现不满足具体场景的代码问题我们就有必要手动抛出一个指定类型的异常。
实例代码1
package test;public class Test {public static void main(String[] args) {Student stunew Student();stu.regist(-3);System.out.println(main方法输出);}
}class Student{int id;public void regist(int id){if(id0){this.idid;}else {System.out.println(输出的id非法);//手动抛出异常对象// throw new RuntimeException(输出的id非法);}}
}
结果 实例代码2
package test;public class Test {public static void main(String[] args) {Student stunew Student();stu.regist(-3);System.out.println(main方法输出);}
}class Student{int id;public void regist(int id){if(id0){this.idid;}else {//System.out.println(输出的id非法);//手动抛出异常对象throw new RuntimeException(输出的id非法);}}
}
结果 6.4.5 如何理解“自动”和“手动” 抛出异常对象
过程1抛
自动抛,程序在执行的过程当中一旦出现异常就会在出现异常的代码处生成对应异常类的对象并将此对象抛出。一旦抛出此程序就不执行其后的代码了。
手动抛, 程序在执行的过程中不满足指定条件的情况下我们主动的使用throw 异常类的对象方式抛出异常对象。
过程2抓
针对过程1中抛出的异常对象进行捕获处理此捕获处理的过程就称为抓。一旦将异常进行了处理代码就可以继续执行。
狭义上讲try-catch的方式捕获异常并处理。
广义上讲把”抓“理解为处理,则此时对应着异常处理的两种方式:1)try-catch-finally 2)throws
6.4.6 注意点
throw后面的代码不能被执行编译不通过。 ❓面试题Java中throw和throws的区别
throw和throws作为Java中两种异常抛出关键字虽然两个长得很像但是却有着很大的区别 throws跟在方法声明后面声明可能要抛出的各种异常类. 属于异常处理的一种方式 throw: 用在方法内部表示手动的抛出一个指定类对象。属于异常的一种生成方式。 类比上游排污下游治污 6.5 异常注意事项 运行时异常被抛出可以不处理。即不捕获也不声明抛出。 如果父类抛出了多个异常,子类覆盖父类方法时,只能抛出相同的异常或者是他的子集。 父类方法没有抛出异常子类覆盖父类该方法时也不可抛出异常。此时子类产生该异常只能捕获处理不能声明抛出 当多异常处理时捕获处理前边的类不能是后边类的父类 在try/catch后可以追加finally代码块其中的代码一定会被执行通常用于资源回收。 多个异常使用捕获又该如何处理呢 多个异常分别处理。 多个异常一次捕获多次处理。 多个异常一次捕获一次处理。 一般我们是使用一次捕获多次处理方式格式如下
try{编写可能会出现异常的代码
}catch(异常类型A e){ 当try中出现A类型异常,就用该catch来捕获.处理异常的代码//记录日志/打印异常信息/继续抛出异常
}catch(异常类型B e){ 当try中出现B类型异常,就用该catch来捕获.处理异常的代码//记录日志/打印异常信息/继续抛出异常
}
注意这种异常处理方式要求多个catch中的异常不能相同并且若catch中的多个异常之间有子父类异常的关系那么子类异常要求在上面的catch处理父类异常在下面的catch处理。