Java语言----异常专栏

来源:互联网 发布:森马价格知乎 编辑:程序博客网 时间:2024/05/21 18:40
一、异常的相关概念
1、异常就是程序在【运行】时期出现的不正常情况。
2、讲问题分为两种:一种是严重的,一种是非严重的。
对于严重的:java用Error类对其进行描述,
对于error,一般不编写针对性的代码对其进行处理。
对于非严重的:java用Exception类对其进行描述,
对于exception,可以编写针对性的代码对其进行处理。
3、byte[] arr = new byte[1024];//1K
byte[] arr = new byte[1024*1024];//1M
byte[] arr = new byte[1024*1024*6000];
//Exception in thread "main" java.lang.OutOfMemory【Error】: Java heap space
4、throwable----error
-----exception
二、异常的处理
1、格式:
try{
//需要被检测的代码块
}
catch(异常类 变量){
//处理异常的代码(处理方式)
}
finally{
//一定会执行的语句
}
2、主函数(main方法)的调用者为JVM(虚拟机),当产生一个异常对象没有进行try进行捕获处理时,反馈给div的调用者main,main再反馈给JVM,JVM进行默认调用处理,调用异常类。
3、对捕获到的异常进行常见方法的操作。
String getMessage();//获取异常的信息。
4、throws关键字。
便于提高安全性,让调用处进行处理,不处理编译失败。
5、对多异常的处理。
1)声明异常时,建议声明更为具体的异常,这样处理的可以更具体。
2)对方声明几个异常,就对应有几个catch块,不要定义多余的catch块。
如果多个catch块中的异常出现继承关系时,父类异常catch块放在最下面。
****建议在进行catch处理时,catch中一定要定义具体的处理方式。
不要简单定义一句e.printStack(),也不要简单的就输出一句输出语句。
三、自定义异常
1、因为项目中会出现一些特有的问题,而这些问题并没有被java所描述并封装对象,所以对于这些特有的问题,可以按照java的对问题的封装思想将特有的问题,进行自定义的异常封装。
当在函数内部出现了throw抛出异常对象,那么就必须要给相应的处理动作。
要么在内部try、catch处理,要么在函数上声明让调用者处理。
一般情况下,函数内出现异常,函数上需要声明。
发现打印的结果中只有异常的名称,却没有异常的信息。因为自定义的异常并未定义信息。
如何定义异常信息呢?
因为父类中都已经将异常信息的操作都完成了,所以子类只要在构造时,将异常信息传递给通过super语句传递给父类,那么就可以直接通过getMessage()方法获取自定义的异常信息。
自定义异常:必须是自定义类继承Exception,
继承exception原因:异常类和异常对象都被抛出,他们都具备可抛性,这个可抛性,这个可抛性是throwable这个体系中独有的特点。
只有这个体系中的类和对象才可以被throws和throw操作。
2、throw和throws的区别。
throws使用在函数上,throw使用在函数内。
throws后面的异常可以跟多个,用逗号隔开,throw和面跟的是异常对象。
四、异常中比较特殊的一个异常:RuntimeException(运行时异常)
1、如果在函数内抛出该异常,函数上不用声明,编译一样可以通过。
2、如果在函数上声明了该异常,调用者可以不用进行处理。
之所以不用再函数声明是因为不希望调用者处理。
当该异常发生希望程序停止,因为在运行时,出现了无法继续运算的情况,希望程序停止后,程序员能对其进行代码修正。
3、自定义异常时:如果该异常的发生,程序无法再继续进行运算,就让自定义异常 继承RuntimeException类。
五、异常的另一种分类。
1、对于异常分两种:
1)编译时被检测的异常
2)编译时不被检测的异常(运行时异常RuntimeException及其子类)
六、异常小实例
package cn.com.czf.exception;
/*
* 陈老师用电脑上课
* 开始思考上课中出现的问题
* 比如:
* 电脑蓝屏
* 电脑冒烟
* 要对问题进行描述,封装成对象。
* 可是当冒烟发生后,出现讲课进度无法继续。
* 出现了讲师的问题:课时计划无法完成。
*/
class Computer{
private String name;//联想,苹果,戴尔,华硕
private int state = 3;
public void run() throws LanPingException,MaoYanException
{
if(state==2){
throw new LanPingException("蓝屏了");
}
if(state==3){
throw new MaoYanException("电脑冒烟了");
}
System.out.println("电脑运行");
}
public void reset(){
state = 1;
System.out.println("电脑重启");
}
}

class LanPingException extends Exception{
LanPingException(String message){
super(message);
}
}

class MaoYanException extends Exception{
MaoYanException(String message){
super(message);
}
}

class NoPlanException extends Exception{
NoPlanException(String message){
super(message);
}
}

class Teacher{
private String name;
private Computer cmpt;
public Teacher(String name){
this.name = name;
cmpt = new Computer();
}
public void prelect() throws NoPlanException{
try {
cmpt.run();
} catch (LanPingException e) {
cmpt.reset();
} catch (MaoYanException e) {
test();
throw new NoPlanException("课时无法继续"+e.getMessage());
}
System.out.println("欢迎"+name+"老师上课");
}
public void test(){
System.out.println("做练习");
}
}

public class ExceptionExample {
public static void main(String[] args) {
Teacher t = new Teacher("陈足福");
try {
t.prelect();
} catch (NoPlanException e) {
System.out.println(e.toString());
System.out.println("换电脑或者放假");
}
}
}
1 0