本文共 5760 字,大约阅读时间需要 19 分钟。
异常时运行时错误,异常处理使得程序可以处理运行时错误,并且继续通常的执行。在程序运行过程中,如果JVM检测出一个不可能执行的操作,就会出现运行时错误。运行时错误会作为异常抛出,异常就是一种对象,表示阻止正常运行的错误或者情况。如果异常没有被处理,那么程序将会非正常终止。
异常是从方法抛出的,方法的调用者可以捕获以及处理该异常。一个浮点数除以0是不会产生异常的。
java.lang.Throwable。Error、Exception和RuntimeException有时候容易引起混淆。这三种类都是异常,这里讨论的错误都发生在运行时。Throwable类是所有异常类的根,所有的Java异常类都直接或间接地继承自Throwable。可以通过继承Exception或者Error地子类来创建自己的异常。系统错误由Java虚拟机抛出的,用Error类表示,Error类描述的是内部系统错误。
异常是用Exception类表示的,它描述的是由你的程序和外部环境所引起的错误,这些错误能被程序捕获和处理。
运行时异常是用RuntimeException类表示的,它描述的是程序设计错误,运行时异常通常表明了编程错误。
RuntimeException类和Error类以及它们的子类都称为免检异常。try-catch块处理它们,或者在方法头进行声明。try-catch块,Java语言不强制要求编写代码捕获或声明免检异常。声明异常
每个方法都必须声明它可能抛出的必检异常的类型,这称为声明异常。关键字throws用于声明异常。如果方法可能抛出多个异常,就可以在关键字throws后添加一个用逗号分隔的异常列表。如果父类中的方法没有声明异常,那么就不能在子类中对其重写时声明异常。抛出异常
检测到错误的程序可以创建一个合适的异常类型的实例并抛出它,这称为抛出一个异常。捕获异常
try-catch语句块是用来捕获异常的。如果在执行try块的过程中没有出现异常,则跳过catch子句。如果try块中的某条语句抛出一个异常,Java就会跳过try块中剩余的语句,然后开始处理这个异常的代码。异常处理器的代码称为异常处理器。从异常中获取信息
使用Throwable类中的方法可以获取异常的详细信息。例如,getMessage()方法可以获取异常对象的信息,getStackTrace()方法可以获取异常的堆栈跟踪信息。finally子句
无论异常是否发生,finally子句总会被执行。finally子句可以用来执行一些必须在异常发生或不发生的情况下都要执行的代码。try块包含正常情况下执行的代码。catch块中包含异常情况下执行的代码。如果异常处理器不能处理一个异常,或者只是简单地希望它的调用者注意到该异常,Java允许该异常处理器重新抛出该异常。
链式异常是指一个异常被另一个异常包裹起来,形成一个链条。例如:
try { method1();} catch (Exception ex) { throw new Exception("New info from method1", ex);} 在上面的示例中,method1()抛出了一个异常,这个异常被method1()捕获后又抛出了一个新的异常。新的异常会包含原来的异常作为其原因。
可以通过继承java.lang.Exception类来定义一个自定义异常类。例如:
package com.java;public class InvalidRadiusException extends Exception { private double radius; public InvalidRadiusException(double radius) { super("Invalid radius" + radius); this.radius = radius; } public double getRadius() { return radius; }} File类提供了对文件和目录的操作。可以通过File类获取文件的属性,或者对文件进行改名和删除等操作。注意:File类不能直接读写文件内容。
PrintWriter写数据package com.java;import java.io.File;import java.io.IOException;import java.io.PrintWriter;public class WriteDate { public static void main(String[] args) throws IOException { File file = new File("scores.txt"); if (file.exists()) { System.out.println("File already exists"); System.exit(1); } try (PrintWriter output = new PrintWriter(file)) { output.print("John T Smith "); output.println(90); output.print("Eric K Jones "); output.println(85); output.close(); } }} try-with-resources自动关闭文件package com.java;import java.io.File;import java.io.PrintWriter;public class WriteDataWithAutoClose { public static void main(String[] args) throws Exception { File file = new File("myGirlFriend.txt"); if (file.exists()) { System.out.println("File already exists"); System.exit(0); } try (PrintWriter output = new PrintWriter(file)) { output.print("Name: "); output.println("LiNa Wei"); output.println("Gender: Female"); output.println("Height: 162cm"); output.println("Weight: 50.5kg"); } }} Scanner读取数据package com.java;import java.io.File;import java.util.Scanner;public class ReadData { public static void main(String[] args) throws Exception { File file = new File("scores.txt"); try (Scanner input = new Scanner(file)) { while (input.hasNext()) { String firstName = input.next(); String mi = input.next(); String lastName = input.next(); int score = input.nextInt(); System.out.println(firstName + " " + mi + " " + lastName + " " + score); } } }} 可以通过URL类从Web上读取数据。例如:
package com.java;import java.io.IOException;import java.net.MalformedURLException;import java.net.URL;import java.util.Scanner;public class ReadFileFromURL { public static void main(String[] args) throws Exception { System.out.print("Enter a URL: "); String urlStr = new Scanner(System.in).next(); try { URL url = new URL(urlStr); int count = 0; try (Scanner input = new Scanner(url.openStream())) { while (input.hasNext()) { String line = input.nextLine(); count += line.length(); } System.out.println("The file size is " + count + " characters"); } } catch (MalformedURLException ex) { System.out.println("Invalid URL"); } catch (IOException ex) { System.out.println("I/O Errors: no such file"); } }} Web爬虫是一种用于自动遍历Web上的文档的程序。以下是一个简单的Web爬虫算法:
throws关键字。throw语句。RuntimeException和Error类及其子类表示。使用异常处理的优势
异常处理允许方法向其调用方抛出异常,调用方可以处理异常。如果没有异常处理机制,被调用的方法必须自己处理异常或终止程序。声明异常的目的是什么,怎么声明,在哪里声明,可以声明多个么
声明异常的目的是告诉Java运行时系统会出什么问题。在方法声明中使用throws关键字声明异常。可以声明多个异常用,隔开。什么是必检异常,什么是免检异常
必检异常必须在方法声明中明确声明,必须在try-catch块中被捕获。免检异常不需要被声明,也不需要被捕获。Java中只有RuntimeException和Error免检类及其子类免检。可以使用File类进行I/O么?创建File对象会在磁盘上创建一个文件么?
File类用于获取文件属性和操作文件,但无法执行I/O操作。如何创建一个Scanner对象以从一个URL读取的文本
URL类,然后使用scanner读取URL流中的数据。转载地址:http://umzqz.baihongyu.com/