这一篇博客用例子讲述一下异常的处理过程。那些 我们一直惴惴不安 又充满好奇的未来 会在心里隐隐约约地觉得它们是明亮的。

异常的执行过程

一、实例一:return语句

public class ExceptionTest_1 {
public static void main(String[] args) {
int result = 0;
try {
System.out.println("before result");
result = 9 / 0;
System.out.println("after result");
} catch (Exception e) {
System.out.println("exception" + e.getMessage() + ", result: " + result);
return;
} finally {
System.out.println("final execute, " + result);
}
System.out.println("out of try statement, " + result);
}
}

执行的结果如下:

before result
exception/ by zero, result:
final execute,

将上述代码result = 9 / 0改为 result = 9 / 2;也就是不产生异常,执行的结果如下:

before result
after result
final execute,
out of try statement,

二、实例二:try里面有try语句

public class ExceptionTest_2 {

    public static void main(String[] args) {
try {
if (1 + 2 > 2) {
throw new FileNotFoundException();
}
try {
throw new FileNotFoundException();
} catch (FileNotFoundException e) {
System.out.println("world hello");
}
} catch (Exception e) {
System.out.println("hello world");
} finally {
System.out.println("final action");
}
}
}

执行的结果如下:

hello world
final action

如果将if(1 + 2 > 2)改变if(1 + 2 > 4),也就是try块里面没有抛出异常。执行的结果如下:

world hello
final action

简短的异常说明:

当抛出异常后,会发生以下的事情。
、用new在堆上创建异常对象,当前的执行路径被终止,并从当前环境中弹出异常对象的引用。
、异常处理机制接管程序,并寻找一个恰当的地方继续执行程序。
、如果有定义了final,那么会执行final块的代码。

三、自定义异常并定义抛错的信息

public class ExceptionTest {
@Test
public void exception_message_test1() {
throw new ValidateRuntimeException("my name is huhx."); // 调用的是getMessage()方法
}
} class ValidateRuntimeException extends RuntimeException {
public ValidateRuntimeException(String message) {
super(message);
} @Override
public String getMessage() {
String message = super.getMessage();
System.out.println("message: " + message);
return message + "hello";
}
}

上述代码的运行效果如下:为什么会打印了三次呢?

message: my name is huhx.
message: my name is huhx.
message: my name is huhx. com.linux.huhx.ValidateRuntimeException: my name is huhx.hello at com.linux.huhx.ExceptionTest.exception_message_test1(ExceptionTest.java:)
  ........

友情链接

java基础---->Java中异常的使用(二)的更多相关文章

  1. java基础---->java中正则表达式二

    跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...

  2. Java基础-Java中23种设计模式之常用的设计模式

    Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...

  3. Java基础-Java中的内存分配与回收机制

    Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二.

  4. Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock)

    Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在学习Java的之前,你可能已经听说过读 ...

  5. Java基础-Java中的并法库之线程池技术

    Java基础-Java中的并法库之线程池技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是线程池技术 二.

  6. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  7. Java基础(中)

    面向对象基础 面向对象和面向过程的区别 两者的主要区别在于解决问题的方式不同: 面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题. 面向对象会先抽象出对象,然后用对象执行方法的方式 ...

  8. Java基础学习中一些词语和语句的使用

    在Java基础学习中,我们刚接触Java会遇到一些词和语句的使用不清的情况,不能很清楚的理解它的运行效果会是怎么样的,如:break,continue在程序中运行效果及跳转位置, 1.先来看看brea ...

  9. Java基础-Java中的堆内存和离堆内存机制

    Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  10. Java基础__Java中自定义集合类

    Java基础__Java中集合类 传送门 自定义MyArrayList集合实现:增加数据.取数据.查看集合中数据个数方法 package com.Gary; public class MyArrayL ...

随机推荐

  1. GraphicsMagick 学习笔记

    两种最常用的图片处理工具:GraphicsMagick 或 ImageMagick,GM是IM的分支,这两个图片处理工具功能基本相同,各有特色.但他们并不是nodejs的插件,它们都是客户端软件,li ...

  2. Maven的个性化定制

    用Maven的小伙伴都知道,Maven的宗旨是约定优于配置(Convention Over Configuration). 在宗旨的前提下Maven也提供了个性化定制的Profile,让我们看看使用方 ...

  3. Android四大组件全然解析(一)---Activity

    本文參考\android\android\frameworks\base\core\java\android\app\Activity.java文件里的类凝视.以及android/frameworks ...

  4. 图解Sysprep封装系统

    图解Sysprep封装系统     一.使用安装管理器工具创建 Sysprep.inf 应答文件 要安装“安装管理器”工具并创建应答文件,请按照下列步骤操作: 1)打开“我的电脑”,然后打开 Wind ...

  5. eclipse 安装maven

    在使用eclipse自带插件的方式安装 http://download.eclipse.org/technology/m2e/releases/ 点击help-->install new sof ...

  6. MongoDB随笔

    创建用户 db.createUser({user: "abc",pwd: "abc123",roles: [ { role: "readWrite&q ...

  7. Windows版变色龙

    打包安装版本更新源地址: http://www.insanelymac.com/forum/files/file/59-chameleon-22-svn/ 一.使用方法:1.安装Windows版变色龙 ...

  8. Django接受ajax传过来的数组

    $.ajax({ cache: false, type: "POST", url: "/userdelete/", traditional:true, //加上 ...

  9. CSS学习笔记(9)--详解CSS中:nth-child的用法

    详解CSS中:nth-child的用法 前端的哥们想必都接触过css中一个神奇的玩意,可以轻松选取你想要的标签并给与修改添加样式,是不是很给力,它就是“:nth-child”. 下面我将用几个典型的实 ...

  10. matlab_legend_使用

    matlab legend 使用 用Matlab画图时,有时候需要对各种图标进行标注,例如,用“+”代表A的运动情况,“*”代表B的 运动情况.legend函数的基本用法是LEGEND(string1 ...