class ThrowsTest {
public static void main(String[] args) {
ThrowsTest t = new ThrowsTest();
try {
t.readFile();
} catch (IOException e) {
e.printStackTrace();
}
}
public void readFile() throws IOException {
FileInputStream in = new FileInputStream("a.txt");
int b;
b = in.read();
while (b != 1) {
System.out.println((char) b);
b = in.read();
}
in.close();
}
}
class A {
public void methodA() throws IOException {
//……
}
}
class B1 extends A {
public void methodA() throws FileNotFoundException {
//……
}
}
class B2 extends A {
// 'methodA()' in 'B2' clashes with 'methodA()' in 'A'; overridden method does not throw 'java.lang.Exception'
public void methodA() throws Exception {
//……
}
}
手动抛出异常:throw
Java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要使用人工创建并抛出
首先要生成异常类对象,然后通过throw语句实现抛出操作,提交给Java运行环境
IOException e = new IOException();
throw e;
可以抛出的异常必须是Throwable或其子类的实例。下面的语句在编译时将会产生语法错误 throw new String(“want to throw”);
用户自定义异常类
一般地,用户自定义异常类都是RuntimeException的子类
自定义异常类通常需要编写几个重载的构造器
自定义异常需要提供serialVersionUID
自定义的异常通过throw抛出
自定义异常最重要的是异常类的名字,当异常出现时,可以根据名字判断异常类型
用户自己的异常类必须继承现有的异常类
class MyException extends Exception {
static final long serialVersionUID = 1L;
private int idnumber;
public MyException(String message, int id) {
super(message);
this.idnumber = id;
}
public int getId() {
return idnumber;
}
}
总结
面试题
1.
class ReturnExceptionDemo {
static void methodA() {
try {
System.out.println("进入方法 A");
throw new RuntimeException("制造异常 ");
} finally {
System.out.println("用 A 方法的 finally");
}
}
static void methodB() {
try {
System.out.println("进入方法 B");
return;
} finally {
System.out.println("调用 B 方法的 finally");
}
}
public static void main(String[] args) {
//进入方法 A
//用 A 方法的 finally
//制造异常
//进入方法 B
//调用 B 方法的 finally
try {
methodA();
} catch (Exception e) {
System.out.println(e.getMessage());
}
methodB();
}
}