1.异常

在Java中,每个异常都是一个名叫Throwable的类的一个实例

我们常用的try-catch-finally语句

  • try

尝试去执行try语句块里的内容,如果有异常,将其捕获,并执行catch语句块中的代码

  • catch

在catch语句的参数中我们定义了具体的异常类型,但是这些具体的异常都是Exception的子类,所以我们可以通过将参数改为Exception e 来捕获所有异常(但是不建议这么做,或者把捕获异常基类放到最后,因为有的时候你需要针对不同的异常做出一些不同的动作)

  • finally

finally "最后",语句块中的内容最后都会被执行

  • 处理异常

在捕获了异常之后,我们还需要处理这些异常,我们可以将这些异常的消息输出,或者在捕获之后再抛出另外的异常: 常用的消息输出方式就是getMessage()以及printStackTrace()

2. 自定义异常

官方给出的异常类型(JDK 8)大部分都是没见过的,(羞羞)

不要紧,我们可以自己来定义属于自己的异常。

具体的异常都是继承自Exception类,所以我们要自定义的异常也需要继承这个基类。

我们自定义异常命名MyException,需要继承基类Exception,然后我们调用基类的构造方法,带一个参数:

public class MyException extends Exception {public MyException(String message){super(message);}
}

然后我们测试这个异常,因为是测试,所以直接抛出定义的异常:

public class Test {public static void main(String[] args)throws MyException{try{throw new MyException("自定义异常");}catch (MyException e){System.out.println(e.getMessage());}}
}

打印异常结果

3. 查看异常信息

有时候我们会需要查看异常信息来进行调试,JDK中给出了3种继承自Throwable基类的方法

toString()方法

在讲方法前我们先看看 Throwable类中覆盖了的toString()方法:

这里面的意思是: toString()方法返回一个字符串,代表了Throwable实例(异常)的信息,具体格式为:对象名字: 本地化的信息

示例:

运行出来的结果第二行:

java.io.FileNotFoundException: test.txt(系统找不到指定的文件。)
at ...

java.io.FileNotFoundException就是Throwable的实例,text.txt...后面的信息就是本地化的信息了,针对不同的位置给出具体的信息,用来调试就能很快进行定位

getMessage() :

the detail message string of this Throwable instance (which may be null)
将Throwable实例(通常所说的异常)的具体信息以String类型给出(可能不存在) 

printStackTrace()

这个方法有三种类型:无参,带参数PrintStream和带参数PrintWriter

无参的printStackTrace()方法也就是我们平常使用的查看异常信息的方式,直接在控制台打印
带参数PrintStream(打印输出流):能够将信息通过流输出至其他地方,

做个测试:

import java.io.*;public class Test {public static void main(String[] args) throws IOException{OutputStream out;try{throw new RuntimeException();}catch (RuntimeException e){out = new FileOutputStream("C:\\Users\\94545\\Desktop\\test.txt");//将FileOutputStream作为PrintStream的输出流PrintStream printStream = new PrintStream(out);e.printStackTrace(printStream);out.close();printStream.close();}}
}

成功打印

带参数PrintWriter(字符打印输出流):将信息输出至其他地方
import java.io.*;public class Test {public static void main(String[] args) throws Exception{OutputStream out;try{throw new RuntimeException();}catch (RuntimeException e){out = new FileOutputStream("C:\\Users\\94545\\Desktop\\test.txt");PrintWriter printWriter = new PrintWriter(out,true);e.printStackTrace(printWriter);out.close();printWriter.close();}}
}

打印成功!

扩展

你知道 throw和throws有什么区别?

举个例子来说: 在方法A中,如果在产生异常的时候,不需要马上捕获,在方法B调用方法A的时候再进行捕获,那么就在A的方法名后添加throws,如果需要在方法A中进行捕获,则直接使用throw

所以两者区别,其实在于究竟在哪个地方处理异常

小结

看捕获异常的对象是谁,再决定应该如何来使用

用户输入数据的格式永远都是正确的,选择打开的文件也一定存在,并且永远不会出现bug ——《Java核心技术 卷一》

转载于:https://www.cnblogs.com/yizhiamumu/p/9118579.html

涨姿势:Java 异常?尝试自定义异常相关推荐

  1. 【Java异常】自定义异常

    Java中定义了大量的异常类,虽然这些异常类可以描述编程时出现的大部分异常情况,但是在程序开发中有时可能需要描述程序中特有的异常情况,例如在设计divide()方法时不允许被除数为负数.为了解决这样的 ...

  2. Java异常,教课书式知识梳理

    hello,家人们!今天的分享是Java异常的知识. 目录 异常的背景 初识异常 防御式编程 异常的基本用法 捕获异常 不处理异常 使用 try catch 后的程序执行过程 catch 只能处理对应 ...

  3. 一篇文章带你认识 Java 异常以及如何处理异常

    异常,是 Java 中非常常用的功能,它可以简化代码,并且增强代码的安全性.但是往往在开发时遇到需要抛出的异常,我们也仅仅是写一个 Throw 语句或者使用框架提供的抛异常方法去一笔带过,没有进行深入 ...

  4. java输入字符串异常_设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ”。。。...

    设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为"XYZ",则抛出一个异常信息"This is a XYZ",如果从命令 ...

  5. Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并处理异常

    Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并处理异常 参考文章: (1)Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并 ...

  6. 抛出运行时异常的目的_「JAVA」运行时异常、编译时异常、自定义异常,通过案例实践转译和异常链...

    Java基础之异常处理机制 什么是异常 从事Java开发的小伙伴对于"异常"应该不陌生,因为每天都会遇到不少异常,或捕获,或抛出.那究竟什么是异常?异常即非正常的,不同于平常.一般 ...

  7. java异常大全,如何处理异常,如何自定义异常

    此文章截图转载自:java异常大全!如何处理异常!如何自定义异常!_qq1328585964的博客-CSDN博客_java 异常大全s 我怕文章莫名消失所以转载下!!!我收藏的文章偶尔会没有

  8. Java 中常见的异常和自定义异常

    常见异常: java.lang.nullpointerexception    这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者 ...

  9. java异常——异常分类+声明已检查异常+如何抛出异常+自定义异常类

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java异常--异常分类+声明已检查异常+如何抛出异常+自定义异常类 的相关知识: 0.2)异 ...

  10. Java 异常处理(标准抛异常、异常处理、多异常、Finally、多线程异常处理、获取异常的堆栈信息、链试异常、自定义异常)

    使用 catch 处理异常(标准抛异常) public class Main {public static void main (String args[]) {int array[]={20,20, ...

最新文章

  1. Backtrack5 下WEB模糊测试
  2. sql中去掉换行符和回车符
  3. js确保正确this的几种写法
  4. verilog出租车计价器
  5. 野火stm32呼吸灯程序_说一说STM32启动过程
  6. python 趣味编程课_青少年编程:Python趣味编程基础入门课程
  7. vue + vue-router + vue-resource 基于vue-cli脚手架 ---笔记
  8. 商家为什么要接受BCH支付?
  9. lisp 设计盘形齿轮铣刀_钨钢铣刀制造厂
  10. java lombok 插件_idea 安装 lombok 插件
  11. BigDecimal浮点精度加减乘除运算
  12. 渗透测试入门—— 常见术语概述
  13. HTML文档解析器 NekoHTML
  14. 基于人脸识别的学生签到打卡系统用户使用指南
  15. File /py-faster-rcnn/tools/../lib/datasets/imdb.py, line 108, in append_flipped_images assert
  16. 3D游戏编程作业10
  17. 中国教育“善意的谎言”与恶果
  18. 英语基础知识:非谓语使用规则上篇
  19. R安装与卸载、RStudio安装
  20. En-Tan-Mo(ETM)项目周报(6.28-7.4)

热门文章

  1. 我要自学网python视频教程_人生苦短,请用Python!学习Python的四大理由
  2. 当前时间转换的秒数_C++ 日期 amp; 时间
  3. python定时发送邮件
  4. HTML郑州宅急送试题
  5. JAVA 编程-张晨光-专题视频课程
  6. python怎么让按钮透明_python – 如何创建一个响应Tkinter中的click事件的透明矩形...
  7. python3 re模块_Python3 正则表达式 re 模块的使用 - 学习笔记
  8. windows下利用_popen,_wopen创建管道进行系统命令输出数据
  9. R软件的下载及安装(截图步骤详细)
  10. eclipse常用以及实用的快捷键