16.7. throw与显式抛出异常

throws语句是在方法的声明中使用来抛出异常, 而throw语句是在方法体内使用抛出异常

HelloWorld6.java

package com.a51cto;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.xml.crypto.Data;

public class HelloWorld6 {
 public static void main(String[] args) {
  try {
   Date date = readDate();
   System.out.println("读取的日期 = " + date);
  } catch (MyException e) {
   System.out.println("处理MyException.........");
   e.printStackTrace();
  }

 }

 public static Date readDate() throws MyException {
  // 自动资源管理
  try (FileInputStream readfile = new FileInputStream("readme.txt");
  InputStreamReader ir = new InputStreamReader(readfile);
  BufferedReader 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) {
  // TODO: handle exception
  throw new MyException(e.getMessage());
 }catch (IOException e) {
  // TODO: handle exception
  throw new MyException(e.getMessage());
 }catch (ParseException e) {
  // TODO: handle exception
  System.out.println("处理ParseException........");
  e.printStackTrace();
 }
  return null;

}
}

/*
处理MyException.........
com.a51cto.MyException: readme.txt (系统找不到指定的文件。)
 at com.a51cto.HelloWorld6.readDate(HelloWorld6.java:44)
 at com.a51cto.HelloWorld6.main(HelloWorld6.java:18)
*/

YiChang12.java

package com.a51work.cn;

import java.io.IOException;
import java.net.ServerSocket;

public class YiChang12 {
    // throws语句是在方法的声明中使用
    public static void main(String[] args) throws IOException {
        try {
            // 一个可能出现捕获异常的语句
            ServerSocket s = new ServerSocket(8080);

        }catch (Exception e){
            // throw是在方法体内使用用来抛出异常
            throw e;
        }
    }
}