Java处理异常小试

/*1.尝试读取一个文件:

这里的读取和写入直接放在try块,这样出了catch块引用自动消失,指向的对象可以被系统回收,catch块什么也不用做,这是JDK1.7之后常用的写法。(Orz其实自己也不是很懂,问了tao哥这里tao哥扩展讲的)*/

package com.zmz.exception;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;

public class CheckedException {
	public static void main(String[] args) {
		
		
		try (FileReader reader = new FileReader("");
				FileWriter writer = new FileWriter("")) {
			
			int c = reader.read();
			System.out.println(c);
			
//			reader.close();
//			writer.close();
			
		} catch (IOException e) {
		}
		
		
		System.out.println("start");
		FileReader reader = null ;
		
		try {
			reader = new FileReader("abc");
			int c= reader.read();
			System.out.println((char) c);
		} catch (FileNotFoundException e) {
			//文件不存在
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			//在读取的过程中可能出现读取数据或者写入数据出错了(比如中途硬盘坏了)
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
//				if(reader != null ) {
//					try {
//						reader.close();
//					} catch (IOException e) {
//						reader = null;
//					}
//					System.out.println("释放资源");
//				}
		
		}
		
	}
}

/*2.为员工设置年龄,对超出范围的处理异常:*/
package com.zmz.exception;

public class Staff {
	private String name;
	private int age;
	
	public Staff(String name) {
		this.name = name;
		age = 18;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	/**
	 * 修改员工年龄
	 * @param age 
	 * 				int 年龄大于18,小于60
	 * @throws TooYoungException
	 * @throws TooOldException
	 */
	public void setAge(int age) throws TooYoungException, TooOldException {
		if(age < 18) {
			//太小
			//中断了程序的正常流程,向上抛出(传递)一个自定义信号
			throw new TooYoungException(age);
		}
		if(age > 60) {
			//太大
			throw new TooOldException(age);
		}
		this.age = age;
	}
	
	
}

package com.zmz.exception;

public class TooOldException extends Exception{
	public TooOldException(int age) {
		// TODO Auto-generated constructor stub
		super("年龄太大" + age);
	}
}

package com.zmz.exception;

public class TooYoungException extends Exception {
	private static final long serialVersionUID = 1L;
	public TooYoungException(int age) {
		super("年龄太小"+age);
	}

}
package com.zmz.exception;

import java.util.*;

public class Test {
			
		//编译型错误,强制要处理
	public static void main(String[] args) {
		Staff s1 = new Staff("Bob");
		System.out.println(s1.getName());
		System.out.println(s1.getAge());
		
		try {
			s1.setAge(12);
			System.out.println(s1.getAge());
			
		} catch (TooYoungException e) {
			// TODO Auto-generated catch block
			resetAge(s1, e.getMessage());
//			e.printStackTrace();
		} catch (TooOldException e) {
			// TODO Auto-generated catch block
			resetAge(s1, e.getMessage());
//			e.printStackTrace();
		}
	}
		
		//handleXxxExpception
		private static void resetAge(Staff s1,String message) {
			System.out.println(message);
			Scanner sc = new Scanner(System.in); 
			System.out.println("请输入年龄");
			int age = sc.nextInt();
			try {
				s1.setAge(age);
			} catch (TooYoungException e) {
				// TODO: handle exception
				resetAge(s1, e.getMessage());
			}catch (TooOldException e2) {
				// TODO: handle exception
				resetAge(s1, e2.getMessage());
			}	
		}
			
	}
	
	


/*3.用户信息的更新(常用设计模式):
待续。。。*/


posted @ 2017-05-19 22:55  Lawliet__zmz  阅读(136)  评论(0编辑  收藏  举报