黑马程序员--java基础--异常

来源:互联网 发布:陈星网络情缘酷我音乐 编辑:程序博客网 时间:2024/05/16 03:54

-----------android培训java培训、java学习型技术博客、期待与您交流!------------ 

Throwable

Throwable类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。(包括Error和Exception两个子类)

编译时异常

除了RuntimeException及其子类,Exception中所有的子类都是,这种异常必须要处理,要不编译通不过

运行是异常

RuntimeException及其子类都是,这种异常不用处理,编译会通过,不过这样的程序会有安全隐患,遇到这种异常是需要改代码的

严重错误问题

用Error进行描述,这个问题发生后,一般不编写针对代码进行处理,而是要对程序进行修正.通常都是由虚拟机抛出的问题


  方法: toString()  getMessage()  printStackTrace()

举个形象的例子:骑车去旅行

  Error:走到半路上,发生山路塌陷,或者出现了泥石流,这个问题很严重,不是自己能够立马解决的。

  Exception:出门前,要看看车轮子以及车链子等是否还在

  RuntimeException:在骑车的过程中,有好路不走,偏偏要走石子路,结果车出毛病了


异常处理 的第一种方法:try catch
   |-- 书写格式

try{

需要检测异常的代码;

}catch(异常类型 变量名){

处理异常代码;

}
   |-- 异常发生后代码处理流程
     异常一旦发生,异常后面的代码不执行,程序跳转到catch,执行catch中的代码

异常处理 的第二种方法:throw throws
    |--throw 写在方法内部,后面new 异常对象, throw 方法内部手动抛出异常
    |--  throws 写在方法声明上,后面写异常类名字,throws 方法声明上标出有异常


throw和throws 的区别

throws
用在方法声明后面,跟的是异常类名
可以跟多个异常类名,用逗号隔开
表示抛出异常,由该方法的调用者来处理
throws只是表示出现异常的一种可能性,并不一定会发生这些异常
throw
用在方法体内,跟的是异常对象名
只能抛出一个异常对象名
表示抛出异常,由方法体内或方法上的语句处理

执行throw则一定抛出了某种异常  


finally代码块

格式:finally{

执行语句;

}
只要虚拟机还在运行,finally中存放的语句就必须执行,用于释放资源


小问题:如果try里面有return语句,请问finally的代码还会执行吗?如果会,请问是在return前还是return

public class Test2 {
public static void main(String[] args) {
int a =method();
System.out.println(a);
}
public static int method() {
//定义变量a,赋初值为1
int a=1;
try {
System.out.println("执行try语句");
return a++;
}
//如果先执行finally,再执行try中的return,那么返回的a应该是1,如果返回值是2,则说明先执行try中的return,再执行finally
finally {
System.out.println("执行finally语句");
return a;
}
}
}


 异常类继承中的注意事项:

子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。
如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他异常中的一部分,子类不能抛出父类没有的异常
如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws

0 0
原创粉丝点击