大数据的学习路程(java基础学习异常篇)--EleveDay

1.异常:程序出问题的警示.提示代码哪里出错了.(分为;人为的(Exception),非人为的(Error))
Exception的异常:需要程序员去铺抓,并解决
Erro:属于系统类级别的错误,一般不需要去铺抓

例子:NullpointException:空指针异常;简称:NPE
	 ParseException:格式解析异常
	 ArrayIndexBroughtExcep:数组下标溢出异常
	 类型转化异常
	 OutOfMemoryError:堆异常错误.简称OOE.产生对象太多,内存不够用
	 .
	 .
	 .
1.1.检查性异常:继承Exceptiong的必须要处理的异常.要么抛出,要么try--catch.否则不能编译通过(有后遗症),引发更大的问题.必须要处理的异常.比如:IO运行了,打开了资源,突然IO异常,如果内存不处理,就会一直扩大
    
	例子:若一个IO流开启了一个流,不关闭,就会造成资源泄露(就是资源占用,gc不会回收,一直在内存中,造成资源占用)
	
	非检查性异常:继承RuntimeException的都是非检查性异常,可以处理,也可不处理.不影响全局的运作.比如:数据下标溢出,类型转化异常.....

2.异常的处理:
1.检查性异常(继承Exception):①try…catch…②throws 这两种方式该怎么处理呢?

  ①try{
	
	//1.一般用来写可能要抛出异常的代码
		1.1.只要中间发生异常,代码执行流程.立马中断,(是编译性异常不可能让整个项目运行后,再抛出异常的,因为如:IO,),且跳转到catch内
	
  }catch(Exception e){
	//2.只要try里面的代码,出现了异常,就被catch模块捕获到,跳进catch内处理
	   2.1.try不发生异常,则不执行catch
	   2.2.若try内有多个异常,则要catch多个,精确分类处理(从子到父类写,不然会报错)
  }finally{
	//3.资源关闭的地方.无论try还是catch是否终止,finally一定会走的
  }
  
  注意:打开资源型的代码,一定要关闭资源,否则会造成资源泄漏(gc不会回收,一直会存在内存中,直到系统崩溃)
  
  ②throws抛异常:当异常当代码无法处理,或者要交个上层处理,则用throws抛出去
  方式: 在方法后,throws + xxxxxException(可以一下子抛多个,用逗号隔开)
  
  
  ③第三种情况:异常已经捕捉,并且记录了,但是没办法处理,或者把信息给上一层,则在catch抛出
  方式:
		try{
			
		}catch(ArrayIndexBroughtExcep e){
			System.out.println("异常已经捕捉,并且记录了,但是没办法处理");
			throw new Exception("文件找不到了,怎么搞");
		}finally{
		
		}
	注意:throws和throw的区别

3.自定义异常:根据实际情况,用它们
两种情况:
第一步:
①继承Exception
②继承RuntimeException(自定义的,非编译性异常较多)

		第二步:覆写两个构造方法(无参,有参)

4.异常类:子类与父类之间异常情况

4.1.子抛异常,父类抛异常.父类抛的是父类的异常,子类只能抛同类或者子类
	如:子:
	 public void test()throws RuntimeException{}
	 
	 父类:
	 public void test1()throws Exception{
	 }
	 子类抛到异常类<=父类抛出的异常类

子类与父类异常的注意事项:
1.子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类;
2.如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是它的子集,子类不能抛出父类没有的异常;
3.如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws

注意:如果多个异常,有同样的处理方式,可以用在括号里用 | 或来连接

try…catch注意的事项:
1.try不要放太多的代码
2.尽量不要在try内放for循环
3.catch处理异常时,要给出处理方式
4.捕获多个异常时,先处理小异常,再处理大的异常
5.适当的用finally代码块


1.什么是异常?
答:异常就是程序出错的提示,并告诉出错的地方

2.异常分为哪几种?
答:Exception 和 error 两种. Exception:需要程序员去铺抓,并解决;而 error 一般不需要去铺抓解决(系统性异常)

3.什么是检查性异常?
答:检查性异常就是继承与Exception,除了RuntimeException外的子类,都是属于检查性异常.
	检查性异常需要必须处理,否则编译不通过.因为不解决,可能会引发更大的问题.如:IO,数据库连接,等如果异常不处理,就造成资源泄漏

4.检查性异常的解决方式有多少种?
答:抛出去throws和try----catch----finally
	1.throws:当异常无法处理,或者要交个上层处理,则用throws抛出去.在方法的尾部
	2.try---catch----finally:try代码块里面发生的异常,catch就会捕捉并跳到catch处理.最后执行finally

5.finally可以在try中吗?在catch中吗?为什么?
答:不可以.
	因为当try发生异常时,代码执行路程就会中断,所以会出现finally走不到的情况
	catch也是,如果try没有发生异常时,catch是不会走的,也会出现finally不执行的情况

6.说一下throw与throws的区别
答:区别在于用法.
  throws,用在方法声明后面,跟的是异常类名;可以跟多个异常类名,由逗号隔开;表示抛出异常,由该方法的调用者来处理
  throw用在方法体内,跟的是异常对象名;只能抛出一个异常对象名;表示抛出异常,有方法体内的语句处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值