深入理解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虚拟机》读书笔记四——第五章
第五章 调优案例分析与实战
随机推荐
- 网站精准查询IP
分享一些网站能精准查询IP的 https://www.chaidu.com/App/Web/IP/ http://www.ipip.net/ip.html http://www.hao7188.com ...
- 51nod 1413 权势二进制
本来刚开始还是想用每一位 -1的个数 然后再乘以10 不断累加 后来发现 完全不是这回事啊 因为本身就是0 和 1 所以只要记录出现的最大的数字 就是答案 因为 n >= 1 // 所以不 ...
- Linux下指定pip install和make install安装路径
在Linux下直接用pip install packageName,有些文件会被放到根目录下,如果没有sudo权限的话,是会安装失败的.这个以后我们就需要指定安装的目录了. pip install - ...
- 机器学习 MLIA学习笔记(三)之 KNN(二) Dating可能性实例
这是个KNN算法的另一实例,计算Dating的可能性. import numpy as np import os import operator import matplotlib import ma ...
- Java设计模式(五)——适配器模式
先举一个例子解释一下生活中的适配器模式:公司老总要求工程部经理来汇报一下公司内部的消防设备使用和维护情况.接到通知后,工程部经理老宋找了专门负责消防设备统计的维护人员小王,请他调出了去年全年的维护记录 ...
- Unity另外一套简单日志控制系统
using UnityEngine; public class LogPrintf { static LogLevel logLevel = LogLevel.LOG_LEVEL_ERROR; pub ...
- MyBatis中的@Mapper注解 @Mappe与@MapperScan关系
从mybatis3.4.0开始加入了@Mapper注解,目的就是为了不再写mapper映射文件 现在项目中的配置 public interface DemoMapper{ int deleteByPr ...
- spring-cloud: eureka之:ribbon负载均衡自定义配置(二)
spring-cloud: eureka之:ribbon负载均衡自定义配置(二) 有默认配置的话基本上就是轮询接口,现在我们改用自定义配置,同时支持:轮询,随机接口读取 准备工作: 1.eureka服 ...
- 1月10日 ruby基础教程,查漏补缺; 2月22日 Exception补充
https://ruby-doc.org/core-2.5.0/Exception.html 1月20日练习完1,2章. 第一章 初探 ‘’单引号不执行转义符. \t 制表符.\n 换行符. p me ...
- sgu 108 Self-numbers 2
题意:这样的数有几个? 模仿筛法就能解出,但是内存不够.这就需要重复利用数组,用100大小的数组,所有的数对100取模.对于一个数,比如71,就在arr[78]=71记录下来.到78时,检查78-71 ...