jvm调用默认的异常处理机制printStackTrace办法
欲了解更多异常处理。问题
捕获异常代码块出现继承关系 应该把被继承的异常放在子类异常块的后面
throw 和 throws的差别
throw是是用在函数上,而throws是使用在函数内
throw后面跟的是异常对象,而throws跟的是异常类能够 多个
欲了解更多异常处理。问题
捕获异常代码块出现继承关系 应该把被继承的异常放在子类异常块的后面
throw 和 throws的差别
throw是是用在函数上,而throws是使用在函数内
throw后面跟的是异常对象,而throws跟的是异常类能够 多个
对异常的分类:
1.编译时被检測到的异常。
(值得去处理的异常,或者是希望得到调用者处理,并不影响运算意向)
2.编译时不被检測到的异常(执行时异常RuntimeException以及他的子类)
(不值得去处理的。交给jvm去处理。出现这样的异常假如处理的会影藏异常影响了
运算意向,eg :角标越界、内存溢出、除0运算、空指针)
1.编译时被检測到的异常。
(值得去处理的异常,或者是希望得到调用者处理,并不影响运算意向)
2.编译时不被检測到的异常(执行时异常RuntimeException以及他的子类)
(不值得去处理的。交给jvm去处理。出现这样的异常假如处理的会影藏异常影响了
运算意向,eg :角标越界、内存溢出、除0运算、空指针)
class Demo{
public void method(){
try{
throw new Exception();//此时的异常并没有处理,所以要进行抛出或catch否则编译出错
}finally{
//由于finally不是处理异常的而是无论异常怎么样都要运行的代码
}
}
}
1. 在继承时。子类不能抛出比父类中很多其它的异常(不包含父类异常和父类异常的子异常)
2. 假设父类方法抛出多个异常。那么子类仅仅能抛出父类异常的子集。
3. 假设父类或接口的方法中没有异常,那么子类覆盖方法时,也不能抛仅仅能自行处理。
class Demo
{
public static void main(String[] args)
{
try{
Fu f = new Zi();
f.method1();
}catch(AException e){
/*
仅仅能处理已知的异常。对于未知的异常不能处理,
由于在代码编写时,仅仅会处理父类的异常
对于未知的子类中存在的异常在早先写好的异常处理的代码是不包含处理子类的异常。
*/
}
}
}
class Fu{
public void method1() throws AException{
throw new AException();
}
}
class Zi{
public void method1() throws CException,BException{
throw new BException();
}
}
Exception
AException
CException
BException
{
public static void main(String[] args)
{
try{
Fu f = new Zi();
f.method1();
}catch(AException e){
/*
仅仅能处理已知的异常。对于未知的异常不能处理,
由于在代码编写时,仅仅会处理父类的异常
对于未知的子类中存在的异常在早先写好的异常处理的代码是不包含处理子类的异常。
*/
}
}
}
class Fu{
public void method1() throws AException{
throw new AException();
}
}
class Zi{
public void method1() throws CException,BException{
throw new BException();
}
}
Exception
AException
CException
BException
总结:
异常:
是什么?是对问题的描写叙述。将问题进行对象的封装。
异常体系结构:
Throwable
|--Error
|--Exception
|--RuntimeException
异常体系的特点:异常体系中的全部类以及建立的对象都具有可抛性。
也就是说能够被throw 和 throwskeyword所操作。
仅仅有异常体系具备这个特点。
throw 和 throws的差别:
throws是定义在函数上。用于抛出异常类,可一次性抛出多个异常。
throw是定义在函数内,用于抛出异常对象。
当函数内容有throw抛出异常对象,并未进行try处理。必需要在函数上声明,否则会编译失败
注意:RuntimeException除外。也就是说。函数内假设抛出了RuntimeEception异常,
能够不用声明。
假设函数声明了异常。调用者须要进行处理。处理方法:try 或者 throws
异常有两种:
编译时被检測的异常
该编译时。假设没有处理。编译会失败,该异常被标识,代表这能够被处理
执行时异常
编译时,不须要处理。编译不会进行检查
该异常的发生。建议不处理,让程序停止。对代码进行修正
注意:
finally中定义的关闭资源的代码,由于资源必须释放。
可是System.exit(0);finally中的代码不会被运行。
自己定义异常:
定义继承exception或者runtimeexception
1.为了让该自己定义类具备可抛性。
2.让该类具备操作异常的共性方法。
当要定义自己定义异常的信息时。能够适应父类已经定义好的功能。
异常信息传递给父类的构造方法。
依照java的面向对象的思想,将程序中出现的特有问题进行封装 。
异常的优点:
1. 将问题进行了封装
2. 将正常流程代码和问题处理代码分离。方便阅读。
异常的处理原则:
1. 处理方式有两种: try 和 catch
2. 调用到排除异常的功能时。抛出多少个异常,就去处理几个
3. 多个catch,父类的catch被放到继承该异常的以下。
4. catch内。须要定义针对性的处理方式。不要简单的定义printStackTrace
5.当捕获的异常,本功能处理不了时,能够继续在catch中抛出。
6. 假设该异常处理不了,但并不属于该功能的相关异常。
能够将异常转化后,再抛出和该功能相关的异常。
7. 或者异常能够处理,当须要将异常产生的和本功能相关的问题提供出去。
当调用者知道,并处理。也能够将捕获的异常处理后,转换为新异常。抛出
eg: 汇款的样例 先处理,再告知调用者(通过异常传递信息)
异常的注意事项:
1.在子父类覆盖时:
1. 子类抛出的异常必须是父类异常的子类或者子集。
2. 假设父类或者接口没有异常抛出时,子类覆盖出现异常必须自行处理(try)
编译 javac -d 编译路径(后存放的位置) 文件.java
运行 java 包名.文件
jar.exe 打jar包
jar -cvfm classse.jar(归档文件名称) 文件1 文件2 ..
版权声明:本文博主原创文章。博客,未经同意不得转载。