黑马程序员_异常
来源:互联网 发布:java中final 编辑:程序博客网 时间:2024/06/03 20:52
------- android培训、java培训、期待与您交流! ----------
异常:
是在运行时期发生的不正常情况。
在java中用类的形式对不正常情况进行了描述和封装对象。
描述不正常的情况的类,就称为异常类。
以前正常流程代码和问题处理代码相结合,
现在将正常流程代码和问题处理代码分离////提高阅读性///
实质:其实异常就是java通过面向对象的思想将问题封装成了对象.
用异常类对其进行描述。
不同的问题用不同的类进行具体的描述 ===》比如角标越界。空指针等等。
问题很多,意味着描述的类也很多。
||将其共性进行向上抽取,形成了 ==》异常体系。
||最终问题(不正常情况)就分成了两大类。
Throwable:无论是error,还是异常,问题,问题发生就应该可以抛出,让调用者知道并处理。
//该体系的特点就在于Throwable及其所有的子类都具有可抛性。
可抛性到底指的是什么呢?怎么体现可抛性呢?
其实是通过两个关键字来体现的。
throwsthrow ,凡是可以被这两个关键字所操作的类和对象都具备可抛性.
|--1,一般不可处理的----Error
特点:是由jvm抛出的严重性的问题。
这种问题发生一般不针对性处理。直接修改程序
|--2,可以处理的----Exception【主要学习】
该体系的特点:
子类的后缀名都是用其父类名作为后缀,阅读性很强 。
自定义异常:
注意:如果让一个类称为异常类,必须要继承异常体系,因为只有称为异常体系的子类才有资格具备可抛性。
才可以被两个关键字所操作,throws throw
异常的分类:
1,编译时被检测异常:
只要是Exception和其子类都是,除了特殊子类RuntimeException体系。
这种问题一旦出现,希望在编译时就进行检测,让这种问题有对应的处理方式。
这样的问题都可以针对性的处理。
2,编译时不检测异常(运行时异常):
就是Exception中的RuntimeException和其子类。
这种问题的发生,无法让功能继续,运算无法进行,更多是因为调用者的原因导致的而或者引 发了内部状态的改变导致的。
那么这种问题一般不处理,直接编译通过,在运行时,让调用者调用时的程序强制停止,让 调用者对代码进行修正。
所以自定义异常时,要么继承Exception。
要么继承RuntimeException。
throws和throw的区别:
1, throws使用在函数上。
throw使用在函数内。
2, throws抛出的是异常类,可以抛出多个,用逗号隔开。
throw抛出的是异常对象。
异常处理的捕捉形式:
这是可以对异常进行针对性处理的方式。
具体格式是:
try
{//需要被检测异常的代码。}
catch(异常类变量)//该变量用于接收发生的异常对象
{//处理异常的代码。}
finally
{//一定会被执行的代码。}
异常处理的原则:
1,函数内容如果抛出需要检测的异常:
--那么函数上必须要声明
--否则必须在函数内用try catch捕捉,否则编译失败。
2,如果调用到了声明异常的函数:要么try catch要么throws,---》否则编译失败。
3,什么时候catch,什么时候throws呢?
功能内容可以解决,用catch。
解决不了,用throws告诉调用者,由调用者解决 。
4,一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性的处理。
内部又几个需要检测的异常,就抛几个异常,抛出几个,就catch几个。
5,多个catch,父类的catch放在最下面。
6,catch内,需要定义针对性的处理方式。不要简单的定义printStackTrace,输出语句。也不要不写。
7,当捕获到的异常,本功能处理不了时,可以继续在catch中抛出。
如果该异常处理不了,但并不属于该功能出现的异常,可以将异常转换后,再抛出和该功能相 关的异常。或者异常可以处理,当需要将异常产生的和本功能相关的问题提供出去,让调用者 知道,并处理。也可以将捕获异常处理后,转换新的异常。
Try{Throw new AException();}
Catch(AException e){
Throw e;}
Try{Throw new AException();}
Catch(AException e){
//对AException处理。
Throw new BException();
}//汇款例子
异常的注意事项:
1, 子类在覆盖父类方法时,父类的方法如果抛出了异常,
那么子类的方法只能抛出父类的异常或者该异常的子类。(流程可以看出:对象不一致。)
2, 如果父类抛出多个异常,那么子类只能抛出父类异常的子集。(子类异常少于父类异常)
注意:如果父类的方法没有抛出异常,那么子类覆盖时绝对不能抛,就只能try.(可以参想上面,无对象)
记忆模型:
------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------
毕老师用电脑上课:
|--问题领域中涉及两个对象:
|--毕老师----电脑。
|--分析其中的问题:
|--比如电脑蓝屏啦----冒烟啦
class LanPingException extends Exception{
LanPingException(Stringmsg){
super(msg);
}
}
class MaoYanException extends Exception{
MaoYanException(Stringmsg){
super(msg);
}
}
class NoPlanException extends Exception{
NoPlanException(Stringmsg){
super(msg);
}
}
class Computer{
privateint state = 2;
publicvoid run()throws LanPingException,MaoYanException{
if(state==1)
thrownew LanPingException("电脑蓝屏啦!!");
if(state==2)
thrownew MaoYanException("电脑冒烟啦!!");
System.out.println("电脑运行");
}
publicvoid reset(){
state = 0;
System.out.println("电脑重启");
}
}
class Teacher{
privateString name;
privateComputer comp;
Teacher(Stringname){
this.name = name;
comp = new Computer();
}
publicvoid prelect()throws NoPlanException{
try{
comp.run();
System.out.println(name+"讲课");
}
catch (LanPingException e){
System.out.println(e.toString());
comp.reset();
prelect();
}
catch (MaoYanException e){
System.out.println(e.toString());
test();
//可以对电脑进行维修。
// throwe;
thrownew NoPlanException("课时进度无法完成,原因:"+e.getMessage());
}
}
publicvoid test(){
System.out.println("大家练习");
}
}
class ExceptionTest {
publicstatic void main(String[] args){
Teacher t = new Teacher("毕老师");
try{
t.prelect();
}
catch (NoPlanException e){
System.out.println(e.toString()+"......");
System.out.println("换人");
}
}
}
class NoAddException extends Exception
{}
void addData(Data d)throws NoAddException{
连接数据库
try{
添加数据。出现异常 SQLException();
}
catch(SQLExceptione){
//处理代码。
throw new NoAddException();
}
fianlly{
关闭数据库。
}
}
Fianlly:
格式:fianlly{}
其中语句是必须处理的,(除了关闭jvm==>System.exit(0);)
一般应用于关闭数据库连接使用或资源。
------- android培训、java培训、期待与您交流! ----------
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 配置篇------lvs+keepalive搭建高可用的负载均衡
- 在MyEclipse中配置android开发环境
- NYOJ-判断三角形
- 接上 详细配置
- LAMP环境搭建--学习笔记
- 黑马程序员_异常
- SequenceInputStream,ObjectInput/OutputStream
- 查找给定区间内第K大的元素
- codeforces-#463B. Caisa and Pylons
- Android源码 简洁的随手记事项目源码
- NYOJ-第三大
- 二叉树先序中序后序遍历思路编程
- NYOJ-小明的难题
- My Note on Algorithmn