创建一个 readFile() 方法,该方法用于读取文件内容,在读取的过程中可能会产生 IOException 异常,但是在该方法中不做任何的处理,而将可能发生的异常交给调用者处理。在 main() 方法中使用 try catch 捕获异常,并输出异常信息。代码如下:
import java.io.FileInputStream;
import java.io.IOException;
public class Test04
{
public void readFile() throws IOException
{
//定义方法时声明异常
FileInputStream file=new FileInputStream("read.txt"); //创達 FileInputStream 实例对象
int f;
while((f=file.read())!=-1)
{
System.out.println((char)f);
f=file.read();
}
file.close();
}
public static void main(String[] args)
{
Throws t=new Test04();
try
{
t.readFile(); //调用 readFHe()方法
}
catch(IOException e)
{ //捕获异常
System.out.println(e);
}
}
}
以上代码,首先在定义 readFile() 方法时用 throws 关键字声明在该方法中可能产生的异常,然后在 main() 方法中调用 readFile() 方法,并使用 catch 语句捕获产生的异常。
注意:在编写类继承代码时要注意,子类在覆盖父类带 throws 子句的方法时,子类的方法声明中的 throws 子句不能出现父类对应方法的 throws 子句中没有的异常类型,因此 throws 子句可以限制子类的行为。也就是说,子类方法拋出的异常不会超过父类定义的范围。
throw 拋出异常
throw 语句用来直接拋出一个异常,后接一个可拋出的异常类对象,其语法格式如下:
throw ExceptionObject;
其中,ExceptionObject 必须是 Throwable 类或其子类的对象。如果是自定义异常类,也必须是 Throwable 的直接或间接子类。例如,以下语句在编译时将会产生语法错误:
1.throw new String("拋出异常"); //因为String类不是Throwable类的子类
当 throw 语句执行时,它后面的语句将不执行,此时程序转向调用者程序,寻找与之相匹配的 catch 语句,执行相应的异常处理程序。如果没有找到相匹配的 catch 语句,则再转向上一层的调用程序。这样逐层向上,直到最外层的异常处理程序终止程序并打印出调用栈情况。
例 2
在某仓库管理系统中,要求管理员的用户名需要由 8 位以上的字母或者数字组成,不能含有其他的字符。当长度在 8 位以下时拋出异常,并显示异常信息;当字符含有非字母或者数字时,同样拋出异常,显示异常信息。代码如下:
import java.util.Scanner;
public class Test05
{
public boolean validateUserName(String username)
{
boolean con=false;
if(username.length()>8)
{ //判断用户名长度是否大于8位
for(int i=0;i<username.length();i++)
{
char ch=username.charAt(i); //获取每一位字符
if((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
{
con=true;
}
else
{
con=false;
throw new IllegalArgumentException("用户名只能由字母和数字组成!"");
}
}
}
else
{
throw new IllegalArgumentException("用户名长度必须大于 8 位!");
}
return con;
}
public static void main(String[] args)
{
Test05 te=new Test05();
Scanner input=new Scanner(System.in);
System.out.println("请输入用户名:");
String username=input.next();
try
{
boolean con=te.validateUserName(username);
if(con)
{
System.out.println("用户名输入正确!");
}
}
catch(IllegalArgumentException e)
{
System.out.println(e);
}
}
}