java异常介绍
来源:互联网 发布:mac回到桌面快捷键 编辑:程序博客网 时间:2024/05/18 01:20
java异常的层次结构是Throwable接口下有2个子类error和exception。error异常是jvm抛出来的程序员用程序解决不了的异常。向OutOfMemeory内存溢出异常。
exception分为运行时异常(runtimeexception)和非运行时异常。
首先先讲运行时异常,所谓运行时异常就是在程序运行的过程中产生的异常。这种异常编译器是检查不到的需要程序员自己注意。比如空指针异常和数组越界异常接下来举个列子说明下:
public class Test4 {public static void main(String[] args) throws IOException {String s = null;System.out.println(s.length());}}
这段代码在编译的时候没有问题编译器不会报错,但是在运行的时候由于s=null,而null没有length方法所以当null调用length方法的时候会报空指针异常。
处理异常有2种方式第一种就是用try....catch....finally来进行扑捉,try...catch是必须有的 catch可以有多个 至少有一个 而finally可有可无。也可以往外抛由方法的调用者来处理该异常。不过如果最终不用try..catch来扑捉的话程序会因为抛出来的异常而全体崩溃,如果用try...catch来处理后的话那么当有异常的时候程序只会步执行try中碰到异常后面的代码而try...catch外面的代码还能执行。举个列子来说
public class Test4 {public static void main(String[] args) throws FileNotFoundException{InputStream is = new FileInputStream(new File("123"));System.out.println("test");}}
当然我们这个文件是步存在的连最基本的文件格式都是错误的。。当运行的时候会发现异常后面的test没有打印出来。因为没有扑捉异常而是抛给了main线程导致整个程序都崩溃了。
接下来我们看下try..catch处理过的程序
public class Test4 {public static void main(String[] args){try {InputStream is = new FileInputStream(new File("123"));System.out.println("try");} catch (FileNotFoundException e) {System.out.println("catch");e.printStackTrace();}System.out.println("test");}}
程序运行的结果是打印catch,打印错误信息,最后我们会发现try..catch外面的test也打印出来了。这说明如果异常由try...catch扑捉后只有在try中抛异常的代码后来的程序(比如上面程序中打印try没有打印)不执行外面的代码还会执行(比如外面的天test还是打印的),这样就保证了程序没有完全崩溃还是继续往下执行。。
这里插一句往外抛异常的目的一是让方法的调用者来处理该异常,二是可以通知编译器来检查方法的调用者是否处理了该异常(就是非运行时异常)。比如我们在写程序的时候有的时候编译器会提示我们有异常没处理(非运行时异常),编译器怎么知道我们没有处理异常是因为我们调用jdk的那个方法抛出了异常比如:
public class Test4 {public static void main(String[] args){InputStream is = new FileInputStream(new File("123"));System.out.println("try");}}
会发现 new FileInputStream(new File("123"));提示要跑异常我们看下这个构造器的源码会发现
public FileInputStream(File file) throws FileNotFoundException {
源码构造器抛出了异常通知了编辑器来检查构造器是否有处理异常。。。。。
最后讲一下try..catch...finally 这里想要突出的是不管有没有异常finally语句中的代码是一定会执行的。finally语句可以用来关闭一些资源比如io和数据库连接这里就不举列子了。
这里想要说的一种情况是:举个列子
package com.djk.test;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;public class Test4 {public static void main(String[] args){System.out.println(Innerss.getTest());}}class Innerss{@SuppressWarnings("finally")public static String getTest(){try {String s = null;return s.length()+"";} catch (Exception e) {System.out.println(e);return "catch";}finally{return "finally";}}}
这段代码会发生异常然后到catch语句中这是会发现catch中进行了return 。那么retrun后finally中的语句还会执行吗?答案是会的 所以最终返回的其实是finally字符串。这里想要说的是有时候当遇到一个方法有返回值的时候,里面有try..catch..finally语句尽管在try或catch中已经retrun不过最后还是会执行finally句最终返回finally中的return。不过这样做意义不大。。。呵呵异常就讲到这吧 ,如果哪里讲的不对的会希望朋友们可以帮我指出来 谢谢。。。。。。。
- java异常机制介绍
- java异常介绍
- Java的异常介绍
- java异常介绍
- java异常介绍
- java异常体系介绍
- Java异常介绍
- Java 异常 介绍
- Java异常介绍
- Java 异常介绍
- Java异常处理及异常机制介绍
- Java异常处理及异常机制介绍
- Java异常处理及异常机制介绍
- Java异常处理及异常机制介绍
- Java异常体系介绍及自定义异常
- 0016 Java异常介绍【基础】
- Java中异常的介绍
- Java异常的介绍及处理
- asp.net mvc3 结合jquery.pagination.js 实现分页
- 加密过的PHP文件的解密算法(收藏)
- 晶晶实验一_插入时寻找空闲块的步骤篇(ASSM表空间)
- 浅析 Android recovery mode
- Spring+hibernate+struts2+easyui基本权限管理框架
- java异常介绍
- 适配器 and 组合模式——结构性模式之一
- .net中用户控件与页面交互的方法
- Myeclipse中修改JSP模板
- AJAX在ASP.NET中的应用(二)——Jquery封装的AJAX
- windows7---库
- 如何成为一名python高手
- Java中keytool的使用总结
- poj 2387-Til the Cows Come Home-dijkstra