学习笔记,仅供参考,有错必纠


文章目录

  • 异常
    • 异常概述
    • JVM如何处理异常
    • 异常处理方式(try...catch)
    • Throwable类的几个常见方法
      • 常用方法
      • 举个例子

异常

异常概述

  • 异常概述

异常就是Java程序在运行过程中出现的错误。

  • Throwable类

Throwable 类是java.lang 包下的一个类,它是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。

它有两个直接子类:Error和Exception

  • Exception类

Exception是java.lang 包下的一个类,Exception 类及其子类是 Throwable 的一种形式,它指出了应用程序想要捕获的条件。

直接已知子类有:

AclNotFoundException, ActivationException, AlreadyBoundException,
ApplicationException, AWTException, BackingStoreException,
BadAttributeValueExpException, BadBinaryOpValueExpException,
BadLocationException, BadStringOperationException,
BrokenBarrierException, CertificateException, ClassNotFoundException,
CloneNotSupportedException, DataFormatException,
DatatypeConfigurationException, DestroyFailedException,
ExecutionException, ExpandVetoException, FontFormatException,
GeneralSecurityException, GSSException, IllegalAccessException,
IllegalClassFormatException, InstantiationException,
InterruptedException, IntrospectionException,
InvalidApplicationException, InvalidMidiDataException,
InvalidPreferencesFormatException, InvalidTargetObjectTypeException,
InvocationTargetException, IOException, JAXBException, JMException,
KeySelectorException, LastOwnerException, LineUnavailableException,
MarshalException, MidiUnavailableException, MimeTypeParseException,
MimeTypeParseException, NamingException,
NoninvertibleTransformException, NoSuchFieldException,
NoSuchMethodException, NotBoundException, NotOwnerException,
ParseException, ParserConfigurationException, PrinterException,
PrintException, PrivilegedActionException, PropertyVetoException,
RefreshFailedException, RemarshalException, RuntimeException,
SAXException, ScriptException, ServerNotActiveException,
SOAPException, SQLException, TimeoutException,
TooManyListenersException, TransformerException, TransformException,
UnmodifiableClassException, UnsupportedAudioFileException,
UnsupportedCallbackException, UnsupportedFlavorException,
UnsupportedLookAndFeelException, URIReferenceException,
URISyntaxException, UserException, XAException, XMLParseException,
XMLSignatureException, XMLStreamException, XPathException

我们看到Exception类有一个直接子类为RuntimeException,这是运行时异常,我们经常会见这个异常类。

JVM如何处理异常

main函数接收到异常时,有两种处理方式:

  • 自己将该问题处理,然后继续运行;
  • 自己没有针对的处理方式,只有交给调用main函数的jvm来处理,jvm有一个默认的异常处理机制,会对该异常进行处理,并将该异常的名称、异常的信息、异常出现的位置打印在了控制台上,同时停止程序运行。

异常处理方式(try…catch)

  • 一个catch
package com.guiyang.bean;public class Demo2_Exception {public static void main(String[] args) {Demo2 demo2 = new Demo2();try {int ans =  demo2.div(10, 0);    //ArithmeticExceptionSystem.out.println(ans);} catch (ArithmeticException e) {System.out.println("被除数不为0");}System.out.println("我执行啦~");}}class Demo2 {public int div(int a, int b) {return (a / b);}
}

输出:

被除数不为0
我执行啦~
  • 多个catch
package com.guiyang.restudy3;public class D3Exception {public static void main(String[] args) {int a = 10;int b = 0;int[] arr = {11,22,33,44,55};try {System.out.println(a / b);System.out.println(arr[10]);arr = null;System.out.println(arr[0]);} catch (ArithmeticException e) {System.out.println("除数不能为零");} catch (ArrayIndexOutOfBoundsException e) {System.out.println("索引越界了");} catch (Exception e) {              System.out.println("出错了");}System.out.println("我输出啦~");}
}

输出:

除数不能为零
我输出啦~

注意,try后面如果跟多个catch,那么子类异常应该放前面,父类异常应该放后面,且根据多态的原理,如果父类的放前面,就会将所有的子类对象接收,则在父类异常后面的catch就没有意义了。

Throwable类的几个常见方法

常用方法

  • getMessage
public String getMessage()

返回此throwable的详细消息字符串。

  • toString
public String toString()

返回此 throwable 的简短描述。结果是以下字符串的串联:

  • 此对象的类的name
  • : (冒号和一个空格)
  • 调用此对象getLocalizedMessage()方法的结果,如果 getLocalizedMessage 返回 null,则只返回类名称。

举个例子

输入:

package com.guiyang.restudy3;public class D5Throwable {public static void main(String[] args) {try {System.out.println(1/0);} catch (Exception e) {System.out.println(e.getMessage());//获取异常信息System.out.println(e.toString());//打印异常类名和异常信息}}
}

输出:

/ by zero
java.lang.ArithmeticException: / by zero

第三次学JAVA再学不好就吃翔(part96)--异常相关推荐

  1. 第三次学JAVA再学不好就吃翔(part107)--字符流的拷贝

    学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流的拷贝 拷贝纯文本文件 注意事项 自定义字符数组的拷贝 IO流 字符流的拷贝 拷贝纯文本文件 zzz.txt: 安徽财经大学 JAVA代码: pa ...

  2. 第三次学JAVA再学不好就吃翔(part106)--字符流

    学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流输入流FileReader 字符流是什么 FileReader类构造方法 举个例子 字符流输出流FileWriter FileWriter构造方法 ...

  3. 第三次学JAVA再学不好就吃翔(part46)--Scanner类

    学习笔记,仅供参考 文章目录 Scanner类 Scanner获取数据出现的问题 Scanner类 概述 Scanner是在java.util包下的一个类,使用该类时我们需要导包.这个类被final修 ...

  4. 第三次学JAVA再学不好就吃翔(part117)--单例设计模式

    学习笔记,仅供参考,有错必纠 文章目录 多线程 单例设计模式 饿汉式 懒汉式 第三种格式 Timer类 线程的五种状态 多线程 单例设计模式 单例设计模式,即保证类在内存中只有一个对象,如何保证类在内 ...

  5. 第三次学JAVA再学不好就吃翔(part109)--LineNumberReader类

    学习笔记,仅供参考,有错必纠 IO流 LineNumberReader类 该类继承自java.io.BufferedReader,该类可以跟踪行号的缓冲字符输入流.此类定义了方法 setLineNum ...

  6. 第三次学JAVA再学不好就吃翔(part108)--带缓冲的字符流

    学习笔记,仅供参考,有错必纠 文章目录 IO流 带缓冲的字符流 BufferedReader和BufferedWriter readLine和newLine方法 IO流 带缓冲的字符流 Buffere ...

  7. 第三次学JAVA再学不好就吃翔(part7)--基础语法之运算符

    学习笔记,仅供参考 文章目录 JAVA基础语法 运算符 算数运算符 算术运算符 ++和-- 赋值运算符 关系运算符 JAVA基础语法 运算符 什么是运算符 就是对常量和变量进行操作的符号. 运算符的分 ...

  8. 第三次学JAVA再学不好就吃翔(part115)--多线程

    学习笔记,仅供参考,有错必纠 文章目录 多线程 多线程引入 什么是线程 多线程并行和并发的区别 Java程序运行原理 多线程的实现方式 多线程实现的方式1 多线程程序实现的方式2 以上两种实现方式的区 ...

  9. 第三次学JAVA再学不好就吃翔(part113)--对象操作流

    学习笔记,仅供参考,有错必纠 对象操作流 对象操作流可以将一个对象写出, 或者读取一个对象到程序中,也就是执行了序列化和反序列化的操作. 举个例子 先构造一个Role类: package com.gu ...

  10. 第三次学JAVA再学不好就吃翔(part104)--flush和close

    学习笔记,仅供参考,有错必纠 flush和close flush方法 对于写出数据来说,当缓冲区满了之后,缓冲区中的数据会自动写出,但是当缓冲区没有满时,调用flush方法,那么缓冲区就会被刷新,数据 ...

最新文章

  1. js 各种常用js验证
  2. 如何在企业推行OKR?
  3. 使用lisp函数控制cursor
  4. window.open使用
  5. 以太坊搭建,不能使用puppeth 创建初始块,报错Fatal: Failed to write genesis block: unsupported fork ordering: eip15
  6. 创建一个CentOS 7的模板
  7. 春节临近|传统彩色手绘年画素材,满满东方韵味
  8. excel 区间人数柱状图_原来用Excel做数据分析如此简单!
  9. 几款好看的css表格
  10. keras深度学习之猫狗分类三(特征提取)
  11. 精简、root康佳电视升级包LED37R5200PDF(晨星Mstar),工具mstar-bin-tool等
  12. 表白代码收藏馆,谁说程序猿不懂浪漫
  13. 光纤收发器和交换机之间有什么区别?
  14. python删除csv某一行_python删除csv行
  15. Miracle密码算法开源库(四)分析 :mrarth2.c
  16. 第五届蓝桥杯B组java—猜字母
  17. 《SolidWorks 2014中文版机械设计从入门到精通》——导读
  18. vhdl加法器和减法器_半减法器和全减法器的设计
  19. 【老九学堂】【C语言】CodeBlocks安装文档
  20. 中国人寿保险软件开发机试题 java实现

热门文章

  1. windows下面sublime无法粘贴复制的问题解决(转)
  2. virtualenv在windows10下面使用的注意事项
  3. tensorflow学习笔记:tf.control_dependencies,tf.GraphKeys.UPDATE_OPS,tf.get_collection
  4. 3.3 参数估计:贝叶斯估计
  5. android 环信消息红点,环信3.0获取会话消息列表
  6. python socket tcp远控_Python3实现ICMP远控后门(中)之“嗅探”黑科技
  7. python系统目录_Python创建系统目录的方法
  8. Linux下实现脚本监测特定进程占用内存情况
  9. [开源]Dapper Repository 一种实现方式
  10. 调用百度API写了一个js翻译小工具