Java的异常机制

  (一)异常的概念

  异常是指程序在编译或运行时出现的导致程序不能继续编译或运行的状况。、

  

  (二)Throwable类

  Throwable类继承自Object类,是Java中所有错误或异常的超类,只有该类及其子类的对象才能通过throw语句抛出。Throwable类的子类有Error类和Exception类。

  在异常机制中,编译时的异常直接继承自Exception类,而运行时异常继承自其子类RuntimeException类。

 

  (三)异常的处理

  异常的处理是通过try/catch语句进行捕获并处理。

  

  ①try语法:try{ [可能出现异常的代码] };

  ②catch语法:catch ( [预匹配的异常] ) { [处理代码] };

  

  示例:

Scanner input = new Scanner(System.in);

try {
System.out.println("请输入被除数");
int n1 = input.nextInt();
System.out.println("请输入除数");
int n2 = input.nextInt();
System.out.println("结果为:"+n1/n2);
} catch (ArithmeticException e) {
System.out.println("分母不能为0");
System.out.println(e.getMessage());
e.printStackTrace();
}catch (InputMismatchException e) {
System.out.println("分子分母都应该是数字");
System.out.println(e.getMessage());
}catch (Exception e) {
System.out.println("出现了未知异常");
} //捕获多个异常分别处理
   Scanner input = new Scanner(System.in);
  try {
int n = input.nextInt();
} catch (InputMismatchException | ArithmeticException |ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}
//捕获多个异常合并处理

  (注:在多重catch机制中,try模块发生异常时,异常机制按catch顺序逐个匹配异常,一旦匹配成功则不再继续匹配)

  

  (四)finally关键字

  无论方法在执行过程中是否发生异常,方法中的finally模块都会执行。

        Scanner input = new Scanner(System.in);
     try {
int n = input.nextInt();
} catch (InputMismatchException e) {
e.printStackTrace();
}
finally {
System.out.println("finally");
   }

  (注:finally必须与try或try/catch配合使用;在方法执行return语句前,未执行的finally模块将被强制执行)

  (五)异常对象的常用方法

  

  ①printStackTrace():打印输出异常的堆栈信息;

  

  ②getMessage():返回异常信息描述字符串。

  

  (六)常见的异常

异 常

描 述

Exception

异常层次结构的父类

NullPointerException

空指针异常

ClassNotFoundException

类不存在

ClassCastException

对象强制类型转换出错

ArithmeticException

算术错误

ArrayIndexOutOfBoundsException

数组下标越界

IllegalArgumentException

方法参数异常

NumberFormatException

数字格式转换异常

  

  (七)throws关键字

   

  throws关键字用于声明异常,将该方法出现的异常反馈给上层方法处理。

InterruptedException {
try {
test();
} catch (IOException e) {
e.printStackTrace();
}
} static public void test() throws InterruptedException,IOException{
System.out.println("线程休眠开始");
Thread.sleep(2000);
System.out.println("线程休眠结束");
}

  (注:main方法声明的异常由JVM处理)

  

  (八)throw关键字

  

  throw关键字用于抛出异常,使程序进入异常处理机制。

       if (!("男".equals(gender) || "女".equals(gender))) {
Exception exp = new Exception("性别只能是男或女");
throw exp;
}

  

  (九)自定义异常

  自定义异常是通过继承异常的类而创建了该异常类的子类,主要用于精确地捕获指定异常。

   public class AgeException extends Exception{

public AgeException() {
super();
} public AgeException(String msg) {
super(msg);
}
}

———————————————————————————————————————————————————————————————————

The end   万有引力+

-

-

-

-

-

Java的异常机制的更多相关文章

  1. 关于java中异常机制

    什么是异常:异常就是程序在运行时出现的不正常情况.对于严重的情况Java通过Error类进行描述,一般不用编写代码处理:对于不严重的情况Java通过Exception描述,一般编写针对性代码对其进行处 ...

  2. Java笔记 - 异常机制

    JAVA异常机制是Java提供的用于处理程序在运行期可能出现的异常事件(如数组下标越界.文件不存在等)的一种机制,使程序不会因为 异常的发生 而 阻断或产生不可预见的结果 .而且还可以将逻辑代码与错误 ...

  3. Java之异常机制(1) - 高效处理异常

    Java开发人员做出的有关架构的最重要的决定之一便是如何使用Java异常模型.Java异常处理成为社区中讨论最多的话题之一.一些人认为Java语 言中的已检查异常(Checked Exceptions ...

  4. Java基础——异常机制

    [捕获异常] 硬件的错误.输入错误.物理限制等问题,都可能导致程序运行时的异常出现. 1.异常的分类层次 在java中,异常对象都是由Throwable类继承而来的,主要分为两大类: Error和Ex ...

  5. 异常小结:上一张图搞清楚Java的异常机制

    下面是Java异常类的组织结构,红色区域的异常类表示是程序需要显示捕捉或者抛出的. Throwable Throwable是Java异常的顶级类,所有的异常都继承于这个类. Error,Excepti ...

  6. java:异常机制(try,catch,finally,throw,throws,自定义异常)

    * String类中的格式化字符串的方法: * public static String format(String format, Object... args):使用指定的格式字符串和参数返回一个 ...

  7. Java异常机制

    Java异常分类 异常表明程序运行发生了意外,导致正常流程发生错误,例如数学上的除0,打开一个文件但此文件实际不存在,用户输入非法的参数等.在C语言中我们处理这类事件一般是将其与代码正常的流程放在一起 ...

  8. Java学习 · 初识 异常机制

    异常机制 1.   程序中的异常 a)     b)    面对异常如何解决 i.           由开发者通过if-else来解决 代码臃肿 程序员需要花费很大精力 ii.           ...

  9. [Java学习笔记] Java异常机制(也许是全网最独特视角)

    Java 异常机制(也许是全网最独特视角) 一.Java中的"异常"指什么 什么是异常 一句话简单理解:异常是程序运行中的一些异常或者错误. (纯字面意思) Error类 和 Ex ...

随机推荐

  1. 小白用阿里云搭载wordpress个人博客

    阿里云服务已经购买多时,却一直没时间部署内容,借着这次机会自己照着博客园园友的方式用wordpress搭建了个人博客! 创建wordpress的内容就不多说了,直接附链接来源:https://www. ...

  2. box-sizing:border-boxing的使用

    <div class="box"></div> .box { margin-top: 200px; margin-left: 200px; backgrou ...

  3. 2019春第五周作业Compile Summarize

    这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 在这里 我在这个课程的目标是 能够精通关于数组内部运作原理 这个作业在哪个具体方面帮助我实现目标 如何输出一行的连续字符 参考文献与网址 ...

  4. ORACLE——获取随机数

    在oracle中获取一个指定的随机数: --(DBMS_RANDOM.VALUE(INT NUM1,INT NUM2),比如: ,) FROM DUAL; --结果:8.23602331029803 ...

  5. DAX/PowerBI系列 - 建模视图可以多个分页

    PowerBI 十一月的更新终于有了一个解决密集恐惧症患者的方法,建模视图每个tab专注于一个领域,更加简洁. ps: Microstrategy早就有了.

  6. MVC5+EF6 完整教程17--升级到EFCore2.0(转)

    MVC5+EF6 完整教程17--升级到EFCore2.0 2017年08月22日 14:48:12 linux12a 阅读数:2814   EF Core 2.0上周已经发布了,我们也升级到core ...

  7. Js数组去重方法总结

    //方法一 var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5]; function removeDuplicatedItem(arr) { for(var i = 0; ...

  8. Linux资源分析工具杂谈(长文慎入)

    Linux资源分析工具杂谈 开篇之前请大家先思考一个问题:        磁盘的平均I/O响应时间是1 ms,这个指标是好,还是差? 众所周知,计算机科学是客观的,也就是说对于一个给定的问题,我们总是 ...

  9. 洛谷P2611 信息传递

    并查集裸题,记录每个点的胜读,取个min就好了 #include<stdio.h> #include<string.h> #include<algorithm> u ...

  10. Windbg程序调试系列4-Live Debugging

    上篇博文中给大家分享了使用Windbg分析线程阻塞问题: Windbg程序调试系列3-线程阻塞问题 本篇中我们继续,跟大家分享附加进程实时调试-Live Debugging. 先说一下使用Windbg ...