几天前,我对考试有以下理论问题:
(a)解释在处理时防御性节目的含义
执行期间可能发生的特殊情况
程序。您可以参考类中看到的示例或使用伪
用于描述为防止某些情况而采取的步骤的代码
从尝试读取文件时发生的。
[5分]
(b)简要概述一下例外处理的含义
在Java中,这与防御性编程有何不同。
[5分]
我一直认为防御性编程是编程的整个范例,异常处理是其中的一部分。 在考试期间,我在“防御性编程”中写道,程序员在执行逻辑代码之前尝试找出所有可能的问题,然后在此函数中返回错误值(示例0),而在异常处理中发生潜在错误并被捕获通过特殊机制,直接解释这些错误。这样对吗?什么应该是正确的答案?
答案 0 :(得分:2)
对我而言,防御性编程假设最糟糕的情况:你的用户是完全疯狂的人,你必须保护自己和你的程序免受他们疯狂的输入。我相信这句话中有很多智慧:
每天,软件行业都在制造更大更好的防呆软件,而且每天,大自然都在制造更大更好的傻瓜。到目前为止自然界正在赢得
永远不要忘记您的用户不仅仅是您的客户。如果您负责库API,则您的用户可能是其他部门。在那种情况下,我生命中听过的最出色的抱怨之一是:
即使我们删除了所有失败的单元测试,该程序也无法正常工作
答案 1 :(得分:1)
对我而言,防御性编程意味着编写代码来处理您认为不会,甚至可能发生的案例,因为您相信自己的信念是不可靠的。
例如(未编译或测试,条款和条件适用):
private String findSmallestString(Collection<String> strings) {
if (strings == null || strings.isEmpty()) return null;
Iterator<String> stringsIt = strings.iterator();
try {
String smallestString = stringsIt.next();
while (stringsIt.hasNext()) {
String candidateString = stringsIt.next();
if (candidateString == null) continue;
if (candidateString.compareTo(smallestString) < 0) {
smallestString = candidateString;
}
}
return smallestString;
}
catch (NoSuchElementException e) {
return null;
}
}
在那里,可以说具有防御性的特征包括:
并非所有人都同意空检查具有防御性。尝试捕获是完全没有意义的。
对我而言,防御性编程的酸性测试是你不认为防守会被使用。