热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java异常类处理

一、Java中异常类的体系结构1.程序出现异常时正常现象【就跟人会生病一样】2.Java中异常类Throwable【类】是顶级异常类3.Throwable【类】有两个子类:(1)E

一、Java中异常类的体系结构

  1.程序出现异常时正常现象【就跟人会生病一样】
2.Java中异常类Throwable【类】是顶级异常类
3.Throwable【类】有两个子类:
(1)Error【错误】
(2)Exception【异常】

在这里插入图片描述


二、Error与Exception的区别

  Error是java程序运行中不可预料的异常情况,这种异常发生后,会直接导致JVM不可处理或者不可恢复的情况。所以这种异常不可能抓取到,比如OutOfMemoryError、NoClassDefFoundError等。【癌症】
Exception是java程序运行中可预料的异常情况,咱们可以获取到这种异常,并且对这种异常进行业务外的处理。【感冒】


三、运行时异常与非运行时异常的区别

  非运行时异常—>检查性异常 必须在编写代码时,使用try catch捕获(比如:IOException异常)。
运行时异常—>非检查性异常 在代码编写使,可以忽略捕获操作(比如:ArrayIndexOutOfBoundsException),这种异常是在代码编写或者使用过程中通过规范可以避免发生的。


四、Java异常处理的原理

  1.问题自己处理不了
如果出现异常,java会根据问题所描述的异常类,创建一个对象(实例)具体异常对象,然后将该对象抛给上一级【谁调用谁就是上一级】,具体步骤:
method具体出异常处 —> main主方法 —> jvm虚拟机 —> 将异常出现的位置和原因打印在控制台。

  2.问题可以自己处理掉–通过try-catch代码块处理异常
将可能出现异常的java代码使用”try{异常可能发生的代码}catch(要抓捕的异常){异常处理方式}”块包裹,如果出现异常try{}就会捕获异常,终止代码的运行,将捕获的异常交给catch(){}去处理异常。


五、try{}catch(){}finally{}的用法

  异常可以自己处理掉 — 通过try-catch代码块处理异常
格式:

try{
//异常可能发生的代码
}catch(//要抓捕的异常){
//异常处理方式
}finally{
//最终代码
}

  (1)try —> 捕获可能发生的异常
(2)catch(//要抓捕的异常){//异常处理方式} —> 处理异常
catch后面的" ( ) "中专门定义具体异常类型
catch的 {} —> 具体异常的处理过程
(3)finally{} —> 有无异常都要执行的动作
例如:

package com.wangxing.test1;
public class TestMain {public static void main(String[] args) {//1.当我们无法判断try{}何种具体异常的时候,//我们可以在catch块的参数中通过定义Exception/Throwable类的对象来代替具体异常类型。/*try {int res=10/0;System.out.println("res=="+res);}catch(Exception e) {System.out.println("处理异常!");}*///2.一个try{}后面可以跟随多个catch块,多个catch块需要按照具体异常的级别由低到高排列try{int numbers[]=new int[2];numbers[0]=10;numbers[1]=0;int num1=numbers[0];int num2=numbers[1];int num3=num1/num2;numbers[2]=num3;System.out.println("程序执行完毕!!");}catch(IndexOutOfBoundsException e3) {System.out.println("处理数组下标越界异常!");}catch(ArithmeticException e2) {System.out.println("处理除数为0的异常!");}catch(Exception e1) {System.out.println("exception异常!");}catch(Throwable e) {System.out.println("Throwable异常!");}finally {System.out.println("有无异常都要执行");}}
}

运行结果:

在这里插入图片描述

  1.当我们无法判断try{}何种具体异常的时候,我们可以在catch块的参数中通过定义Exception/Throwable类的对象来代替具体异常类型。
2.一个try{}后面可以跟随多个catch块,多个catch块需要按照具体异常的级别由第到高排列
3.finally{}–有无异常都要执行的动作
4.当try{}catch(){}finally{}出现在一个有返回值的方法中时,finally{}中的内容实在本方法的return语句之前运行。
例如:

package com.wangxing.test2;
public class TestClass {public int testMehtod() {try {int a=10;return a;}catch(Exception e) {//控制台打印具体异常e.printStackTrace();}finally {System.out.println("有无异常都执行");}return 0;}
}

package com.wangxing.test2;public class TestMain {public static void main(String[] args) {TestClass tc=new TestClass();System.out.println(tc.testMehtod());}
}

六、throws与throw关键字的用法

  throws —> 声明方法抛出异常给上一级【谁调用谁就是上一级】

  格式:访问限制修饰符 返回值类型 方法名称()throws 具体异常类型{ }

  当我们无法判断读具体异常类型的时候使用Exception/Throwable代替
例如:

package com.wangxing.test3;
public class DoClass {public int testMethod() throws Exception{int a=10/0;return a;}
}

package com.wangxing.test3;
public class TestMain {public static void main(String[] args) throws Exception{DoClass dc=new DoClass();int res=dc.testMethod();System.out.println("res=="+res);}
}

  throw —> 手动引发一个具体异常
自定义异常 —> 编写一个新类,继承Exception/Throwable,在构造方法中访问父类的构造方法。

package com.wangxing.test4;
/*** 我自己定义的异常类* @author Administrator**/
public class MyException extends Exception{public MyException(String info) {super(info);}
}

package com.wangxing.test4;
public class Person {private int age;public void setAge(int inputage) throws MyException{if(inputage > 0 && inputage <= 200) {age=inputage;}else{throw new MyException("你提供的年龄不符合要求!!");}}public int getAge() {return age;}
}

package com.wangxing.test4;
public class TestMain {public static void main(String[] args) throws MyException{Person person=new Person();person.setAge(-10);System.out.println("age=="+person.getAge());}
}

七、Java中常见运行时异常

  1. NullPointerException - 空指针引用异常
2. ClassCastException - 类型强制转换异常。
3. IllegalArgumentException - 传递非法参数异常。
4. ArithmeticException - 算术运算异常
5. ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
6. IndexOutOfBoundsException - 下标越界异常
7. NegativeArraySizeException - 创建一个大小为负数的数组错误异常
8. NumberFormatException - 数字格式异常
9. SecurityException - 安全异常
10. UnsupportedOperationException - 不支持的操作异常


总结


推荐阅读
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 本文详细解析了Java类加载系统的父子委托机制。在Java程序中,.java源代码文件编译后会生成对应的.class字节码文件,这些字节码文件需要通过类加载器(ClassLoader)进行加载。ClassLoader采用双亲委派模型,确保类的加载过程既高效又安全,避免了类的重复加载和潜在的安全风险。该机制在Java虚拟机中扮演着至关重要的角色,确保了类加载的一致性和可靠性。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 如何使用 `org.apache.poi.openxml4j.opc.PackagePart` 类中的 `loadRelationships()` 方法及其代码示例详解 ... [详细]
  • 在优化Nginx与PHP的高效配置过程中,许多教程提供的配置方法存在诸多问题或不良实践。本文将深入探讨这些常见错误,并详细介绍如何正确配置Nginx和PHP,以实现更高的性能和稳定性。我们将从Nginx配置文件的基本指令入手,逐步解析每个关键参数的最优设置,帮助读者理解其背后的原理和实际应用效果。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 本文探讨了如何利用Java代码获取当前本地操作系统中正在运行的进程列表及其详细信息。通过引入必要的包和类,开发者可以轻松地实现这一功能,为系统监控和管理提供有力支持。示例代码展示了具体实现方法,适用于需要了解系统进程状态的开发人员。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
author-avatar
Mr_cool
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有