如何处理 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的更多相关文章

  1. “全栈2019”Java异常第十章:throw与throws区别详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  2. java-异常-编译时检测异常和运行时异常区别(throws和throw区别)

    1 package p1.exception; 2 /* 3 * 对于角标是整数不存在,可以用角标越界表示, 4 * 对于负数为角标的情况,准备用负数角标异常来表示. 5 * 6 * 负数角标这种异常 ...

  3. JAVA 语言如何进行异常处理,关键字: throws,throw,try,catch,finally分别代表什么意义? 在try块中可以抛 出异常吗?

    Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类, 并提供了良好的接口.        在 Java中,每个异常都是一个对象,它是 Throwable 类或其它子类的实例.当一个方法出 ...

  4. java中异常的抛出:throw throws

    java中异常的抛出:throw throws Java中的异常抛出 语法: public class ExceptionTest{ public void 方法名(参数列表) throws 异常列表 ...

  5. 【Java面试题】22 JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?

    throws是获取异常throw是抛出异常try是将会发生异常的语句括起来,从而进行异常的处理,catch是如果有异常就会执行他里面的语句,而finally不论是否有异常都会进行执行的语句. thro ...

  6. “全栈2019”Java异常第八章:throw关键字详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  7. Java 异常处理 try catch finally throws throw 的使用和解读(一)

    //最近的一个内部表决系统开发过程中,//发现对异常处理还存在一些模棱两可的地方,//所以想着整理一下//主要涉及到://1.try catch finally throws throw 的使用和解读 ...

  8. Java之异常的处理(throws)

    import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java. ...

  9. throws,throw,try,catch,finally 分别代表什么 意义?

    Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口. 在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例.当一个方法出现异常后便 抛出一个异 ...

随机推荐

  1. 自动化运维工具Ansible之Roles测验详解

    Ansible Roles 详解与实战案例 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放: 3. 该用 ...

  2. 【Hadoop离线基础总结】Hue与Hadoop集成

    目录 1.更改所有hadoop节点的core-site.xml配置 2.更改所有hadoop节点的hdfs-site.xml 3.重启hadoop集群 4.停止hue的服务,并继续配置hue.ini ...

  3. Day_09【常用API】扩展案例5_获取长度为5的随机字符串,字符串由随机的4个大写英文字母和1个0-9之间(包含0和9)的整数组成

    分析以下需求,并用代码实现 1.定义String getStr(char[] chs)方法 功能描述:获取长度为5的随机字符串,字符串由随机的4个大写英文字母和1个0-9之间(包含0和9)的整数组成 ...

  4. Android 电池管理系统架构总结 Android power and battery management architecture summaries

    文章目录 1 整体架构 2 设计构架 2.1 driver 2.1.1 Charger.ko 2.1.2 Battery.ko 2.2 power supply 2.2.1 基础架构 2.2.2 代码 ...

  5. vue 在main.js里使用vue实例

    可以用 Vue.prototype 比如 Vue.prototype.$indicator.close(); 关闭正在加载的动画

  6. shell脚本命令 运行python文件&python命令行运行python代码

    单独的python文件运行的时候 报错: 在shell脚本中,运行shell脚本命令:在Python命令行中,运行Python代码.然而,“python hello.py”是一个脚本命令,不是pyth ...

  7. (Python基础教程之十二)Python读写CSV文件

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

  8. virtualbox复制了以后网卡启动不了。

    还是有些坑..必须踩 virtualbox复制了以后网卡启动不了.原因是如果没选重新生成mac ,那么mac地址会和第一台 机器一模一样,出现ip 征用的情况. 第二是系统方面的原因,你要删一个文件, ...

  9. wepy 小程序开发(Mixin混合)

    默认式混合 对于组件data数据,components组件,events事件以及其它自定义方法采用默认式混合,即如果组件未声明该数据,组件,事件,自定义方法等,那么将混合对象中的选项将注入组件之中.对 ...

  10. 13.3 Go章节练习题

    13.3 Go章节练习题 练习1:定义1个整数,1个小数,访问变量,打印数值和类型,更改变量的数值,打印数值 练习2:同时定义3个整数, 练习3:同时定义3个字符串 练习4:定义变量后,没有初始值,直 ...