如何处理 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. Java通过反射技术动态创建对象(有参、无参构造)

    实现类: package com.ljy; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTarge ...

  2. ASP.NET Core3.x 基础—注册服务(2)

    这篇文章介绍在ASP.NET Core中注册一下自己的服务. 首先创建一个Services文件夹.在文件夹里面创建一个接口 IClock,以及两个类ChinaClock.UtcClock.这两个类分别 ...

  3. php扩展开发之hello world

    最近在公司做的事情就是php扩展开发,虽然我只负责c++代码的编写,但是了解扩展开发的流程还是很有必要的. (本文介绍的是动态扩展,对静态扩展有兴趣的读者可自行google) php扩展开发环境搭建可 ...

  4. Redis服务器和客户端的通信

    Redis客户端使用RESP(Redis序列化协议)与Redis服务器进行通信,RESP在位于TCP之上,而网络模型上客户端和服务器是保持的双工的连接.如图1 而一个简单的请求/响应的串行通信模型如下 ...

  5. P2422 良好的感觉(两头单调)

    描述:https://www.luogu.com.cn/problem/P2422 kkk做了一个人体感觉分析器.每一天,人都有一个感受值Ai,Ai越大,表示人感觉越舒适.在一段时间[i, j]内,人 ...

  6. F - Watching Fireworks is Fun

    C. Watching Fireworks is Fun 题目大意: 一个城镇有n个区域,从左到右1-n,每个区域之间距离1个单位距离.节日中有m个烟火要放,给定放的地点a[ i ].时间t[ i ] ...

  7. P2762 太空飞行计划问题 网络流

    题目描述 W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,…,Em},和进行这些实验需要使用的全部仪器的 ...

  8. 数据结构与算法:栈(Stack)的实现

    栈在程序设计当中是一个十分常见的数据结构,它就相当于一个瓶子,可以往里面装入各种元素,最先装进这个瓶子里的元素,要把后装进这个瓶子里的全部元素拿出来完之后才能够把他给拿出来.假设这个瓶子在桌上平放,左 ...

  9. 安装stanfordcorenlp成功,import stanfordcorenlp失败,出现错误:importerror-no-module-named-psutil

    1.问题描述 安装stanfordcorenlp成功,import stanfordcorenlp失败,pycharm中输入import stanfordcorenlp,然后运行,出现错误:impor ...

  10. 一文教你如何在ubuntu上快速搭建STM32 CubeIDE环境(图文超详细+文末有附件)

    在快速ubuntu上安装cubeide你值得拥有:适合对linux系统还不是很熟悉的同学: 文章目录 1 下载 cubeide 2 找到软件 3 安装 4 附件 5 总结 1 下载 cubeide 登 ...