在try catch中获取导致错误的变量的变量名(Java)

huangapple go评论112阅读模式
英文:

Getting variable name of the variable causing the error in try catch (Java)

问题

在Java中是否有可能返回变量名?

如果是这样的话,该如何实现?

(我正在使用IntelliJ Community Edition)

编辑:

下方的评论回答了错误所在的行。我从未意识到函数名所在的行实际上是针对 精确 行而不是函数的开头。

英文:

Is it possible to return the variable name in java?

If so, how do you do it?

(I am using IntelliJ Community Edition)

EDIT:

Comment below answered about the line of where the error is. I never realize that the function name line was actually for the exact line and not for the start of the function.

答案1

得分: 1

假设有这段代码:

  1. public class Test{
  2. public static void main(String[] args){
  3. try{
  4. throw new IllegalArgumentException();
  5. }catch(IllegalArgumentException iae){
  6. iae.printStackTrace(); //获取堆栈轨迹
  7. }
  8. String s=null;
  9. System.exit(s.length()); //Boom
  10. }
  11. }

如果你使用 java Test 运行它,会得到以下输出:

  1. java.lang.IllegalArgumentException
  2. at Test.main(Test.java:4) //这里是行号
  3. Exception in thread "main" java.lang.NullPointerException
  4. at Test.main(Test.java:9) //这里是行号

如果你使用 java -XX:++ShowCodeDetailsInExceptionMessages Test 运行它,会得到以下输出:

  1. java.lang.IllegalArgumentException
  2. at Test.main(Test.java:4)
  3. Exception in thread "main" java.lang.NullPointerException: 无法调用 "String.length()"因为 "<local1>" 为空
  4. at Test.main(Test.java:9) //您可以得到行号和为空的内容,这里是一个没有名称的局部变量

如果你使用 javac -g Test.java 进行编译,然后运行它,你会得到更多的输出:

  1. java.lang.IllegalArgumentException
  2. at Test.main(Test.java:4)
  3. Exception in thread "main" java.lang.NullPointerException: 无法调用 "String.length()"因为 "s" 为空
  4. at Test.main(Test.java:9)

这并不适用于其他异常,但 NPE(NullPointerException,空指针异常)经常会被抛出。

注意:-XX:+ShowCodeDetailsInExceptionMessages 只在 Java 14+ 版本中起作用!

英文:

Suppose this code:

  1. public class Test{
  2. public static void main(String[] args){
  3. try{
  4. throw new IllegalArgumentException();
  5. }catch(IllegalArgumentException iae){
  6. iae.printStackTrace(); //Get stacktrace
  7. }
  8. String s=null;
  9. System.exit(s.length()); //Boom
  10. }
  11. }

If you run it with java Test, you get this output:

  1. java.lang.IllegalArgumentException
  2. at Test.main(Test.java:4) //Here, the line
  3. Exception in thread &quot;main&quot; java.lang.NullPointerException
  4. at Test.main(Test.java:9) //Here, the line

If you run it with java -XX:++ShowCodeDetailsInExceptionMessages Test, you get this output:

  1. java.lang.IllegalArgumentException
  2. at Test.main(Test.java:4)
  3. Exception in thread &quot;main&quot; java.lang.NullPointerException: Cannot invoke &quot;String.length()&quot; because &quot;&lt;local1&gt;&quot; is null
  4. at Test.main(Test.java:9) //You get the line and what is null, here a local with no name

If you compile with javac -g Test.java, and run it, you even get more output:

  1. java.lang.IllegalArgumentException
  2. at Test.main(Test.java:4)
  3. Exception in thread &quot;main&quot; java.lang.NullPointerException: Cannot invoke &quot;String.length()&quot; because &quot;s&quot; is null
  4. at Test.main(Test.java:9)

It doesn't work for other exceptions, but a NPE is thrown quite often.

-XX:+ShowCodeDetailsInExceptionMessages will only work in Java 14+!

huangapple
  • 本文由 发表于 2020年8月16日 01:11:18
  • 转载请务必保留本文链接:https://go.coder-hub.com/63428767.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定