Java学习笔记之异常处理

本文实例为大家分享了Java异常处理的具体代码,供大家参考,具体内容如下

一.异常的分类

1.由Java虚拟机抛出的异常(Error):程序无法处理的问题,用户不用去进行处理(虚拟机错误丶内存溢出错误丶线程死锁)

2.Exception异常:程序本身可以进行处理的异常

1).非检查异常(Unchecked Exception):编译器不需要强制处理的异常(空指针异常丶数组下标越界异常丶算数异常丶类型转换异常)

2).检查异常(checked Exception):编译器需要强制处理的异常(IOException丶SQLException)

二.异常处理的两种方法

1.通过try丶catch和finally关键字在当前位置进行异常处理

public static void main(String[] a){
 int sum = 0;
 while(true){
  try {  //以两数相除除数不能为0进行举例
   System.out.println("请依次输入两个数值进行除法操作:");
   Scanner scanner = new Scanner(System.in);
   int one =scanner.nextInt();
   int two =scanner.nextInt();
   sum = one/two;
   System.out.println("最终结果为:"+sum);
  } catch (Exception e) {    //用catch将错误进行捕捉,这里可以使用多重catch,对于不同的错误进行捕捉,但最后的catch建议为Exception。
   // TODO Auto-generated catch block //显示错误堆栈信息
   e.printStackTrace();                          
  }finally{            

 System.out.print("无论有没有错误我都会执行");          }
 }
 }
}

输出:

2.通过try丶catch丶finally丶throw和throws抛出异常给函数调用者进行处理

public class Try {
 public static void main(String[] a){
  try{
   Function();  //在函数调用者处对异常进行处理
  }catch(Exception e)
  {
   e.printStackTrace();
  }
 }
 static void Function() throws Exception{  //通过throws将异常进行抛出

  System.out.println("请输入一个数值进行判断:");
  Scanner scanner = new Scanner(System.in);
  int one =scanner.nextInt();
  if(one<100)
  {
   throw new Exception(); //若输入的数值小于100则抛出异常
  }
 }
}

输出:

3.自定义异常进行处理

class MyException extends Exception{  //自定义异常,通过super方法传递异常信息给父级
 public MyException(){
 super("这是我自定义的异常");
 }
}

public class Try {
 public static void main(String[] a){
  try{
   Function();
  }catch(MyException e)
  {
   e.printStackTrace();
  }
 }
 static void Function() throws MyException{

  System.out.println("请输入一个数值进行判断:");
  Scanner scanner = new Scanner(System.in);
  int one =scanner.nextInt();
  if(one<100)
  {
   throw new MyException(); //将自定义异常进行抛出  
  }
 }
}

输出:

三.异常链

有的时候我们会在处理一个异常的时候抛出一个新的异常,也就是异常的嵌套,但是最后我们得到的异常信息却只有一个。

示例:

public class Try {
 public static void main(String[] a){
  try{
   Function1();
  }catch(Exception e)
  {
   e.printStackTrace();
  }
 }
 static void Function1() throws Exception{
  try{
   Function2();
  }catch(Exception e){
   throw new Exception();
  }
 }
 static void Function2() throws Exception{
  try{
   Function3();
  }catch(Exception e){
   throw new Exception();
  }
 }
 static void Function3() throws Exception{
   throw new Exception();
 }
}

输入结果:

这样的话显示出的异常就只有一个了,那我们如果想让这条异常链中的所有异常信息全部输出该怎么办呢?方法很简单,我们在抛出异常的时候将异常对象也当作参数进行抛出就行了。

示例:

public class Try {
 public static void main(String[] a){
  try{
   Function1();
  }catch(Exception e)
  {
   e.printStackTrace();
  }
 }
 static void Function1() throws Exception{
  try{
   Function2();
  }catch(Exception e){
   throw new Exception("异常2",e);
  }
 }
 static void Function2() throws Exception{
  try{
   Function3();
  }catch(Exception e){
   throw new Exception("异常2",e);
  }
 }
 static void Function3() throws Exception{
   throw new Exception("异常3");
 }
}

运行结果:

到此,我们Java中的异常便是描述完了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java简单自定义异常实例代码

    此处主要便于对异常类的使用上,方便大家理解,以一个公约数为例做了一个简单自定义异常的处理代码如下: 如果操作者输入数字符合要求程序运行,不符合则抛出错误. package 自定义异常简单实例; import java.util.Scanner; public class CommonDivisor { static Scanner in; public void gongyue(int m,int n) throws Exception{ if(m<0||n<0) { throw new Ex

  • 导入项目出现Java多个工程相互引用异常A cycle was detected in the build path of project的解决办法

    将一个项目导入最烦的是遇到各种报错,前段时间搞的一个项目,各个功能模块单独作为一个工程,然后不同工程之间相互调用,这里会报这么一个·错误a cycle was detected in the build path of project,这个错误是因为eclipse默认的编译提示级别过高造成的,只要将编译级别降低即可,之后项目即可正常编译. 现在分享下方案: 1.Eclipse/STS -> Window -> Preferences... -> Java -> Compiler -

  • 关于Java中try finally return语句的执行顺序浅析

    问题分析 finally语句块一定会执行吗? 可能很多人第一反应是肯定要执行的,但仔细一想,如果一定会执行的话 也就不会这么SB的问了. Demo1 public class Test { public static void main(String[] args) { System.out.println("return value of test(): " + test()); } public static int test() { int i = 1; // if (i ==

  • 利用Java8 Optional如何避免空指针异常详解

    前言 空指针是我们最常见也最讨厌的异常,为了防止空指针异常,你不得在代码里写大量的非空判断. Java 8引入了一个新的Optional类.用于避免空指针的出现,也无需在写大量的if(obj!=null)这样的判断了,前提是你得将数据用Optional装着,它就是一个包裹着对象的容器. 都说没有遇到过空指针异常的程序员不是Java程序员,null确实引发过很多问题.Java 8中引入了一个叫做java.util.Optional的新类可以避免null引起的诸多问题. 我们看看一个null引用能导

  • Java中内存区域的划分与异常详解

    前言 JAVA内存区域主要由程序计数器.java 虚拟机栈.本地方法栈.Java堆.方法区以及运行时常量池组成.本文将给大家详细介绍关于Java内存区域的划分与异常的相关内容,下面话不多说了,来一起看看详细的介绍吧. 运行时数据区域 JVM在运行Java程序时候会将内存划分为若干个不同的数据区域. 程序计数器 线程私有.可看作是 当前线程所执行的字节码的行号指示器 ,字节码解释器的工作是通过改变这个计数值来读取下一条要执行的字节码指令. 多线程是通过线程轮流切换并分配处理器执行时间来实现的,任何

  • Java异常处理之try...catch...finally详解

    异常处理机制已经成为判断一门编程语言是否成熟的标准之一,其对代码的健壮性有很大影响.一直以来异常处理使用不是很得心应手,今天对异常进行了较为深入的学习,这篇主要是对try-catch-finally的一个总结. 一.java继承体系 Java语言为异常处理提供了丰富的异常类,这些类之间有严格的继承关系.如图: 从图中我们可以看出,所有的类都是继承于Throwable这个父类,java将所有的非正常情况分为两种:Error(错误)和Exception(异常),Error错误一般是于虚拟机相关的问题

  • Java如何自定义异常打印非堆栈信息详解

    前言 在学习Java的过程中,想必大家都一定学习过异常这个篇章,异常的基本特性和使用这里就不再多讲了.什么是异常?我不知道大家都是怎么去理解的,我的理解很简单,那就是不正常的情况,比如我现在是个男的,但是我却有着女人所独有的东西,在我看来这尼玛肯定是种异常,简直不能忍.想必大家都能够理解看懂,并正确使用. 但是,光学会基本异常处理和使用不够的,在工作中出现异常并不可怕,有时候是需要使用异常来驱动业务的处理,例如: 在使用唯一约束的数据库的时候,如果插入一条重复的数据,那么可以通过捕获唯一约束异常

  • Mybatis单个参数的if判断报异常There is no getter for property named 'xxx' in 'class java.lang.Integer'的解决方案

    我们都知道mybatis在进行参数判断的时候,直接可以用<if test=""></if> 就可以了,如下: 1.常规代码 <update id="update" parameterType="com.cq2022.zago.order.entity.Test" > update t_test_l <set > <if test="trnsctWayId != null"

  • Java异常处理的五个关键字

    异常:异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的. 异常处理关键字:try.catch.finally.throw.throws 注意事项: 错误不是异常,而是脱离程序员控制的问题. 所有的异常类是从 java.lang.Exception 类继承的子类. 异常类有两个主要的子类:IOException 类和 RuntimeException 类. Java有很多的内置异常类. 异常大致分类: 用户输入了非法数据. 要打开的文件不存在. 网络通信时连接中断

  • 简单谈谈java的异常处理(Try Catch Finally)

    异常的英文单词是exception,字面翻译就是"意外.例外"的意思,也就是非正常情况.事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误. 一 前言 java异常处理大家都不陌生,总的来说有下面两点: 1.抛出异常:throw exception class SimpleException{ public void a() throws Exception{ throw new Exception(); }; } 2.捕获异常: public class MyExcepti

随机推荐