深入理解java异常【绝对经典,推荐最少看五遍】
http://blog.csdn.net/hguisu/article/details/6155636
补充:检查异常(checkedException)与运行异常,什么时候throw,什么时候throws,什么时候trycatch的探索。
Demo1:testException方法中throw的是RuntimeException
package com.westward;
public class Demo12 {
public static void main(String[] args) {
testException();
}
public static void testException() {
throw new RuntimeException();
}
}
class MyException extends Exception{//自定义异常,属于检查异常,即非运行时异常
String errorMessage;
public MyException(String eString){
errorMessage= eString;
}
public String getErrorMessage() {
return errorMessage;
}
}
run:
Exception in thread "main" java.lang.RuntimeException
at com.westward.Demo12.testException(Demo12.java:9)
at com.westward.Demo12.main(Demo12.java:6)
Demo2:testException方法中throw的是MyException(检查异常,非运行时异常);代码与Demo1对比,主要是line9不同,
package com.westward;
public class Demo12 {
public static void main(String[] args) throws MyException {
testException();
}
public static void testException() throws MyException{
throw new MyException("haha--MyException");
}
}
class MyException extends Exception{//自定义异常,属于检查异常,即非运行时异常
String errorMessage;
public MyException(String eString){
errorMessage= eString;
}
public String getErrorMessage() {
return errorMessage;
}
}
run:
Exception in thread "main" com.westward.MyException: haha--MyException
at com.westward.Demo12.testException(Demo12.java:10)
at com.westward.Demo12.main(Demo12.java:6)
结论:通过这两个demo的代码可知,
demo1,自定义的方法中throw了一个运行时异常,我们在testException中既没有throws声明这个方法有可能发生异常(在这里指我throw的运行时异常),也没有trycatch对可能发生的异常(在这里指我throw的运行时异常)进行捕捉处理。因为java异常处理机制规定,对于java定义好的运行时异常,由java运行时系统自动处理抛出,不需要程序员声明或者捕捉;
demo2,自定义的方法中throw了一个非运行时异常(自定义的MyException),由于throw的是检查异常(非运行时异常),所以我们必须在定义的方法头throws声明异常类型或者在方法体trycatch捕获 可能发生非运行时的异常(本例的throw new MyException)。同时,在调用该方法的外层方法也得throws或者trycatch。
自己对throws/trycatch throw的简单理解。
对非运行时异常:一段代码,可能发生异常,即可能throw 一个异常对象,为了提前应对这段可能发生异常的代码(可能throw一个异常对象),java异常机制要求在这个方法的头部throws(声明)对应的异常类,即我的这个方法,我提前声明下,可能会有xxx异常;或这个在方法体内对可能发生异常的代码trycatch(捕捉)。throw抛出异常是相对没有发生异常来说的。throws/trycatch的是可能throw异常的代码。如果代码里我们直接throw了一个异常,我们更要(可以这样理解)throws/trycatch这个方法了。同时,在调用该方法的外层方法也得throws或者trycatch。我们可以理解,throws/trycatch是为了应对可能发生异常所做的应对措施。
对运行时异常,java运行时程序自动抛出,不是必须throws或者trycatch。
深入理解java异常【绝对经典,推荐最少看五遍】的更多相关文章
- 加深理解Java异常概念并熟记5个最常见的运行时异常
加深理解Java异常概念并熟记5个最常见的运行时异常 说明Error与Exception的联系和区别有哪些? 列举最常见的5个运用时异常. 1.Error和Exception的联系和区别: Error ...
- 全面理解Java异常的运行机制
1. 引子 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话. ...
- 全面理解java异常机制
在理想状态下,程序会按照我们预想的步骤一步一步的执行,但是即使你是大V,你也不可避免出错,所以java为我们提供了异常机制.本文将会从以下几个方面介绍java中的异常机制: 异常机制的层次结构 异常的 ...
- Java基础 -- 深入理解Java异常机制
异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的异常. ...
- 理解Java异常
一.Java异常的简介 Java异常是Java提供的一种识别及响应错误的一致性机制.具体来说,异常机制提供了程序退出的安全通道.当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器.Ja ...
- Java基础系列5:深入理解Java异常体系
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 前言: Java的基 ...
- Java——深入理解Java异常体系
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 前言: Java的基 ...
- 深入理解 Java 异常
- 《深入理解java虚拟机》读书笔记四——第五章
第五章 调优案例分析与实战
随机推荐
- Go第三篇之大话容器
Go语言数组 数组(Array)是一段固定长度的连续内存区域 在 Go 语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化 Go 语言数组的声明 数组的写法如下: var 数组变 ...
- dp暑假专题 训练记录
A 回文串的最小划分 题意:给出长度不超过1000的字符串,把它分割成若干个回文字串,求能分成的最少字串数. #include <iostream> #include <cstdio ...
- UVA 11806 Cheerleaders (容斥原理
1.题意描述 本题大致意思是讲:给定一个广场,把它分为M行N列的正方形小框.现在给定有K个拉拉队员,每一个拉拉队员需要站在小框内进行表演.但是表演过程中有如下要求: (1)每一个小框只能站立一个拉拉队 ...
- Apache Kylin1.5.2.1之订单案例详细构建流程
转:http://blog.itpub.net/30089851/viewspace-2122586/ 一.Hive订单数据仓库构建1. 创建事实表并插入数据 DROP TABLE IF EXISTS ...
- UVa 11235 频繁出现的数值
https://vjudge.net/problem/UVA-11235 题意: 给出一个非降序排列的整数数组a1,a2,...,an,你的任务是对于一系列询问(i,j),回答ai,ai+1,...a ...
- C# 获取文件夹下的所有文件夹及其文件
//获得当前文件夹下所有文件夹 string path = "D://文件夹"; string[] dirstr = Directory.GetDirectories(path); ...
- Android TableLayout中的使用说明
TableLayout特点: 1)TableLayout和我们平时在网页上见到的Table有所不同,TableLayout没有边框的 2)它是由多个TableRow对象组成,每个TableRow可以有 ...
- Codeforces 918C - The Monster
918C - The Monster 思路1: 右键在新窗口打开图片 代码: #include<bits/stdc++.h> using namespace std; #define ll ...
- Codeforces 916C - Jamie and Interesting Graph
916C - Jamie and Interesting Graph 思路:构造. 对于1到n最短路且素数,那么1到n之间连2 对于最小生成树,找一个稍微大点的素数(比1e5大)构造一个和为这个素数的 ...
- react notes
jsx 在JSX中嵌入用户输入是安全的,默认情况下, 在渲染之前, React DOM 会格式化(escapes) JSX中的所有值. 从而保证用户无法注入任何应用之外的代码. 在被渲染之前,所有的数 ...