I've got a single threaded app that should set the DOS errorlevel to something non-zero if there is a problem. Is it better to throw a RuntimeException, or to use System.exit(nonzero)? I don't need the stack trace, and I don't expect this app to be extended/reused. What are the differences between these two options?
相关问题
- Delete Messages from a Topic in Apache Kafka
- Jackson Deserialization not calling deserialize on
- How to maintain order of key-value in DataFrame sa
- StackExchange API - Deserialize Date in JSON Respo
- Difference between Types.INTEGER and Types.NULL in
System.exit() not recommended. It shutdowns JVM.
Generally in this situation I would handle all exceptions in my main method, possibly by calling
System.exit
. This gives you flexibility about where/whether/how to handle exceptional conditions, while still meeting your need to terminate with an error code. In particular, it gives you control over the return code and any other output you might generate for the user (error message, stack trace, etc). If you throw an exception in main (or let an exception escape), you lose that control.To summarize, call
System.exit
only in your top-level exception handler:The APP itself should use System.exit. It's its interface with the calling environment (script). Any internal component of course should use Exception. When you put it together it can be the both of'em:
System.exit(num) is not a good option, as its shutdown JVM, plus even it didnt run the finally block if you have after catch block.
Throwing RuntimeException also might not be the best of the option, can subclass as mentioned earlier which is app specific exception could be a better option in my opinion. -Manish
An exception thrown will print out the stack trace, and if you don't need that, you shoul use System.exit.
Upon exit you can inform the user with a Sytem.out (I assume the app is running in a commanline environment only).
You should consider just catching all errors an logging the errors in a seperate log, this ensures the stacktrace is not lost forever when you close the terminal. Take a look at log4j for this purpose, it's really easy to use.
Don't throw an exception unless you really have an exceptional condition.
System.exit(int)
is there for precisely this reason. Use it.EDIT: I think I may have misread your question. I thought you were asking, when you want to exit the JVM normally but signal that something did not quite go right, whether it is better to throw an exception or to use
System.exit
.However, if the problem that occurs is something which is already indicated by a Java exception, it's fine to just let that exception go unhandled. You don't have to catch the exception and call
System.exit
.If you have a choice of whether to throw an exception of your own or call
System.exit
, think about whether the error condition is something that might conceivably be handled by some Java code that calls your method. If the error occurs directly in themain
method, then there will probably never be a caller to handle the exception so you should probably callSystem.exit
. Otherwise, it's generally best to throw an exception - but notRuntimeException
, you should probably use an exception type that appropriately represents the error you encountered. Write your own subclass ofRuntimeException
if necessary.