Java面向对象--异常(二)
来源:互联网 发布:华为mate9网络频段 编辑:程序博客网 时间:2024/06/05 09:18
在编写方法时不必将所有可能的异常抛出,在以下四种情况时则应抛出异常。
1.调用一个抛出已经检查异常的方法,如IO流中的输入输出方法,后缀为Stream方法。
2.程序运行过程中发现的错误,并且利用throw语句抛出一个已检查的异常。
3.程序出现错误,例如 a[-1]=0会抛出一个ArrayIndexOutofBoundsException。
4.Java虚拟机和运行时库出现的异常。
=============================================
一,抛出异常。
1.声明已检测异常。
遇到无法处理的情况,java的方法会抛出一个异常。声明检测异常是发生在编译阶段,主要是为了告诉编译器有可能发生什么错误。
对于那些可能被人使用的Java方法,就应该根据异常规范(exception specification),在方法的首部生命这个方法可能抛出的异常:
class MyExceptionDemo{....... public Image loadImage(String s) throws IOexception{ ........ }}
//如果一个方法有可能有多个已检测异常,那么就必须在方法的首部列出所有的异常类。每个异常类之间用逗号隔开。如下:class MyAnimation{public Image loadImage(String s) throws FileNotFoundException,EOFException{..........}}// 但是不需要声明Java的内部错误,即从Error中继承的错误,任何程序代码都可以抛出Error异常,我们不能对其进行控制。同样,也不应该声明从RuntimeException继承的//那些未检查异常class MyAnimation{....void drawImage(int i) throws ArrayIndexOutOfBoundsException //It's bad style{}}如:IO流的IO异常在编写代码时就应抛出。
import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class IOCopyTest {public static void main(String[] args) throws IOException {//1.读取一个已有的文本文件。使用字符读取流和文件相关联。FileReader fr= new FileReader("IO流_2.txt");//2.创建一个目的,用于存储读到的数据。FileWriter fw =new FileWriter("copytext_1.txt"); //3.频繁的读写操作。int ch=0; while((ch=fr.read())!=-1){fw.write(ch);}//4.关闭流资源fw.close();fr.close();}}
2.抛出异常的方法。thtow new EOFException();
或 EOFException e = new EOFException(); throw e;
效果如下:
String readData(Scanner in) throws EOFException{... while(...) { if(!in.hasNext())//EOF encounted { if(n<len) throw new EFOException; } } return s;}对于一个已经存在的异常类,将其抛出非常容易.在这种情况下"(1). 找到一个合适的异常类
(2). 创建这个类的一个对象
(3). 将对象抛出
一旦方法抛出异常,这个方法就不能再返回调用者。
3.throws 和throw的区别。
1,throws使用在函数上。
throw使用在函数内。
2,throws抛出的是异常类,可以抛出多个,用逗号隔开。
throw抛出的是异常对象。
二.捕获异常有些代码只需要抛出异常就可以了,但有些代码必须捕获异常
异常处理的捕捉形式:
这是可以对异常进行针对性处理的方式。
具体格式是:try{//需要被检测异常的代码。}catch(异常类 变量)//该变量用于接收发生的异常对象{//处理异常的代码。}finally{//一定会被执行的代码。}如果在try语句块中的任何代码抛出了一个在catch子句中说明的异常类,那么1.程序将跳过try语句块的其余代码。
2.程序将执行catch子句中的处理器代码.
如果在try语句块中没有抛出任何异常,那么程序将跳过catch子句。
如果方法中的任何代码抛出了一个在catch子句中没有声明的异常类型,那么这个方法就会立刻退出。例:
public coid read(String filename){ try{ InputStream in = new FileInputStream(filename); int len; while((len = in.read()!=-1){ process input } } catch(IOException e){ e.priontStackTrace(); }}通常将异常传递给调用者,如果read方法出现了错误,最好的办法就是将read方法去进行调试,只需要将IOException抛出即可。public void read(String filename) throws IOException{ InputStream in = new FileInputStream(filename); int len; while((len=in.read())!=-1){ process input }}
在一个try语句中可以捕获多个异常类型,并对不同类型的异常做出不同的处理,可以按照下列方式为每个异常类型使用一个catch子句。
try{code that might throw exception}catch(Exception e){ println e;}catch(Exception e2){ println e2;}catch(Exception e3){ println e3;}finally子句可以不用在trycatch中编写,但是如果写了就一定会执行try catch语句
try catch finally 代码块组合特点:
1,
try catch finally
2,
try catch(多个)当没有必要资源需要释放时,可以不用定义finally。
3,
try finally 异常无法直接catch处理,但是资源需要关闭。
void show()throws Exception
{
try
{
//开启资源。
throw new Exception();
}
finally
{
//关闭资源。
}三。自定义异常
自定义异常继承自Exception和RuntiemeExceotion
public class MyException extends Exception{ public MyException(String msg) { super(msg); }}例:public class MyException extends Exception{ public MyException(String msg) { super(msg); } publicstatic int Multiply(int n,int m) throws MyException{int re;re =n*m;if(re>1000)throw new MyException("结果re="+re+"超过了"+"1000");elseSystem.out.println("乘数:"+re);return re; } public static void main(String[] args){try{Multiply(500,100);}catch(MyException e){System.out.println(e.toString());}}}
四。总结:所有异常都是由Throwable继承而来,而Throwable往下可以分为Error和Exception。所有可以抛出的异常也都是Exception的子类。记清楚throws和throw之间的区别,以及trycatch语句块的用法。
- Java面向对象--异常(二)
- Java面向对象 异常
- JAVA面向对象-异常
- java面向对象(二)
- java面向对象(二)
- Java 面向对象(二)
- java-面向对象(二)
- Java面向对象(二)
- Java面向对象(二)
- Java面向对象(二)
- java面向对象(二)
- Java面向对象(二)
- Java面向对象(二)
- Java面向对象(二)
- java面向对象复习总结(异常)
- Java面向对象(二)
- java面向对象(二)
- Java面向对象(二)
- This software comes from a 3rd party and may contain non-free components的解决方法
- 无符号整数的bitmap
- 杂记
- 最长公共子串
- UE4学习笔记18th:Playing In Editor
- Java面向对象--异常(二)
- 开学前
- Java实现冒泡排序
- Shell脚本之条件选择与循环
- 数据结构 树 层次遍历二叉树 C语言版
- springboot 静态资源处理
- C++文件操作——获取当前工作路径的几种方法
- 广播机制
- Maven知识总结