处理异常方式try_catch_finally, throws,throw
如何处理 Exception 的异常:
抓抛模型:1.抓:异常的处理,有两种方式①try-catch-finally ②throws+异常类型
2.抛:一旦执行过程中出现异常,会抛出一个异常类的对象(自动的抛出 vs 手动的抛出(throw+异常类对象))
异常处理方式一:try_catch_finally
package com.aff.excep; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException; import org.junit.Test; /*
处理Exception的异常
java提供的异常处理的抓抛模型:
1. "抛" 执行代码,出现异常,就会在异常的代码处生成一个对应异常的类的对象, 并将此对象抛出
一旦抛出此异常的对象, 那么程序就终止运行,此异常的对象抛给方法的调用者
2. "抓" 抓住上一步抛出来的异常类的对象。
异常处理的方式:
java提供了两种方式用来处理一个异常类的对象
处理方式一:try{
//可能出现异常的代码
}catch(Exception e1){
//处理的方式1
}catch(Exception e2){
// 处理的方式2
} finally{
//一定执行的代码
}
注:1.try内生命的变量, 类似于局部变量。出了try{ }语句,就不能被调用
2.finally是可选的。
3.catch语句内部是对异常对象的处理
getMessage(); printStackTrace();
4.可以有多个actch语句,try中抛出的异常类对象从上往下匹配catch中的异常类的类型,
一旦满足,就执行catch中的代码,执行完,就跳出其后的多条catch语句
5.如果异常处理了,其后面的代码可以执行了
6.若catch 中多个异常类型是 "并列" 关系,谁上谁下都可以
若catch中多个异常类型的 "包含" 关系,须将子类放在父类的上面,进行处理,否则报错
7.finally 中存放的一定是会被执行的代码,不管try中,catch中是否有异常未被处理,以及是否有return
8.try- catch是可以嵌套的 对于运行时异常来说,可以不显式的进行处理,
对于编译时异常来说,必须要显式的进行处理 */
public class TestException1 {
@Test
public void test6() {
FileInputStream fis = null;
try {
fis = new FileInputStream(new File("heel.txt"));
int b;
while ((b = fis.read()) != -1) {
System.out.println((char) b);
}
} catch (FileNotFoundException e1) {// e1相当于局部变量, 下面的exception也可以使用e1
// System.out.println(e1.getMessage());
System.out.println("找不到文件");
} catch (IOException e1) {
System.out.println(e1.getMessage());
} finally {
// 一定会执行的代码
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} @Test
public void test2() {
try {
int[] i = new int[10];
// System.out.println(i[10]);
System.out.println(i[-10]);
} catch (Exception e) {
// e.printStackTrace();
System.out.println("出现异常");
// System.out.println(e.getMessage());
} finally {
// 一定会执行的代码
}
}
}
异常处理方式一:throws ,向上抛 最后用try-catch 解决
package com.aff.excep; import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; /*
异常处理方式二:在方法的声明处,显示的抛出该异常对象的类型
格式:如public static void method2() throws IOException{ }
当在此方法内部出现异常的时候回抛出一个异常类的对象,抛给方法的调用者
异常的对象可以逐层向上抛,直至main中,当然在向上抛的过程中,可以再通过try-catch-finally进行处理 */
public class TestException2 {
public static void main(String[] args) {
try {
method2();
} catch (IOException e) {
e.printStackTrace();
}
} public static void method2() throws IOException{
method1();
} public static void method1() throws IOException {
FileInputStream fis = new FileInputStream(new File("heel.txt"));
int b;
while ((b = fis.read()) != -1) {
System.out.println((char) b);
}
}
}
手动的抛出异常:
package com.aff.excep;
//1.手动的抛出一个异常
//2.抛出的异常类型若是RuntimeException,可以不显示的处理
//若是一个Exception,必须要显式的处理
public class TestCircle {
public static void main(String[] args) {
Circle c1 = new Circle(2.1);
Circle c2 = new Circle(2.1);
try {
System.out.println(c1.comparTo(c2));
System.out.println(c1.comparTo(new String("AA")));
} catch (Exception e) {
e.printStackTrace();
}
}
} class Circle {
private double radius; public double getRadius() {
return radius;
} public void setRadius(double radius) {
this.radius = radius;
} public Circle(double radius) {
super();
this.radius = radius;
} // 比较两个圆的半径的大小
public int comparTo(Object obj) throws Exception {
if (this == obj) {
return 0;
} else if (obj instanceof Circle) {
Circle c = (Circle) obj;
if (this.radius > c.radius) {
return 1;
} else if (this.radius == c.radius) {
return 0;
} else {
return -1;
}
} else {
// return -2;
//throw new RuntimeException("传入的类型有误");//运行时异常编译不显示错误
throw new Exception("传入的类型有误");
}
}
}
处理异常方式try_catch_finally, throws,throw的更多相关文章
- “全栈2019”Java异常第十章:throw与throws区别详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- java-异常-编译时检测异常和运行时异常区别(throws和throw区别)
1 package p1.exception; 2 /* 3 * 对于角标是整数不存在,可以用角标越界表示, 4 * 对于负数为角标的情况,准备用负数角标异常来表示. 5 * 6 * 负数角标这种异常 ...
- JAVA 语言如何进行异常处理,关键字: throws,throw,try,catch,finally分别代表什么意义? 在try块中可以抛 出异常吗?
Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类, 并提供了良好的接口. 在 Java中,每个异常都是一个对象,它是 Throwable 类或其它子类的实例.当一个方法出 ...
- java中异常的抛出:throw throws
java中异常的抛出:throw throws Java中的异常抛出 语法: public class ExceptionTest{ public void 方法名(参数列表) throws 异常列表 ...
- 【Java面试题】22 JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
throws是获取异常throw是抛出异常try是将会发生异常的语句括起来,从而进行异常的处理,catch是如果有异常就会执行他里面的语句,而finally不论是否有异常都会进行执行的语句. thro ...
- “全栈2019”Java异常第八章:throw关键字详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- Java 异常处理 try catch finally throws throw 的使用和解读(一)
//最近的一个内部表决系统开发过程中,//发现对异常处理还存在一些模棱两可的地方,//所以想着整理一下//主要涉及到://1.try catch finally throws throw 的使用和解读 ...
- Java之异常的处理(throws)
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java. ...
- throws,throw,try,catch,finally 分别代表什么 意义?
Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口. 在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例.当一个方法出现异常后便 抛出一个异 ...
随机推荐
- RobotFrameWork 自动化环境搭建(基于 python2.7)
1.自动化工具安装顺序 robot Framework(两个RF框架) WXpython(不要更改安装路径,自动安装在python文件中) 安装依赖库 RF3.0 和 RF1.5.2.1 打开 rid ...
- Spring 注解注入—@Qualifier 注释
当创建多个具有相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可以使用 @Qualifier 注释和 @Autowired 注释通过指定哪一个真正的 bean ...
- 第一个Vue-cli
第一步下载node.js https://nodejs.org/zh-cn/ 安装成功后 在cmd 输入 node -v 看看能不能打印出来 在cmd 输入 nmp-v 看看能不能打印出来 全局安装 ...
- JavaWebCase
目录 案例:用户登录 用户登录案例需求 分析 开发步骤 创建项目 创建数据库环境 创建包 com.my.domain,创建类User 创建包 com.my.dao,创建类UsesrDao,提供logi ...
- 【BIM】BIMFACE中实现电梯实时动效
背景 在运维场景中,电梯作为运维环节重要的一部分是不可获缺的,如果能够在三维场景中,将逼真的电梯效果,包括外观.运行状态等表现出来,无疑是产品的一大亮点.本文将从无到有介绍如何在bimface中实现逼 ...
- 什么情况下不能使用 Java 泛型
1. 前言 Java 1.5 引入了泛型来保证类型安全,防止在运行时发生类型转换异常,让类型参数化,提高了代码的可读性和重用率.但是有些情况下泛型也是不允许使用的,今天就总结一下编码中不能使用泛型的一 ...
- 设计模式之GOF23外观模式
外观模式 迪米特原则:一个软件实体应当尽可能少的与其他实体发生相互作用 外观模式核心:为子系统提供统一的入口,封装子系统的复杂性,便于客户端调用 相当于找了个代理帮你做了所有事而你只需要和代理打交道
- 设计模式之GOF23原型模式02
利用序列化和反序列化完成深复制 ByteArrayOutputStream bos=new ByteArrayOutputStream(); ObjectOutputStream oos=new O ...
- php反序列化(昨天的补充)
魔术方法 在对PHP反序列化进行利用时,经常需要通过反序列化中的魔术方法,检查方法里是否有敏感操作来进行利用. 常见方法: 创建对象时触发:__construct() 对象被销毁时触发:__destr ...
- java -> final与static 关键字
final的概念 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这些特殊类之后,就可以对 ...