java 异常篇

目录


Java 异常概述
java异常体系结构
常见的异常
异常处理
运行期异常和编译期异常
自定义异常  

1.Java 异常概述

异常:程序在执行过程中,出现的不正常情况,如果不处理最终会导致JVM的非正常停止。程序运行中,用户输入输入数据格式有误,读取文件被强制删除,文件传送时断网,就会出现异常
要注意异常和语法错误的区别,语法错误,编译会通不过,不会产生字节码文件,根本不能运行

异常的抛出机制


Java中把不同的异常用不同的类表示,一旦发生某种异常,就创建该异常类型的对象,并且抛出。
然后程序员可以捕获到这个异常对象,并处理;如果没有捕获这个异常对象,那么这个异常将会导致程序终止。

2.异常体系结构:

java.lang.Throwable 是java异常体系中的根父类

两个常用方法:public void printStacTrace():打印异常详细信息

                      public  String getMessage ():获取发生异常S的原因

两个子类:

java.lang.Error  :错误 是java程序无处理,比如内存不够

 java.lang.Exception :异常,出现的一般性问题,可以使用Java异常处理机制处理

3.常见异常

运行时异常--Exception

Exception: 其它因编程错误或偶然的外在因素导致的一般性问题,需要使用针对性的代码进行处理,使程序继续运行。否则一旦发生异常,程序也会挂掉

Error

java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。一般不编写针对性的代码进行处理。

堆溢出: OutOfMemoryError
栈溢出: StackOverflowError

4.异常处理

java中提供一套一场处理机制,在程序发生异常,可以执行预先设定好的处理程序,执行完成后程序停止,可以继续向后执行。

在写代码的时候,就要根据不同的情况设定好处理程序,运行程序 如果程序执行时,出现问题,执行异常处理程序, 如果程序执行时,没有出现问题, 不需要执行异常处理程序    


 关键字处理


try{
 写代码,可能会出现异常
 }catch(异常类型 a){ 

捕获指定类型的异常
}finally{
 最终必须要执行的代码
}

catch中的小方法
getMessage() 获取异常信息,返回字符串
printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的 位置。返回值void。
注意:
一个try后面可以写多个catch,分别捕获不同类型的异常,要从子类往父类 的顺序写,否则有编译错误,但是只能有一个finally语句 

      
         throws throw处理

throws
在方法参数列表后面,用来声明此方法有可能出现异常。谁调用,谁处理注意运行期异常不主动执行。
定义一个方法的时候可以使用throws关键字声明,表示此方法 不处理异常,而交给方法调用处进行处理。
例如:
public void test throws 异常1,异常2,异常3{
}
任何方法都可以使用throws关键字声明异常类型,包括抽象方法。 调用使用了throws的方法时必须处理声明的异常,要么使用try-catch,要么 继续使用throws声明。 如果抛出的是运行期异常,则不会有任何提示,需要查看所调用的方法结构

  

throw
在方法体内,不满足某种条件,主动抛出一个异常对象,程序不再向后执行
关键字用于显式抛出异常,抛出的时候是抛出的是一个异常类的实例化 对象.
语法:throw new 异常类构造方法

        

5.运行期异常和编译期异常

运行期异常:是RuntimeException类及其子类异常,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序员写程序要注意,程序应该从逻辑角度尽可能避免这类异常的发生。运行时异常的特点在编译期间不会要求强制处理,也就是说,当程序中可能出现这类常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出,也会编译通过。
编译期异常:是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。

6.自定义异常

java API 中定义的标准异常类,都是与语法有关的(空指针,索引越界),但是程序可能不满足某种业务条件,想以抛出异常的形式处理,就需自定义一个业务相关的异常类来表示(比如分数不合法,scoreException)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值