java的异常

异常 Exception
异常就是指程序在运行过程当中出现的例外情况而已
异常的体系结构
Throwable [可以向上抛出的]

	Error			Exception
	[错误]			[异常]

				RuntimeException
				[运行时异常]

#: Error和Exception的区别?
Error是指和底层硬件有关或者和操作系统有关的程序员
通过编码无法解决的相对较严重的问题
Exception是指程序在运行过程当中出现的例外情况而已
#: 运行时异常和非运行时异常的区别?
运行时异常在程序编译的时候不要求给出处理方案
编译可以直接通过 程序会在运行时直接体现异常
继承RuntimeException

非运行时异常在编译的时候就要求程序员必须给出处理方案
	否则编译无法通过 
				直接继承Exception

#: Java常见的运行时异常有哪些?
ArithmeticException = 算术异常
NegativeArraySizeException = 负数数组大小异常
ArrayIndexOutOfBoundsException = 数组索引值超出边界异常
NullPointerException = 空指针异常
StringIndexOutOfBoundsException = 字符串索引值超出边界异常
NumberFormatException = 数字格式异常
ClassCastException = 类型造型异常
IllegalArgumentException = 非法参数异常
IndexOutOfBoundsException = 索引值超出边界异常
IllegalStateException = 非法状态异常
ConcurrentModificationException = 并发修改异常
为什么要处理异常?
A.非运行时异常不做处理编译都无法通过…[线程 IO 大量的非运行时异常]
B.程序运行当中一旦出现异常而未做处理 虚拟机会直接结束程序的执行
如何处理异常:
1.抛还上级 throws
足以解决A 但是无力解决B

2.自行处理	 try catch finally

	try{
		可能出现异常的语句,通常只有一句
		除非需求决定 前方不顺 后方跳过
	}catch(要捕获的异常类型 异常的代号){
		隐瞒不报;//1st way
		System.out.println(异常的代号.getMessage());//2nd way
		异常的代号.printStackTrace();//3rd way
	}finally{
		无论是否出现异常 最终都要执行的操作
		通常是释放和关闭资源的操作
	}

	*:一个try后面可以跟上多个catch
		但是不允许前面包含后面的类型
	*:JDK7.0开始可以使用|连接多种异常类型
		多不同种类的异常 提供一个相同的处理方案
		[*:注意 此处的|不是逻辑运算符 不能写||]
	*:finally当中绝对不应该出现return语句
		否则try catch当中的return都没有意义了

如何在没有异常出现的情况下 主动制造异常出现的场景:
throw :

*: throw和throws的区别
	throws用在方法签名的最后 
	表达在本方法当中出现指定种类的异常
	本方法不做处理 抛还给调用的上级处理

	throw 用在方法体当中
	在没有异常出现的场景下 主动制造异常出现的场景

如何自定义异常:
自己写一个类继承Exception - 非运行时异常
或者继承RuntimeException - 运行时异常

	通过其构造方法首行的super()
	给父类构造方法传参指定异常的message信息~

1 : 如果类体当中某个静态变量是调用有异常声明的方法完成赋值的时候
我们不能在类体上加throws 更不能在类体里try catch
此时必须借助静态初始化块 初始化块当中完成异常处理

2 : 关于方法覆盖的时候 子类方法能不能抛出异常的问题
如果父类方法没有声明抛出异常
子类的方法在覆盖的时候能不能向外抛出异常呢
可以 可以抛出各种运行时异常
但是没有必要 没有意义 运行时异常默认就抛出
Java当中的每个方法相当于都有一行throws RuntimeException

3 : 在处理连续的多个资源都需要关闭 而且无论前面资源关闭是否顺利
后面的资源都想要尝试关闭的情况下
例如:IO流 JDBC的数据库连接等等
必须学会try catch finally的嵌套使用
在finally当中再用try catch…

4 : 为了处理异常所加的try catch的大括号 也有控制变量消亡的作用
所以 在try 大括号外面 就不能访问try当中定义的局部变量了
如果想要在下文程序当中还能继续使用这些变量
请将它们的定义写在try大括号的前面 并且给默认值赋值
在try当中进行重新赋值 不要把定义直接写在try当中

5 : 在某些场景下 学会使用异常处理的机制来代替传统的分支判断 会有奇效!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值