黑马程序员--java基础--异常
2015-08-04 21:01
387 查看
-----------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{
执行
4000
语句;
}
只要虚拟机还在运行,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
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{
执行
4000
语句;
}
只要虚拟机还在运行,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
相关文章推荐
- 剑指Offer面试题24(Java版):二叉搜索树的后序遍历序列
- Java后台-面试问题汇总(转载)
- 100分程序员的8个习惯
- IOS 面试题总结
- 黑马程序员——17,集合,TreeSet,二叉树,泛型
- 黑马程序员----IO基础知识1
- 程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大经典原创系列集锦与总结
- 互联网思维下的码农新生态
- GIF演示排序算法
- [转载]100分程序员的8个习惯
- iOS面试题
- [.Net码农]Type.GetProperties 方法-获取实体类 变量
- 黑马程序员-设计模式
- Java SE 面试题
- Java线程面试题 Top 50
- 程序员笔记之设计(一)
- 初进职场我们该怎么做到最好
- 算法面试题-- 连接树的所有兄弟节点
- Hibernate 学习笔记
- 《程序员面试宝典》--栈和堆,局部变量和全局变量