1.What is exception in Java?

Java使用异常描述程序中可能出现的不正常情况。这个不正常可以是java认为的不正常,也可以是你主观上的出乎意料(自定义异常).总而言之,异常用于表示程序中的不正常现象。

2.Why use exception in Java?

① 异常分离程序中正常逻辑代码和非正常情况处理问题的代码.提升代码的可读性

② 引入异常处理机制,大大提升系统的健壮性.

3.Use Exception

when to use?

① 如果方法执行过程中可能会遇到一些非正常的情况,应该抛出异常.(例如:读取不存在的文件。具体怎么抛下面会讲到)

② 异常本质就是用于描述非正常情况,不要使用异常来描述一些正常的或者合理的现象.(即主观上将正常现象做异常处理,例如:用户登录时,如果输入的用户名或者密码错误,可以抛出异常.但如果将用户名或者密码输入错误视为一种正常现象,就不要用异常来处理这种情况.)

CheckedException vs UncheckedException

Concept:CheckedException是编译时异常,也就是代码中必须处理的异常<异常的处理方式请参考其他资料,本文主要讲正确使用异常,并不涉及具体语法>.UncheckedException是运行期异常。(如果您对编译时异常和运行时异常还不甚了解,建议先参考其他资料)

Should CheckedException Or UnCheckedException?

一般原则:如果你觉得应该由客户端程序员(调用你代码的人)来处理非正常情况,抛编译时异常。如果客户端程序员不遵守约定(例如:传参错误)而造成的非正常情况,使用运行时异常.

我的理解:将编译时异常视为一种调用时的善意提醒,由调用者来处理。将运行时异常视为一种不遵守约定的惩罚,只有调用者不遵守规则才给出警告,正常调用的情况下,异常对调用者透明.

Ok,说了这么多,咱们看看Java API中是如何使用异常的?

package com.java.basic;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException; public class ExceptionDemo {
/**
* 打印文件的内容
* @param filePath
* @throws IOException
* ps:FileNotFoundException是IOExcpetion的子类,此处只是做demo用
*/
public static void printFileContent(String filePath) throws FileNotFoundException,IOException{
// 此处抛的是编译时异常,善意提醒调用者,可能会出现文件找不到的情况,由调用者负责处理异常
BufferedReader br = new BufferedReader(new FileReader(new File(filePath)));
String line = "";
// 编译时异常,读取文件时会出现IO异常
while(null!=(br.readLine())){
System.out.println(line);
}
br.close();
}
public static void main(String[] args) {
/***
* 调用者负责处理编译时异常
*/
try {
printFileContent("D:\\test.txt");
} catch (FileNotFoundException e) {
// 反馈信息
System.err.println("文件不存在,请检查文件输入路径!");
e.printStackTrace();
} catch (IOException e) {
// 反馈信息
System.err.println("文件发生读取异常!");
e.printStackTrace();
}
} }

下面再看个UnCheckedException例子.

package com.java.basic;

public class UnCheckedExceptionDemo {
public static void main(String[] args) {
String str = "UnCheckedException";
//char c = str.charAt(10);
// 运行时异常,java.lang.StringIndexOutOfBoundsException
// 不遵守约定,约定的index值是0-str.length之间
char c1 = str.charAt(0);
System.out.println(c1);
char c2 = str.charAt(str.length()-1);
System.out.println(c2);
char c3 = str.charAt(-1);
System.out.println(c3);
//System.out.println(c);
}
}

参考链接:http://www.artima.com/designtechniques/desexcept.html

关于异常的使用就说到这里了,不合理的地方欢迎大家一起交流探讨!

对Java中的异常的理解的更多相关文章

  1. 夯实Java基础系列10:深入理解Java中的异常体系

    目录 为什么要使用异常 异常基本定义 异常体系 初识异常 异常和错误 异常的处理方式 "不负责任"的throws 纠结的finally throw : JRE也使用的关键字 异常调 ...

  2. 【Java心得总结二】浅谈Java中的异常

    作为一个面向对象编程的程序员对于 下面的一句一定非常熟悉: try { // 代码块 } catch(Exception e) { // 异常处理 } finally { // 清理工作 } 就是面向 ...

  3. Java中的异常和处理详解

    简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言风格:用函数返回值作为执行状态?. ...

  4. Java中的异常简介

    Java中异常的分类 Java中的异常机制是针对正常运行程序的一个必要补充,一般来说没有加入异常机制,程序也能正常运营,但是,由于入参.程序逻辑的严谨度,总会有期望之外的结果生成,因此加入异常机制的补 ...

  5. Java 中的异常

    前段时间集合的整理真的是给我搞得心力交瘁啊,现在可以整理一些稍微简单一点的,搭配学习 ~ 突然想到一个问题,这些东西我之前就整理过,现在再次整理有什么区别嘛?我就自问自答一下,可能我再次整理会看到不一 ...

  6. Java 中的异常和处理详解

    Java 中的异常和处理详解 原文出处: 代码钢琴家 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误 ...

  7. Java 中的异常和处理详解(转载)

    原文出处: 代码钢琴家 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言风格:用函 ...

  8. Java中的异常和处理详解(转发:https://www.cnblogs.com/lulipro/p/7504267.html)

    简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言风格:用函数返回值作为执行状态?. ...

  9. Java中的异常-Throwable-Error-Exception-RuntimeExcetpion-throw-throws-try catch

    今天在做一个将String转换为Integer的功能时,发现Integer.parseInte()会抛出异常NumberFormatException. 函数Integer.parseInt(Stri ...

随机推荐

  1. IOS贝塞尔曲线圆形进度条和加载动画

    做项目让做一个加载动画,一个圈圈在转中间加一个图片,网上有好多demo,这里我也自己写了一个,中间的图片可加可不加.其中主要用到贝塞尔曲线.UIBezierPath是对CGContextRef的进一步 ...

  2. OpenGL开发入门

    1.OpenGL简介: OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三维图形 API 的子集,针对手机.PDA和游戏主机等嵌入式设备而设计.该API ...

  3. <a>标签中href="javascript:;"的意思

    <a> 标签的 href 属性用于指定超链接目标的 URL,href 属性的值可以是任何有效文档的相对或绝对 URL,包括片段标识符和 JavaScript 代码段. 这里的href=&q ...

  4. Java中名词的解释

    在上一篇中说到了Java的四大特性,里面出现了很多名次,包括以后学习Java中也会出现很多常用到的名次,对初学者来说可能不知道是什么意思,或者是对这些刺耳的理解不是特别透彻,这里我就我自己的理解来解释 ...

  5. [LeetCode]Maximum Length of Repeated Subarray

    Maximum Length of Repeated Subarray: Given two integer arrays A and B, return the maximum length of ...

  6. JSP简单实现登录和注销

    JSP简单实现登录和注销 需求:用户登录成功后跳转到欢迎页面 用户登录失败跳转到初始的登录界面 用户点击注销,用户退出登录状态需要重新登录 登录页面的JSP代码: <%@ page langua ...

  7. python中字典,没键加键,有键操作其键对应的值,的思想

    cars = ['鲁A32444', '鲁B12333', '京B8989M', '黑C49678', '黑C46555', '沪B25041', '黑C34567'] locations = {'沪 ...

  8. 分数规划(Bzoj1486: [HNOI2009]最小圈)

    题面 传送门 分数规划 分数规划有什么用? 可以把带分数的最优性求解式化成不带除发的运算 假设求max{\(\frac{a}{b},b>0\)} 二分一个权值\(k\) 令\(\frac{a}{ ...

  9. Lucas定理及扩展

    Lucas定理 不会证明... 若\(p\)为质数 则\(C(n, m)\equiv C(n/p, m/p)*C(n\%p, m\%p)(mod\ p)\) 扩展 求 \(C(n,m)\) 模 \(M ...

  10. 如何正确地在SOE中输出日志信息

    ArcGIS for Server提供完善的日志管理机制,用于日志的记录.查询和自动清除.开发人员在开发编写SOE代码时,应该采用该机制进行日志记录的输出.如果不采用该机制,输出的日志消息会写到Arc ...