Java基础——异常(Error、Exception)

异常(Throwable)

Java对问题进行了对象的封装,Java对不正常情况进行描述后的对象体现,这就是Throwable类

方法摘要
 StringgetMessage() 
          返回此 throwable 的详细消息字符串。(异常信息)
 voidprintStackTrace() 
          将此 throwable 及其追踪输出至标准错误流。(异常名称:异常信息,异常出现的位置)
 StringtoString() 
          返回此 throwable 的简短描述。(异常名称:异常信息)
 voidprintStackTrace(PrintStream s) 
          将此 throwable 及其追踪输出到指定的输出流。(设置输出的位置,定义打印流)
 voidprintStackTrace(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的时

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值