异常处理/java
来源:互联网 发布:泰尔终端实验室 知乎 编辑:程序博客网 时间:2024/06/15 17:08
1.概念:程序不正常执行,在运行时出现错误。对于这种情况,程序要有相应的处理,这种处理就是异常处理。
2.常规处理异常方法,通过一个整数值来说明程序运行时出现的问题,这是通过函数的返回值来在运行函数时对结果进行判断,麻烦,而且程序异常信息不够丰富没需要进行非常多的判断。
3.java异常处理,函数定义中加上throws Exception,表示该函数有可能会丢出异常。在调用函数时,不能用获取返回值来判断,通过try和catch来接收异常,然后进行处理,在这里只是把异常的信息打印出来。
从程序上的执行流程来看,异常的处理本质就是流程的跳转,并且是带丰富信息的流程跳转,异常后面的代码不继续执行,跳转到对该异常进行处理的catch程序块中去。catch既可以在当前函数中,也可以在外部的调用该函数的函数中。
如果一个函数定义了抛出异常Exception,在调用时就要用try...catch程序块来处理。
4.函书的调用是嵌套调用的,如函数main调用函数A,函数A又调用函数B,这样的一个函数调用嵌套就称为函数调用栈。程序入口是main函数,进入main函数,在main执行打印语句后进入functionA,main函数放到一个先进后出的栈中,functionA执行打印语句后又调用functionB函数,这时functionA函数又被放到栈中,直到调用函数functionC,其执行完后从栈中取出函数B中继续执行,直到main函数被取出来,栈被清空。如果出现异常,就会通过异常的printsStackTrace把异常相关的调用栈打印出来。
5.捕获异常,异常的捕获处理通过try...catch关键字来实现,可以直接在抛出异常的函数中捕获异常,这样异常就不会被抛出到函数往外面了,在函数定义时就不用再说明会抛出异常了,因为它已经被处理了。
6.异常流转,可以在函数调用栈中的任何一个函数来处理掉这个异常。如果函数抛出异常在该函数中被接收处理掉了,就不会抛到函数外,这时在定义函数时就不需要加上throws Exception。因为该函数对于它的调用函数而言并不能接收异常。
7.异常的控制,通过throw关键字来实现抛出异常,作为一个操作,可以再任何地方,即在接受异常的程序块catch中也可以抛出异常。
8.自定义异常,Exception也是一个类,它实现了throwable接口,所以能够被抛出。它既然是类,当然可以被扩展,可以定义子类对它进行继承,这样逻辑会更清晰,对于不同的错误可以抛出不同类型的异常。
9.捕获所有异常,Catch语句可以判断捕获的异常类型,如果类型与要捕获的类型一致就执行相应的异常处理程序。通过一个catch来处理所有异常不合适,会丢失掉异常的具体类型信息,不方便对不同异常进行不同处理。
10.运行期异常,在所做的第一个程序里,运行时会抛出异常,这样的异常没有try...catch来捕获,但程序可以编译,只是运行时才出现。这种异常的父类是RuntimeException,称其为运行期异常。可以创建一个它的子类,这样就不用再在定义函数时抛出异常了。
11.finally程序块,如果某些操作在有没有异常出现都要执行,可以在异常处理块上加finally程序块,该程序块在除了系统退出以外的任何情况下都会执行。catch语句只有在出现异常的情况下才执行,而finally里面的语句是不管是否异常都会被执行。finally语句既不处理也不捕获异常。
12.error。Exception能够被抛出是因为实现了Throwable接口,这个接口有个子类error,这个子类及其子类表示一个非常严重错误,一般程序不要抛出这样的错误,这样的错误通常不要去catch,通常就表示程序发生严重错误退出。
13.总结:异常的本质就是带丰富信息的异常的流程控制。
- 【java】java异常处理
- java异常和异常处理
- Java 异常及异常处理
- java异常与异常处理
- Java异常处理-----自定义异常
- Java异常与异常处理
- java异常及异常处理
- Java 异常与异常处理
- Java异常与异常处理
- Java异常及异常处理
- Java异常处理--自定义异常
- JAVA异常之异常处理
- Java异常处理-----自行处理
- Java异常处理-----抛出处理
- Java异常处理-----抛出处理
- java异常处理
- java 异常处理分析
- java异常处理
- android项目之电子书
- C#使用Webbrowser来判断网页是否加载完毕
- NYOJ 82 迷宫寻宝(一)(BFS)
- Android的Camera架构介绍[有图]
- 为你的网站添加分享工具
- 异常处理/java
- 容器vector的入门
- 12、求1+2+…+n
- js静态页面间的传值
- windows系统下_ffmpeg编译_2011年
- 聊天室完善
- Java内存模型三
- js属性方法
- 软件测试面试题整理2 .