最近在看JAVA教学的视频,觉得老师讲的很好,同时借用源代码还有笔记来撰写本系列博客,记录自己的学习内容,同时也供看到的人学习。
本篇将异常剩余的基础内容介绍完毕。
上一篇笔记写的时候漏掉了一个内容:常见的几种异常的介绍,这里补上。常见异常分类:checked Exception、unchecked Exception两大类。
最常见的异常类是“空指针异常(NullPointerException)”。以下是几种常见异常的处理办法:
接下来介绍异常处理方法之二:声明异常(throws语句)和异常处理方法之三:手动抛出异常(throw子句)。
下面的两个代码片是两种方法的实例代码:
import java.io.File;
import java.io.FileNotFoundException;
public class TestException {
public static void main(String[] args) {
// int i = 1/0; 编译能够通过,但是会抛出异常是程序无法运行,ArithmeticException,当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。
Computer c = null;
if(c!=null) c.start(); //对象是null,并且调用了对象方法或属性,就会造成空指针异常。
String str = "1234abcf";
Integer i = new Integer(str); //NumberFormatException
try{
Thread.sleep(3000);
}catch(Exception e){
e.printStackTrace(); //打印错误堆栈轨迹
}finally{
System.out.println("aaa");
}
//异常处理办法之三的示例代码:
File f = new File("c:/tt.txt");
if (!f.exists()) {
try {
throw new FileNotFoundException("File can't be found!");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
}
class Computer{
void start(){
System.out.println("计算机启动!");
}
}
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import jdk.nashorn.internal.ir.CatchNode;
//声明异常,把异常抛给调用他的方法,可一直往上抛,一直抛到最上层。
public class TestReadFile {
public static void main(String[] args) throws FileNotFoundException, IOException {
String str;
str = new TestReadFile().openFile();
System.out.println(str);
}
String openFile() throws FileNotFoundException,IOException {
FileReader reader = new FileReader("d:/a.txt");
char c = (char)reader.read();
System.out.println(c);
return ""+c;
}
}
这里存在一个方法重写是需要注意的一个地方:
示例代码:
<span style="font-size:14px;">import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.ParseException;
class A {
public void method() throws IOException {
}
}
class B extends A {
public void method() throws FileNotFoundException {
}
}
class C extends A {
public void method() {
}
}
// class D extends A {
//public void method() throws Exception {
//} //超过父类异常的范围,会报错!
// }
class E extends A {
public void method() throws IOException, FileNotFoundException {
}
}
class F extends A {
public void method() throws IOException, ArithmeticException {
}
}
// class G extends A {
//public void method() throws IOException, ParseException {
//ParseException超出了父类异常的范围。
//}
// }
</span>
最后介绍的内容是自定义异常:
自定义异常主要是继承现有的异常类来编写一个自己定义的子类,加上两个构造器,下面是实例代码:
<span style="font-size:14px;">public class MyException extends Exception {
public MyException(){
}
public MyException(String message){
super(message); //仿照JDK里面的源码写的
}
}
class TestMyException{
void test()throws MyException{
///
}
public static void main(String[] args) {
try {
new TestMyException().test(); //new一个这个类的对象,然后调用会抛出异常的方法。最后用try—catch来处理
} catch (MyException e) {
e.printStackTrace();
}
}
}
</span>
下面是关于异常的总结:
(上述第3点的意思是要先处理子类的异常再去处理父类的异常,否则会发生覆盖,使得子类的异常始终得不到解决)