首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取当前行号Java

问获取当前行号Java
EN

Stack Overflow用户
提问于 2013-09-23 00:31:58
回答 3查看 5.7K关注 0票数 2

我有一个对象类,如果用户试图向它的构造函数提供一个负号,我想输出一个警告,告诉他们他们提供了一个无效的数字

代码语言:javascript
复制
System.out.println("ERROR ON LINE " + Thread.currentThread().getStackTrace()[2].getLineNumber() + ": You have provided an invalid number.\nSetting to default.");

编辑:我将值设置为系统中的默认值,不希望程序终止。

我真正想知道的是我是如何自动找到2的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-23 00:35:08

在这种情况下,应该抛出异常,而不是打印错误消息。这具有将行号包括在报表中的额外好处。您可以使用这一行代码:

代码语言:javascript
复制
throw new IllegalArgumentException("You must provide a positive number");

如果发生这种情况,您将得到如下错误报告:

代码语言:javascript
复制
Exception in thread main: java.lang.IllegalArgumentException: You must provide a positive number
    at YourClass(YourFile.java:lineNumber)

如果这不是GUI应用程序,程序也将终止。GUI应用程序和其他类型的应用程序会用错误报告对此不屑一顾,并继续。

有关异常的更多信息,请参见关于异常的Java教程。

票数 4
EN

Stack Overflow用户

发布于 2013-09-23 00:34:48

不要为此使用print语句;现在正是抛出IllegalArgumentException的时候。异常处理在语义上要清楚得多,如果您有一个无效的数字传递给构造函数,那么无论如何您都不希望构造成功,而且如果您手动编写消息到System.out,那么在运行图形化或基于服务器的应用程序时,它们会被忽略。异常将具有错误发生的行号,并帮助程序员首先了解无效数字如何传递给构造函数。

你可以这样说:

代码语言:javascript
复制
if(number < 0)
    throw new IllegalArgumentException("number must not be negative");

更好的是,如果您正在编写一个可以使用Bean验证的应用程序,那么您可以将约束写入代码中,这样做对用户来说是显而易见的,并且可以在编译时进行检查:

代码语言:javascript
复制
public MyClass(@Min(0) int number) {
    // constructor
}
票数 3
EN

Stack Overflow用户

发布于 2013-09-23 00:35:57

您熟悉java 例外情况吗?您可以抛出异常(如在构造函数中)。

代码语言:javascript
复制
if(number<0){
   throw new IllegalArgumentException("Argument "+number+" is illegal. must be positive");
}

这将迫使用户提供一个合法的论据,以确保您的程序不会中断或挂起在一个糟糕的状态。该异常还将提供一个整洁的堆栈跟踪,它将显示提供错误参数的错误发生在哪一行。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18950201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档