如何处理 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. qt creator源码全方面分析(4-3)

    内外命名空间 QtCreator源码中,每一个子项目都有内外两层命名空间,一个是外部的,一个是内部的. 示例如下 namespace ExtensionSystem { namespace Inter ...

  2. 【漫画】JAVA并发编程三大Bug源头(可见性、原子性、有序性)

    原创声明:本文转载自公众号[胖滚猪学编程]​ 某日,胖滚猪写的代码导致了一个生产bug,奋战到凌晨三点依旧没有解决问题.胖滚熊一看,只用了一个volatile就解决了.并告知胖滚猪,这是并发编程导致的 ...

  3. F. Multicolored Markers 暴力+二分

    F. Multicolored Markers 题目大意: 给你 a个红块 b个蓝块 拼成一个实心矩形,并且要求红块或者蓝块自成一个矩形,问形成的这个矩形最小的周长是多少. #include < ...

  4. Scrapy+selenium爬取简书全站

    Scrapy+selenium爬取简书全站 环境 Ubuntu 18.04 Python 3.8 Scrapy 2.1 爬取内容 文字标题 作者 作者头像 发布日期 内容 文章连接 文章ID 思路 分 ...

  5. [hdu4495]二分,字符串hash,DP

    题意:在一个有字母和数字组成的矩形里面找最大的等腰对称直角三角形,直角边分别平行于矩形边,对称的意思是对称轴两边的字符相同. 思路:首先考虑一种情况,三角形的直角边在右方和下方,对于其它情况可以通过旋 ...

  6. 多线程实践—Python多线程编程

    多线程实践 前面的一些文章和脚本都是只能做学习多线程的原理使用,实际上什么有用的事情也没有做.接下来进行多线程的实践,看一看在实际项目中是怎么使用多线程的. 图书排名示例 Bookrank.py: 该 ...

  7. An invalid domain [.test.com] was specified for this cookie 原因分析

    java.lang.IllegalArgumentException: An invalid domain [.test.com] was specified for this cookie 以上博客 ...

  8. python之logging基础入门

    博客学习至:https://www.cnblogs.com/Nicholas0707/p/9021672.html#_label0 https://www.cnblogs.com/dream66/p/ ...

  9. docer run 、docker attach 与 docker exec的区别

    进入容器的方式有以下三种: 使用ssh登陆进容器 使用nsenter.nsinit等第三方工具 使用Docker本身提供的工具 最佳方案为使用Docker本身提供的工具 docker run:创建和启 ...

  10. lrzsz-神一样的上传下载工具

    yum list lrzsz rz sz filename