当我们编写完一段代码后运行的时候几乎所有人都遇到过这种情况:逻
辑上没有错,语法上也没有错,但运行的时候就会出现几行甚至几十行红色的文
字告诉你出现了异常,这里的异常就是我们预料之外的事情。
java中关于异常的关键字有五个:
throw
throws
try
catch
finally
从字面意思上来看呢throws和throw都是抛出的意思,也就是说调用某
个方法的时候如果出现了异常并且是用throw或throws处理的话,该方法就把异
常抛给调用它的方法,如果没有该方法没有被其他方法调用,就跑给JVM处理。
不同的地方在于throws是把已经存在的异常抛给调用者去处理,而throw是新建
一个异常对象平抛给调用者。
其中try catch要连在一起用,finally必须接在try catch 后面用。
try{}catch{}finally{}连在一起用的时候try用来捕获{}中的异常,catch是处
理try捕获的异常,finally表示不管有没有执行try{}catch{}语句,都要执行,
finally后面的代码。
关于try{}catch{}finally{}的具体用法请看如下代码:
package cn.tan.lesson2;
import java.io.File;
import java.io.IOException;
/**
* 异常的测试类
*
* @author */
public class ExceptionTest {
/**
* 主函数
* @throws IOException
*/
public static void main(String[] args) {
ExceptionTest et = new ExceptionTest();
// 在sample目录下没有一个test目录
et.createFile("test//abc.txt");
}
/**
* 创建一个文件
* @throws IOException
*
* @throws Exception
*/
public void createFile(String fileName) {
// 实例化一个File对象
File file = new File(fileName);
try {
// 开始创建文件
file.createNewFile();
System.out.println("文件创建成功!");
} catch (IOException e) {
// 打印异常的信息
System.out.println("toString:" + e.toString());
System.out.println("getMessage:" + e.getMessage());
e.printStackTrace();
} finally {
System.out.println("执行了finally中的代码");
}
}
}
既然程序出现了异常,我们如何让才能知道程序究竟什么地方出现异常呢?关于
打印异常的方法,java中提供了三种:
e.toString();//异常类以及错误的信息
e.getMessage();//错误的信息
e.printStackTrace();//异常类、错误的信息和所产生错误的行,上段代码的输出结果就是:
toString:java.io.IOException: 系统找不到指定的路径。
getMessage:系统找不到指定的路径。
执行了finally中的代码
java.io.IOException: 系统找不到指定的路径。
at java.io.WinNTFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:883)
at cn.tan.lesson2.ExceptionTest.createFile(ExceptionTest.java:34)
at cn.tan.lesson2.ExceptionTest.main(ExceptionTest.java:20)
关于throws和throw的用法,就是在定义方法的时候要抛出异常,比如还是上面的两个方法,用throws就应该向下面这样定义:
public static void main(String[] args) throws IOException {
ExceptionTest et = new ExceptionTest();
// 在sample目录下没有一个test目录
et.createFile("test//abc.txt");
}
public void createFile(String fileName) throws IOException { // 实例化一个File对象
File file = new File(fileName);
// 开始创建文件
file.createNewFile();
System.out.println("文件创建成功!");
}
最开始接触java的时候看着打印出来的一行行异常信息第一反应就是头大了,其实并不是那样,根据自己写的程序的调用脉络一步一步往回找,会发现所有的红色字体都指向了一行代码!