AP C.S.作业的Java断言
我正在创建一个简单的银行账户类“BankAccount”。目标是增强类以确保达到所需的值。例如,当构造类的新对象时,构造函数要求初始余额大于$0。它要求您使用断言AP C.S.作业的Java断言,java,assertion,Java,Assertion,我正在创建一个简单的银行账户类“BankAccount”。目标是增强类以确保达到所需的值。例如,当构造类的新对象时,构造函数要求初始余额大于$0。它要求您使用断言 public class BankAccount { priavte int balance; public BankAccount(int initialBalance) { assert (initialBalance > 0); balance = initialBalance; } }
public class BankAccount
{
priavte int balance;
public BankAccount(int initialBalance)
{
assert (initialBalance > 0);
balance = initialBalance;
}
}
这是使用断言的正确方法吗?如果InitialBalance<0,assert语句将做什么?这不是使用断言的正确方法。事实上,Oracle认为断言不应检查方法参数,更重要的是,决不应断言具有副作用的函数调用的结果(因为无法保证它将实际执行) 它们被设计用于检查不变量(例如,列表类可能包括一些元素和
int length
,并且该长度必须等于元素的数量)。正确使用的另一个示例:
public Foo acquireFoo(int id) {
Foo result = null;
if (id > 50) {
result = fooService.read(id);
} else {
result = new Foo(id);
}
assert result != null;
return result;
}
如果Java应用程序在命令行上使用-ea
运行,则将启用断言。当应用程序达到assert(initialBalance>0)时代码>,如果initialBalance小于0且启用了断言,则将抛出一个。如果未传递-ea
,则不会抛出断言错误
更明智的做法是提出如下建议:
public BankAccount(int initialBalance)
{
if (initialBalance < 0){
throw new IllegalArgumentException("The initial balance may not be negative.");
}
balance = initialBalance;
}
公共银行账户(int初始余额)
{
如果(初始余额<0){
抛出新的IllegalArgumentException(“初始余额可能不是负数”);
}
平衡=初始平衡;
}
您可以使用现有框架进行测试,其中包含许多常见断言。