java runtime 异常_Java RuntimeException异常处理汇总

java runtime 异常_Java RuntimeException异常处理汇总Java 中所有异常的父类是 Throwable 类 在 Throwable 类下有两大子类 一个是 Error 类 指系统错误异常 例如 VirtualMachi 虚拟机错误 ThreadDeath 线程死锁 一般如果是 Error 类的异常的话 就是程序的硬伤 就好比是工厂里断水断电 机器损坏了 另一个是 Exception 类 指编码 环境 用户操作输入等异常 这个是比较常见的异常类 Excepti

Java中所有异常的父类是Throwable类,在Throwable类下有两大子类:

一个是Error类,指系统错误异常,例如:VirtualMachineError 虚拟机错误,ThreadDeath 线程死锁。一般如果是Error类的异常的话,就是程序的硬伤,就好比是工厂里断水断电,机器损坏了。

另一个是Exception类,指编码、环境、用户操作输入等异常,这个是比较常见的异常类,Exception类下面又有两个子类,RuntimeException 非检查异常和检查异常,非检查又称为运行时异常,在RuntimeException异常中有几个常见的子类,例如:

InputMismatchException 输入不匹配异常

ArithmeticException 算术运算异常

NullPointerException 空指针异常

ArrayIndexOutOfBoundsException 数组下标越界异常

ClassCastException 类型转换异常

检查异常中的子类有:

IOException 文件异常

SQLException SQL数据库错误异常

在实际的开发中,处理异常一般使用以下三种方式:

一、使用try-catch语句块捕获和处理异常

使用try-catch 以及 try-catch-finally 来捕获和处理异常时,catch里的异常列表一般是子类在前,父类在后,不然编译时程序会报错。示例如下:

1 importjava.util.InputMismatchException;2 importjava.util.Scanner;3

4 public class异常处理 {5

6 public static voidmain(String[] args) {7

8 System.out.println(“请输入你的年龄”);9 Scanner input = newScanner(System.in);10 try{11 System.out.println(“请输入第一个数:”);12 int one =input.nextInt();13 System.out.println(“请输入第二个数:”);14 int two =input.nextInt();15 System.out.println(“两数相除结果为:”+one/two);16 }catch(InputMismatchException e){17 System.out.println(“请输入整数”);18 }catch(ArithmeticException e){19 System.out.println(“除数不能为零”);20 }catch(Exception e){21 System.out.println(“程序执行中出现异常”);22 }finally{23 System.out.println(“程序执行结束!”);24 }25

26

27

28 }29

30 }

二、使用throws关键字声明将要抛出何种类型的异常

语法

public void 方法吗(参数)throws 异常列表{ throw new Exception(); }

示例如下:

1 public classThrowDemo {2

3 public static voidmain(String[] args) {4

5 ThrowDemo td = newThrowDemo();6 try{7 td.test(10, 0);8 } catch(Exception e) {9 System.out.println(“异常抛出”);10 }11 }12

13 public void test(int a,int b) throwsException{14 int c = a/b;15 System.out.println(“计算结果为:”+c);16

17 }18

19 }

三、自定义异常类

有的时候我们抛出的异常在Throwable类中没有定义,就需要我们自己自定义一个异常的类,比如我们实际开发中需要用到一个“开车别喝酒”的异常,我们就可以定义一个这样的异常类来处理我们项目中需要处理的异常。

自定义异常类的语法:

class 自定义异常类 extends 异常类型{}

自定义异常类需要继承和它类型相近的Throwable类里面的子类,或者是我们直接让自定义异常类继承Exception类,示例如下:

1 /

2 * 自定义一个异常类3 *@authorlenovo4 *5 */

6 public class MyThrow extendsException{7

8 publicMyThrow(){9

10 }11

12 publicMyThrow(String mess){13 super(mess);14 }15 }

使用这个异常类的示例如下:

1 public classChainTest {2

3 /

4 * test1():抛出”喝大了”异常;5 * test2():调用test1(),捕获”喝大了”异常,并且包装成运行时异常,继续抛出;6 * main方法中调用test2(),尝试捕获test2()方法抛出的异常7 */

8

9 public static voidmain(String[] args) {10 ChainTest ct = newChainTest();11 ct.test2();12 }13

14 public void test1() throwsMyThrow{15 throw new MyThrow(“喝酒别开车!”);16 }17

18 public voidtest2(){19 try{20 test1();21 } catch(MyThrow e) {22 RuntimeException newExc = new RuntimeException(“司机一滴酒,亲人两行泪~~”);23 newExc.initCause(e);24 thrownewExc;25 }26 }27

28 }

运行结果:

Exception in thread “main” java.lang.RuntimeException: 司机一滴酒,亲人两行泪~~at xbw.ChainTest.test2(ChainTest.java:24)

at xbw.ChainTest.main(ChainTest.java:13)

Caused by: xbw.MyThrow: 喝酒别开车!

at xbw.ChainTest.test1(ChainTest.java:17)

at xbw.ChainTest.test2(ChainTest.java:22)

…1 more

Java异常处理实际应用中的经验与总结:

1、处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理;

2、在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常;

3、对于不确定的代码,也可以加上try-catch,处理潜在异常;

4、尽量去处理异常,切忌只是简单的调用printStackTrace()去打印输出;

5、具体如何处理异常,要根据不同的业务需求和异常类型去决定;

6、尽量添加finally语句块去释放占用的资源。

注:以上内容是个人学习和工作中的总结,如有不完善和需要改正的地方,可以留言,谢谢阅读!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210520.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午7:29
下一篇 2026年3月19日 上午7:29


相关推荐

  • 第十五章《键的管理》

    第十五章《键的管理》

    2021年5月29日
    90
  • 键盘过滤驱动程序[通俗易懂]

    键盘过滤驱动程序[通俗易懂]在我,因为现在是半个月后的时间与驱动器接触,我深深体会到开头难,和学习毅力的重要性。同时推动新。当看着帆驱动的开始《Windows驱动开发技术具体解释》讲的挺细。对新手来说是个不错的学习资料,可是更重

    2022年7月4日
    29
  • SMOTE算法代码实现

    SMOTE算法代码实现类别不平衡问题类别不平衡问题,顾名思义,即数据集中存在某一类样本,其数量远多于或远少于其他类样本,从而导致一些机器学习模型失效的问题。例如逻辑回归即不适合处理类别不平衡问题,例如逻辑回归在欺诈检测问题中,因为绝大多数样本都为正常样本,欺诈样本很少,逻辑回归算法会倾向于把大多数样本判定为正常样本,这样能达到很高的准确率,但是达不到很高的召回率。类别不平衡问题在很多场景中存在,例如欺诈检测,风控识…

    2022年6月17日
    31
  • 动态规划:最长回文子串 & 最长回文子序列

    动态规划:最长回文子串 & 最长回文子序列一、题目所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如“a”、“aba”、“abba”。对于一个字符串,其子串是指连续的一段子字符串,而子序列是可以非连续的一段子字符串。最长回文子串和最长回文子序列(LongestPalindromicSubsequence)是指任意一个字符串,它说包含的长度最长的回文子串和回文子序列。例如:字符串“ABCDDCEFA…

    2022年4月29日
    47
  • Android debug_Android开发在手机上调试

    Android debug_Android开发在手机上调试AndroidStudio目前已经成为开发Android的主要工具,用熟了可谓相当顺手。作为开发者,调试并发现bug,进而解决,可是我们的看家本领。正所谓,工欲善其事必先利其器,和其他开发工具一样,如Eclipse、Idea,AndroidStudio也为我们提供了强大的调试技巧,今天我们就来看看AndroidStudio中有关调试的技巧。首先,来看看Androidstudio中为我们…

    2022年10月15日
    8
  • CodeForces 10D. LCIS 最长公共上升子序列模板题 + 打印路径

    CodeForces 10D. LCIS 最长公共上升子序列模板题 + 打印路径

    2022年1月30日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号