• 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.用户信息的更新(常用设计模式):
    待续。。。*/
    
    

  • 相关阅读:
    python的内存管理
    redis 为啥要主从复制·
    django框架的ORM模型优缺点
    Pytorch学习:实现ResNet34网络
    Pytorch学习:线性回归
    Pytorch学习:CIFAR-10分类
    论文阅读笔记(六十七)【arXiv2021】:Contextual Non-Local Alignment over Full-Scale Representation for Text-Based Person Search
    论文阅读笔记(六十六)【ICCV2019】:Adversarial Representation Learning for Text-to-Image Matching
    论文阅读笔记(六十五)【ECCV2018】:Deep Cross-Modal Projection Learning for Image-Text Matching
    论文阅读笔记(六十四)【arXiv2021】:TransReID: Transformer-based Object Re-Identification
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7256605.html
Copyright © 2020-2023  润新知