Java 处理异常的示例代码
我是Android移动应用开发新手。 我想知道,如何处理异常,如Java 处理异常的示例代码,java,android,exception,Java,Android,Exception,我是Android移动应用开发新手。 我想知道,如何处理异常,如HttpConnection相关异常或任何其他异常?我是否需要向用户显示警报对话框 请提供有关如何处理HttpConnection或类似类型异常的示例代码或项目源代码。如何处理异常取决于异常。如果异常是无法恢复的,并且用户需要知道,则可以捕获异常并在AlertDialog中显示: try { // do something } catch (SomeImportantException e) { AlertDialog.Bu
HttpConnection
相关异常或任何其他异常?我是否需要向用户显示警报对话框
请提供有关如何处理
HttpConnection
或类似类型异常的示例代码或项目源代码。如何处理异常取决于异常。如果异常是无法恢复的,并且用户需要知道,则可以捕获异常并在AlertDialog中显示:
try {
// do something
} catch (SomeImportantException e) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("User friendly text explaining what went wrong.");
AlertDialog alert = builder.create();
alert.show();
}
有关该对话框的详细信息,请参见
或者,如果异常是您可以处理的,您可以只记录有关异常的信息,然后继续
try {
// do something
} catch (SomeLessImportantException e) {
Log.d(tag, "Failed to do something: " + e.getMessage());
}
Java中有两种不同类型的异常:已检查和未检查。关于使用哪一个更好,存在着一场激烈的争论,这两种观点都是好的 基本上,Checked异常是从
java.lang.exception
派生出来的,它要求如果不将方法指定为“throws mycheckedeexception”,则必须在方法中捕获并处理异常
// throw the exception
void foo() throws MyCheckedException
{
throw new MyCheckedException();
}
// or handle the exception
void foo()
{
try {
throw new MyCheckedException();
} catch (MyRuntimeException e) {
e.printStackTrace();
}
}
从java.lang.RuntimeException
派生的未经检查的异常既不需要在方法定义中指定“throws”,也不需要处理它
void foo()
{
throw new MyUncheckedException();
}
Checked的优点是,当您尚未处理异常时,编译器将向您发出警告
void caller()
{
try {
foo();
} catch (MyUncheckedException e) {
CheckedException1 ce1 = e.getCause();
ce1.printStackTrace();
}
}
缺点是您必须为每个已检查的异常声明try/catch块或throws,并且上层代码可能会变得相当麻烦,试图处理所有不同类型的异常
出于这个原因,如果您小心,您可能更喜欢使用未检查的异常
顺便说一句,您只能在定义自己的异常类型时选择异常类型
当遇到来自Java或第三方库的异常时,您必须决定如何处理它。e、 如果第三方方法抛出CheckedException1,那么您必须处理它,或者将调用方法声明为“抛出CheckedException1”。如果希望避免使用选中的异常,那么可以将其包装为未选中的异常并抛出该异常
void foo() // no throws declaration
{
try {
thirdPartyObj.thirdPartyMethod(); // this throws CheckedException1
}
catch (CheckedException1 e) {
throw new MyUncheckedException(e); // this will wrap the checked in an unchecked.
}
}
请注意,您可以在不使用“throws”声明的情况下抛出未经检查的异常。要从更高级别访问原始CheckedException1,可以使用未检查异常的.getCause()方法
void caller()
{
try {
foo();
} catch (MyUncheckedException e) {
CheckedException1 ce1 = e.getCause();
ce1.printStackTrace();
}
}
。。。但是因为foo()的异常是未选中的,所以您不必处理它或声明“throws”
关于伐木,有不同的学派
public class MyExceptionHandler implements UncaughtExceptionHandler
{
@Override
public void uncaughtException(Thread thread, Throwable ex)
{
ex.printStackTrace();
}
}
// In your high-level code
Thread.setDefaultUncaughtExceptionHandler(new MyExceptionHandler());
对于可以优雅地处理的所有异常,请在模块中捕获并处理它们,在该模块中,您对情况有足够的了解,可以纠正问题,然后重试 您可以使用提供此功能的ACRA插件或收集错误报告。
免责声明:我是BugSense的创始人。这是我读过的关于异常处理的最好的解释,这很遗憾,因为我已经在谷歌上搜索了一两个小时。你应该得到更多的选票,先生。祝你好运,Gowie47!:)感谢您提供了一个处理第三方异常的好例子。虽然这个答案是准确的,但paiego下面的答案更有用。