在没有 "Exception in thread..." 的情况下抛出异常
Throwing an exception without "Exception in thread..."
我想知道是否有一种抛出异常的简单方法,但是 ONLY 我选择的确切字符串。我找到了摆脱堆栈跟踪的方法,但现在我想删除每个异常的开头:
"Exception in thread "main"RuntimeException..."
我正在寻找一种简单、优雅的方法来做到这一点(不是超级简单,但也不是太复杂)。
谢谢!
这就是你的做法:
try{
//your code
}catch(Exception e){
System.out.println("Whatever you want to print" + e.getMessage());
System.exit(0);
}
构造异常对象时,其中一个构造函数将采用消息的 String 对象。
你不能,除非你得到 openJDK,更改源代码并重新编译。
然而,大多数开发人员通常做的是使用一些日志库,例如 log4j,并根据日志设置使用不同的详细级别。
因此,您可以使用较低的级别(例如 TRACE 或 DEBUG)打印完整的堆栈跟踪,并在 ERROR 或 WARN(甚至 INFO)级别中显示更多 human-readable 消息。
就这样:
try {
...
} catch (Exception e) {
System.err.print("what ever");
System.exit(1); // close the program
}
我不确定我是否完全理解你的问题,但如果你只是将 "throws Exception" 添加到方法 header 并在方法应该失败的地方抛出异常,那应该可以。
示例:
public void HelloWorld throws Exception{
if(//condition that causes failure)
throw new Exception("Custom Error Message");
else{
//other stuff...
}
}
执行此操作的正确方法是设置您自己的自定义 uncaught exception handler:
public static void main(String... argv)
{
Thread.setDefaultUncaughtExceptionHandler((t, e) -> System.err.println(e.getMessage()));
throw new IllegalArgumentException("Goodbye, World!");
}
您可以通过创建一个您可以自己创建的自定义 Exception
来做到这一点。
- 这些异常可以是
Checked
异常,由 Java 编译器强制执行(需要 try/catch 或抛出来实现)
- 或者异常可以是
Unchecked
异常,它在运行时抛出,Java 编译器不强制执行。
根据您所写的内容,您似乎想要一个 Unchecked
未强制执行的异常,但会在运行时抛出错误。
执行此操作的一种方法是通过以下方式:
public class CustomException extends RuntimeException {
CustomException() {
super("Runtime exception: problem is..."); // Throws this error message if no message was specified.
}
CustomException(String errorMessage) {
super(errorMessage); // Write your own error message using throw new CustomException("There was a problem. This is a custom error message");
}
}
然后在您的代码中,您可以执行以下操作:
public class Example {
String name = "x";
if(name.equals("x"))
throw new CustomException(); // refers to CustomException()
}
或者
public class Example2 {
String name = "y";
if(name.equals("y"))
throw new CustomException("Error. Your name should not be this letter/word."); // Refers to CustomException(String errorMessage);
}
您也可以为 Throwable 执行此操作。
我想知道是否有一种抛出异常的简单方法,但是 ONLY 我选择的确切字符串。我找到了摆脱堆栈跟踪的方法,但现在我想删除每个异常的开头:
"Exception in thread "main"RuntimeException..."
我正在寻找一种简单、优雅的方法来做到这一点(不是超级简单,但也不是太复杂)。
谢谢!
这就是你的做法:
try{
//your code
}catch(Exception e){
System.out.println("Whatever you want to print" + e.getMessage());
System.exit(0);
}
构造异常对象时,其中一个构造函数将采用消息的 String 对象。
你不能,除非你得到 openJDK,更改源代码并重新编译。
然而,大多数开发人员通常做的是使用一些日志库,例如 log4j,并根据日志设置使用不同的详细级别。
因此,您可以使用较低的级别(例如 TRACE 或 DEBUG)打印完整的堆栈跟踪,并在 ERROR 或 WARN(甚至 INFO)级别中显示更多 human-readable 消息。
就这样:
try {
...
} catch (Exception e) {
System.err.print("what ever");
System.exit(1); // close the program
}
我不确定我是否完全理解你的问题,但如果你只是将 "throws Exception" 添加到方法 header 并在方法应该失败的地方抛出异常,那应该可以。
示例:
public void HelloWorld throws Exception{
if(//condition that causes failure)
throw new Exception("Custom Error Message");
else{
//other stuff...
}
}
执行此操作的正确方法是设置您自己的自定义 uncaught exception handler:
public static void main(String... argv)
{
Thread.setDefaultUncaughtExceptionHandler((t, e) -> System.err.println(e.getMessage()));
throw new IllegalArgumentException("Goodbye, World!");
}
您可以通过创建一个您可以自己创建的自定义 Exception
来做到这一点。
- 这些异常可以是
Checked
异常,由 Java 编译器强制执行(需要 try/catch 或抛出来实现) - 或者异常可以是
Unchecked
异常,它在运行时抛出,Java 编译器不强制执行。
根据您所写的内容,您似乎想要一个 Unchecked
未强制执行的异常,但会在运行时抛出错误。
执行此操作的一种方法是通过以下方式:
public class CustomException extends RuntimeException {
CustomException() {
super("Runtime exception: problem is..."); // Throws this error message if no message was specified.
}
CustomException(String errorMessage) {
super(errorMessage); // Write your own error message using throw new CustomException("There was a problem. This is a custom error message");
}
}
然后在您的代码中,您可以执行以下操作:
public class Example {
String name = "x";
if(name.equals("x"))
throw new CustomException(); // refers to CustomException()
}
或者
public class Example2 {
String name = "y";
if(name.equals("y"))
throw new CustomException("Error. Your name should not be this letter/word."); // Refers to CustomException(String errorMessage);
}
您也可以为 Throwable 执行此操作。