我有一个对象类,如果用户试图向它的构造函数提供一个负号,我想输出一个警告,告诉他们他们提供了一个无效的数字
System.out.println("ERROR ON LINE " + Thread.currentThread().getStackTrace()[2].getLineNumber() + ": You have provided an invalid number.\nSetting to default.");编辑:我将值设置为系统中的默认值,不希望程序终止。
我真正想知道的是我是如何自动找到2的。
发布于 2013-09-23 00:35:08
在这种情况下,应该抛出异常,而不是打印错误消息。这具有将行号包括在报表中的额外好处。您可以使用这一行代码:
throw new IllegalArgumentException("You must provide a positive number");如果发生这种情况,您将得到如下错误报告:
Exception in thread main: java.lang.IllegalArgumentException: You must provide a positive number
at YourClass(YourFile.java:lineNumber)如果这不是GUI应用程序,程序也将终止。GUI应用程序和其他类型的应用程序会用错误报告对此不屑一顾,并继续。
有关异常的更多信息,请参见关于异常的Java教程。
发布于 2013-09-23 00:34:48
不要为此使用print语句;现在正是抛出IllegalArgumentException的时候。异常处理在语义上要清楚得多,如果您有一个无效的数字传递给构造函数,那么无论如何您都不希望构造成功,而且如果您手动编写消息到System.out,那么在运行图形化或基于服务器的应用程序时,它们会被忽略。异常将具有错误发生的行号,并帮助程序员首先了解无效数字如何传递给构造函数。
你可以这样说:
if(number < 0)
throw new IllegalArgumentException("number must not be negative");更好的是,如果您正在编写一个可以使用Bean验证的应用程序,那么您可以将约束写入代码中,这样做对用户来说是显而易见的,并且可以在编译时进行检查:
public MyClass(@Min(0) int number) {
// constructor
}发布于 2013-09-23 00:35:57
您熟悉java 例外情况吗?您可以抛出异常(如在构造函数中)。
if(number<0){
throw new IllegalArgumentException("Argument "+number+" is illegal. must be positive");
}这将迫使用户提供一个合法的论据,以确保您的程序不会中断或挂起在一个糟糕的状态。该异常还将提供一个整洁的堆栈跟踪,它将显示提供错误参数的错误发生在哪一行。
https://stackoverflow.com/questions/18950201
复制相似问题