try { // 可能发生异常的语句 } catch(ExceptionType e) { // 处理异常语句 }在以上语法中,把可能引发异常的语句封装在 try 语句块中,用以捕获可能发生的异常。catch 后的
( )
里放匹配的异常类,指明 catch 语句可以处理的异常类型,发生异常时产生异常类的实例化对象。
注意:try...catch 与 if...else 不一样,try 后面的花括号{ }
不可以省略,即使 try 块里只有一行代码,也不可省略这个花括号。与之类似的是,catch 块后的花括号{ }
也不可以省略。另外,try 块里声明的变量只是代码块内的局部变量,它只在 try 块内有效,其它地方不能访问该变量。
import java.util.Scanner; public class Test02 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("---------学生信息录入---------------"); String name = ""; // 获取学生姓名 int age = 0; // 获取学生年龄 String sex = ""; // 获取学生性别 try { System.out.println("请输入学生姓名:"); name = scanner.next(); System.out.println("请输入学生年龄:"); age = scanner.nextInt(); System.out.println("请输入学生性别:"); sex = scanner.next(); } catch (Exception e) { e.printStackTrace(); System.out.println("输入有误!"); } System.out.println("姓名:" + name); System.out.println("年龄:" + age); } }上述代码在 main() 方法中使用 try catch 语句来捕获异常,将可能发生异常的
age = scanner.nextlnt();
代码放在了 try 块中,在 catch 语句中指定捕获的异常类型为 Exception,并调用异常对象的 printStackTrace() 方法输出异常信息。运行结果如下所示。
---------学生信息录入--------------- 请输入学生姓名: 徐白 请输入学生年龄: 110a java.util.InputMismatchException at java.util.Scanner.throwFor(Unknown Source) at java.util.Scanner.next(Unknown Source) at java.util.Scanner.nextInt(Unknown Source) at java.util.Scanner.nextInt(Unknown Source) 输入有误! 姓名:徐白 年龄:0 at text.text.main(text.java:19)
try { // 可能会发生异常的语句 } catch(ExceptionType e) { // 处理异常语句 } catch(ExceptionType e) { // 处理异常语句 } catch(ExceptionType e) { // 处理异常语句 ... }在多个 catch 代码块的情况下,当一个 catch 代码块捕获到一个异常时,其它的 catch 代码块就不再进行匹配。
public class Test03 { public static void main(String[] args) { Date date = readDate(); System.out.println("读取的日期 = " + date); } public static Date readDate() { FileInputStream readfile = null; InputStreamReader ir = null; BufferedReader in = null; try { readfile = new FileInputStream("readme.txt"); ir = new InputStreamReader(readfile); in = new BufferedReader(ir); // 读取文件中的一行数据 String str = in.readLine(); if (str == null) { return null; } DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Date date = df.parse(str); return date; } catch (FileNotFoundException e) { System.out.println("处理FileNotFoundException..."); e.printStackTrace(); } catch (IOException e) { System.out.println("处理IOException..."); e.printStackTrace(); } catch (ParseException e) { System.out.println("处理ParseException..."); e.printStackTrace(); } return null; } }上述代码通过 Java I/O(输入输出)流技术从文件 readme.txt 中读取字符串,然后解析成为日期。由于 Java I/O 技术还没有介绍,大家先不要关注 I/O 技术细节,只看调用它们时方法会发生的异常就可以了。
本文链接:http://task.lmcjl.com/news/10711.html