当我们编写完一段代码后运行的时候几乎所有人都遇到过这种情况:逻
辑上没有错,语法上也没有错,但运行的时候就会出现几行甚至几十行红色的文
字告诉你出现了异常,这里的异常就是我们预料之外的事情。
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的时候看着打印出来的一行行异常信息第一反应就是头大了,其实并不是那样,根据自己写的程序的调用脉络一步一步往回找,会发现所有的红色字体都指向了一行代码!