当前位置: 首页 > news >正文

Java异常机制

异常类(Exception)和错误类(Error)都继承自Throwable类。

 

一、格式:

五个重要关键词try,catch,finally,throw,throws

try {  
    // 可能发生异常的代码   
} catch (异常类型1 异常对象1){  
    // 异常处理代码
}  
catch (异常类型2 异常对象2){  
     //异常处理代码
} 

 

try:试试某段代码里是否含有异常。

catch:捕获异常。后面对应异常类型和一个代码块,用于表明该catch块用于处理这种类型的代码块,可以有多个catch块。

finally:总会被执行的代码。主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。

throw:用于抛出一个实际的异常,可以单独作为语句使用,抛出一个具体的异常对象。

throws:用在方法签名中,用于声明该方法可能抛出的异常。

二、抛出异常:

1.throws抛出异常:

如果我们定义的一个方法可能会出现异常,但没有能力去处理这个异常,这时我们可以用throws抛出异常,交给这个方法的调用者去处理(当然如果调用者也不想处理,也可以继续抛出,最终JVM会处理)。比如:汽车在运行时可能出现异常,但汽车没有自己处理的能力,它就会把异常抛给开车的人处理(方法调用者)。

public class TestException {  
    static void pop() throws NegativeArraySizeException {  
        // 定义方法并抛出NegativeArraySizeException异常   
        int[] arr = new int[-3]; // 创建数组   
    }  
  
    public static void main(String[] args) { // 主方法   
        try { // try语句处理异常信息   
            pop(); // 调用pop()方法   
        } catch (NegativeArraySizeException e) {  
            System.out.println("pop()方法抛出的异常");// 输出异常信息   
        }  
    }  
  
}  

定义方法pop()时预测到可能会出现NegativeArraySizeException类型的异常,但它假如无力处理异常,所以就把异常抛出,谁调用它谁就处理这个异常。

2.throw抛出异常对象:

throw抛出的是一个具体的异常对象,程序在执行了throw之后会立即跳出语句所在的方法,因此throw后面不允许有别的语句,否则程序会在编译时出错。

 

三、常见异常:
 1. runtimeException子类:

    1、 java.lang.ArrayIndexOutOfBoundsException
    数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。
    2、java.lang.ArithmeticException
    算术条件异常。譬如:整数除零等。
    3、java.lang.NullPointerException
    空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等
    4、java.lang.ClassNotFoundException
    找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。

   5、java.lang.NegativeArraySizeException  数组长度为负异常

   6、java.lang.ArrayStoreException 数组中包含不兼容的值抛出的异常

   7、java.lang.SecurityException 安全性异常

   8、java.lang.IllegalArgumentException 非法参数异常

2.IOException

IOException:操作输入流和输出流时可能出现的异常。

EOFException   文件已结束异常

FileNotFoundException   文件未找到异常

3. 其他

ClassCastException    类型转换异常类

ArrayStoreException  数组中包含不兼容的值抛出的异常

SQLException   操作数据库异常类

NoSuchFieldException   字段未找到异常

NoSuchMethodException   方法未找到抛出的异常

NumberFormatException    字符串转换为数字抛出的异常

StringIndexOutOfBoundsException 字符串索引超出范围抛出的异常

IllegalAccessException  不允许访问某类异常

InstantiationException  当应用程序试图使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常


 

四、异常对象包含的常用方法:

1.       getMessage();返回该异常的详细描述字符

2.       printStackTrace():将该异常的跟踪栈信息输出到标准错误输出。

3.       printStackTrace(PrintStream s):将该异常的跟踪栈信息输出到指定的输出流

4.       getStackTrace():返回该异常的跟踪栈信息。

 五、自定义异常:

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/wangerxiansheng/p/3836401.html

相关文章:

  • 使用Docker1.13.1快速部署ELK环境
  • SliTaz 从入门到精通
  • Decorator装饰者模式(结构型模式)
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • Anaconda3启动ipython的几种方式
  • QueryParser
  • SqlService 索引原理
  • 第五次实验
  • Sherpa | Complete Navigation System 介绍与教材
  • 「postgres」导出数据以及分割数据
  • C#和asp.net执行外部EXE程序
  • 2018.10.23-dtoj-1608新三国争霸(fight)
  • 玩转html5(三)---智能表单(form),使排版更加方便
  • 推荐C++程序员阅读《CLR via C#》
  • 高级 Vue 组件模式 (7)
  • C++类中的特殊成员函数
  • C++入门教程(10):for 语句
  • Computed property XXX was assigned to but it has no setter
  •  D - 粉碎叛乱F - 其他起义
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • ECMAScript6(0):ES6简明参考手册
  • Git初体验
  • HTTP 简介
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Just for fun——迅速写完快速排序
  • pdf文件如何在线转换为jpg图片
  • React系列之 Redux 架构模式
  • Spring Cloud Feign的两种使用姿势
  • 翻译:Hystrix - How To Use
  • 基于游标的分页接口实现
  • 近期前端发展计划
  • 排序(1):冒泡排序
  • 前端技术周刊 2019-01-14:客户端存储
  • 浅谈Golang中select的用法
  • 如何用vue打造一个移动端音乐播放器
  • 使用Gradle第一次构建Java程序
  • ionic入门之数据绑定显示-1
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (1)(1.13) SiK无线电高级配置(五)
  • (175)FPGA门控时钟技术
  • (Git) gitignore基础使用
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (九)One-Wire总线-DS18B20
  • (全注解开发)学习Spring-MVC的第三天
  • (三)终结任务
  • (十)T检验-第一部分
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (一)appium-desktop定位元素原理
  • (转)Linq学习笔记