Java求生之路--异常详解

异常

什么是异常?

  异常是指程序在运行过程中所发生的不正常事件,它会中断正在运行的程序。

 

传统方式来处理异常-----修改代码

 

异常解决了哪些问题

 代码臃肿

 花很大时间堵住的漏洞

 但是很难赌完所有的漏洞

 

Java中的异常都是Exception

 

于是 需要使用异常处理机制

 什么是异常处理

     Java编程语言使用异常处理机制为程序提供了处理错误的能力

     程序中预先设置好对付异常的处理办法,对异常进行处理

 

Java中的异常处理是通过5个关键字来实现的

 捕获异常

   try  执行可能产生异常的代码

  catch 捕获异常

  fianlly 无论是否发生异常 必须执行的代码

声明异常

   throws 声明方法可能要抛出的各种异常

 抛出异常

   throw 手动抛出异常

 

try-catch代码块

1.正常情况下 无异常

try{
    //代码段
}catch(异常类型 变量名){
    //对异常进行处理的代码块
}

执行顺序:try--catch 后的代码

2.出现异常 并且恰好和catch后的异常相匹配

try{
    //代码段
    //产生异常的代码段2
    //代码段3
}catch(异常类型 变量名){
    //对异常进行处理的代码块
}

执行顺序:try--catch内的语句--catch外的语句

3.出现异常 并且异常不匹配

try{
    //代码段
    //产生异常的代码块2
    //代码段3
}catch(异常类型 变量名){
    //对异常进行处理的代码块
}

执行顺序:try --中断

异常是一种特殊的对象,类型为 java.lang.Exception 或其子类

 

异常的堆栈信息

  printStackTruce()的堆栈跟踪功能显示出程序运行到当前类的执行流程

   异常堆栈信息由下往上看,找错由上往下

 

catch中处理异常

    加入用户自定义处理信息
		System.out.print("错误提示")
	调用方法输出异常信息
		变量名.printStachTrace();
	异常对象常用的方法
		void.printStachTrace();//输出异常的堆栈信息
		String getMessage()//但会异常信息描述字符串 是printStachTrace()输出信息的一部分

 

常见的异常类型

Exception 异常层次结构的父类

ArithmeticException 算数错误情形 如以0作除数

ArrayIndexOutOfBoundsException 数组下标越界

NullPointerException 尝试访问num对象成员 空指针异常

ClassNotFoundException 找不到加载所需的类

 IIIegalArgumentException 方法接受到非法参数

ClassCastException 对象强制类型转换出错

NumberFormatException 数字格式转换异常

 

 

try--catch--finally

   在try-catch块后加入finally

              不论是否发生异常都会执行

  唯一情况:如果加了System.exit(1); 则中断程序 退出JVM

 

finally

public void method(){
	try{
		//代码块1
		//产生异常的代码块2
	}catch(异常类型 ex){
		//对异常进行处理的代码块
		return;
	}finally{
		//代码段4
	}
}

问?return 情况下 finally是否执行?

执行顺序:try-发生异常-产生异常对象-catch-处理异常-finally块-return

 

try-catch-finally中  try是必须的 catch 与 finally 缺一不可 但两者至少有一个

 

多重catch块

引发多种类型的异常

排列catch语句的顺序,先子类后父类

发生异常时按顺序匹配

只执行第一个与异常类型匹配的catch

 

 

声明异常 

      如果在一个方法中抛出了异常,如何通知调用者?

                throws声明的某个方法,可能抛出的异常

      多个异常用逗号隔开

 

方式1:调用者处理异常

方式2:调用者继续抛出异常 main方法抛出的异常由JVM处理

 

抛出异常

  除了系统自动抛出异常之外,有哪些问题需要程序员自行抛出异常?

         使用throw 抛出异常

 

throwthrows的区别

1.作用不同:throw用于程序员自行产生并抛出了异常

                      throws用于声明该方法内抛出了异常

2.使用的位置不同:throw位于方法体的内部,可单独使用

                               throws必须跟在方法参数列表后  不可单独使用

3.内容不同:throw抛出一个异常对象,只能跟一个

                  throws 后面跟异常类,可以跟多个

 

 

异常体系结构

 

 

自定义异常

 当jdk中的异常类型不能满足程序的需要时,可以自行定义异常

使用自定义异常类型步骤

1.定义异常类  继承异常父类 编写构造方法实现父类方法

2.实例化自定义异常对象,将其抛出

 

 

异常处理原则

    异常处理与性能

    异常只能用于非正常情况

   不要将过于庞大的代码块放在try中

   在catch中指定具体的异常类型

   需要对捕捉的异常作处理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值