异常(Throwable)
Java对问题进行了对象的封装,Java对不正常情况进行描述后的对象体现,这就是Throwable类
方法摘要 | |
---|---|
String | getMessage() 返回此 throwable 的详细消息字符串。(异常信息) |
void | printStackTrace() 将此 throwable 及其追踪输出至标准错误流。(异常名称:异常信息,异常出现的位置) |
String | toString() 返回此 throwable 的简短描述。(异常名称:异常信息) |
void | printStackTrace(PrintStream s) 将此 throwable 及其追踪输出到指定的输出流。(设置输出的位置,定义打印流) |
void | printStackTrace(PrintWriter s) 将此 throwable 及其追踪输出到指定的 PrintWriter。(设置输出的位置,定义打印流) |
1.Error(严重问题)
要点:由于问题过于严重,对于Error一般不编写针对性的代码对其进行处理
2.Exception(能够解决的问题)
2.1 处理方式(try catch:自己处理)
try
{
需要检测的代码;
}
catch(异常类 变量)
{
处理语句的代码:(处理方式);//检测到几个异常,就catch几个异常
}
finally
{
一定会执行的语句,一般都会放关闭资源的代码
}
(1)注意:<1>.哪里有异常哪里就会产生一个抛出异常对象。不编写try的话,JVM会启动默认的异常处理机制
<2>.try内出现异常对象后,其下边的语句不再 执行
<3>.未出现异常,catch中语句不会执行
(2)正确做法:应该把异常信息保存在硬盘内的一个日志文件内
(3)finally代码块中的代码一定执行
2.2 处理方式(throws:声明问题,让他人处理)
修饰符 返回值类型 函数名(参数列表)throws 异常名,异常名...{
方法体
}
(1)重点:注意问题的封装,只把别人认识能解决的异常声明给别人,别人不清楚的问题要把自己处理问题,把结果发送给对方。知道何时处理问题,何时抛出问题!
2.3 自定义异常
(1)意义:定义Java没有的异常类,因为这个异常类只适用于本程序
(2)抛出:因为Java不识别自定义的异常,所以需要我们自行抛出定义的异常类。格式:
thorw new 异常类名()
(3)Throwable类基本组成,代码如下
class Throwable implements Serializable //异常超类
{
private String detailMessage;//成员异常信息变量
public Throwable(String message){
detailMessage = message
}
public String getMessage(){
return detailMessage;
}
}
所以自定义异常继承Exception只要写下构造函数即可,其它成员都可以通过继承得到,代码如下
class MinusException extends Exception//自定义异常类
{
MinusException(String mes){//只需定义异常类的构造函数,因为其他成员已经继承
super(mes);
}
}
class demo
{
public static int divide(int a,int b)throws MinusException{
if(b<0)
throw new MinusException("除以了负数");//只要除以负数将抛出此自定义异常
return a/b;
}
}
class java
{
public static void main(String[] args)throws Exception{
demo.divide(4,-1);
}
}
2.4 RuntimeException(运行时异常)
(1)知识:抛异常不单单只能抛自定义异常,也可以抛出Java定义的异常,而且可以自定义选择构造器
(2)特点:抛出RuntimeException异常或者其子类时,函数名上不用声明;调用者不用处理,编译一样都通过
2.5 知识点
(1)
当父类方法抛出异常,子类复写该方法要么不抛异常,要么抛出父类异常或者父类异常的子类
(2)
父类方法无异常,子类方法也不能抛出异常,只能内部解决
(3)当执行了System.exit(0);finally将不会执行
(4)
异常存在的意义:当问题处理代码和正常流程代码堆积在一起时,阅读起来很痛苦费力。异常的出现能让两者相分离,便于阅读
(5)return、continue、break、throw new 异常名()下边不能跟语句,因为根本执行不到
3.常见异常
ArithmeticException | 数学算法异常 |
NullPointerException | 空指针异常 |
ArrayIndexOutOfBoundsException | 数组角标越界异常 |
StringIndexOutOfBoundsException | 字符串角标越界异常 |
InterruptedException | 中断异常 |
IllegalArgumentException | 无效参数异常 |
ClassCastException | 类型转换异常 |
IllegalThreadException | 线程状态异常(多次开启同一个线程,不管此线程是否消亡) |
NumberFormatException | 数字格式异常(字符串转换为Integer传入非法数值时抛出) |
ConcurrentModitcationException | 并发访问异常,修改异常(在迭代器中用迭代器方法与集合方法同时操作集合元素) |
NoSuchElementException | 没有这样的元素异常(LinkedList为空时调用getFirst相关方法) |
IOException | 传统的IO异常 |
FileNotFoundException | 文件未找到异常 |
NotSerializableException | 某个要序列化的对象不能实现异常 |
ClassNotFoundException | 类没有找到异常(读取序列化的对象,发现类不存在。当发现抛出此异常显示的是你没见过的类,可以确定是你们导入开发环境所致) |
UnknownHostException | 未知主机异常(建立IP地址对象时抛出的异常) |
SocketException | 建立Socket相关对象时 |
BindException | 当建立了重复端口的Socket的时 |