软件构造心得笔记:错误处理机制

在我们实际的软件构造实例当中,我们往往会因为各种各样的原因出现错误,或是因为外部输入的错误,或是因为内部代码的失误造成各种各样的问题,通常我们有异常处理机制和断言机制来处理这些问题。在处理的过程中,我们往往需要从健壮性和正确性两方面来进行考量

这里写目录标题

异常处理机制

健壮性:系统在不正常输入或不正常外部环境下仍能够表现正常的程度
异常处理机制依靠try-catch-finally语句往往能够很好地在异常处理的情况下进行很好地提高健壮性。注意这里的异常通常是cheked exception
即在错误的输出后能够进行一定的处理的情况。通常在程序中,我们可以通过throw抛出异常。

throw new timeFormatException(name+":"+da+"航班时间信息不一致");

同时可以通过在方法中声明throws将异常抛给上层去处理。

public static void readFile(String strFile,FlightCollection Flightschedule) throws Exception {
		logger.planeLogger().info("读文件");
	    BufferedReader br = new BufferedReader(new FileReader(strFile));
	    boolean flag=true;                  
	       
	    Pattern pattern = Pattern.compile("Flight:(.*?),([A-Z]{2})(.*?)\n\\{\nDepartureAirport:(.*?)\nArrivalAirport:(.*?)\nDepatureTime:(.*?)\nArrivalTime:(.*?)\nPlane:(.*?)\n\\{\nType:(.*?)\nSeats:(.*?)\nAge:(.*?)\n\\}\n\\}\n");
	    String stringInfo = "";
	    while(flag) {
	        String myLine;
	    	for(int i=0;i<13&&flag;i++) //每13行一个周期读取字符串
	    	{
	    		if((myLine = br.readLine()) == null)
	    			flag = false; 
	    		stringInfo = stringInfo + myLine + "\n";
	    	} 

当try-catch捕获注某个异常之后,例如用户输入错误的参数,会进行一定地应对,例如,我将信息返回给用户,并让他重新执行这个操作。而不是直接粗暴地结束这个程序,这样就增加了函数的健壮性。

断言机制

首先断言机制在默认情况下是关闭的,所以我们得先去进行人工的开关。然后对于断言机制,讲究绝对的正确性,例如我们每个ADT当中为检查RI所写的checkrep()中就经常使用了断言机制

 private final String sta;
	//AF:sta为状态名
		Safety from rep exposure:
		//以private  定义的变量类型,防御性编程
    public Blocked() {
    	 this.sta="blocked";
    	 checkRep();
    }
    private void checkRep() {
		assert sta.equals("blocked");
	}

断言机制往往用来检查内部的正确性,因为外部出现错误的情况时有发生,如果每次都直接结束程序,对于客户端太不友好,大大降低了健壮性,而如果某个方法满足了pre-condition。那么一定在代码内部正确执行就会得到正确的post-condition,这个时候就可以用断言机制验证程序的正确性

总结

异常处理机制更倾向于提高程序的健壮性,而断言机制则倾向于验证程序的正确性,但在处理问题的角度上,断言能处理的问题异常处理机制同样也能处理,反之亦然。值得注意的是断言往往会耗费大量性能,所以往往在程序发布前通过断言确定程序正确性,而在发布之后注释掉断言以保证性能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值