我有以下两个示例,我不清楚java.lang.Exception是如何处理的:作为检查的或未检查的异常。
以下方法编译成功:
public double method1() throws Exception {
return 0.7;
}
private void method2(int age) {
if (age > 30)
throw new Exception();
}
如果它抛出了java.lang.RuntimeException或java.lang.Error类型的子类,它会编译?
是的,runtimeexception
是未经检查的异常(或error
),因此您不需要在方法签名或catch
上显式声明它。例如,NullPointerException
,您无法判断运行时代码中何时可能发生这种情况(即,由于哪个问题,因此,您不需要在代码中的任何地方显式地处理它),如果由于任何原因在运行时发生这种情况,您将看到异常StackTrace。
但是,有一点是,您可以catch
(如果需要的话)runtimeexception
(使用catch
)并处理它,如果您希望在引发异常时以不同的方式处理,可以查看下面的内容。
try {
//some code
} catch(ArithmeticException exe) {
//handle it and you can do things differently how you like
}
同样,同样的规则甚至适用于throws
,也就是说,如果您愿意,您可以在方法签名上指定throws
arithmeticexception
(或任何runtimeexception
),但这对调用方没有任何区别,相反,它会使代码混乱,而且这不是最佳实践,您可以查看这里。然而,当您在检查异常的方法上指定throws
caluse时,调用方将被迫处理它,即调用方方法必须使用catch
block或throw
来显式地处理它。
为什么在这种情况下它不编译?我猜是因为它威胁java.lang.Exception作为检查异常。但如果是这样,那么为什么method1会编译呢?
是的,处理检查的异常有两条规则:
(1)catch
方法内部使用catch
块
(2)或从方法中throws
它(在方法签名中使用throws
)
例如,如果您的代码块抛出了
一个已检查的expeption,那么您要么需要在方法中捕获它,要么方法需要显式声明它抛出了该异常
。
因为Java编程语言不需要捕获方法或声明未检查异常(包括 RuntimeException、Error及其子类),程序员可能会试图编写只抛出未检查异常的代码,或使所有异常子类继承自RuntimeException。这两个快捷方式都允许程序员编写代码,而不必担心编译器错误,也不用担心声明或捕获任何异常。虽然这对于程序员似乎很方便,但它避开了捕获或者声明异常的需求,并且可能会导致其他人在使用您的类而产
问题内容: 据我了解,如果不逐一查找API文档,就无法找出方法抛出的异常。 由于这是没有选择的,因此我想撤消研究,并询问您在处理时遇到的最常见的Exception和RuntimeException: 铸件 数组 向量,ArrayList,HashMap等 IO(文件类,流,过滤器…) 对象序列化 线程(wait(),sleep()等) 或任何其他被视为“基本Java”的内容 我意识到这可能是主观的
问题内容: 我在一个带有旧服务层的项目上工作,如果请求的记录不存在,或者由于调用者未得到授权而无法访问,则在很多地方返回null。我说的是ID要求的特定记录。例如,类似: 最近,我一直在努力更改此API,或者用引发异常的新API进行补充。随之而来的是关于检查与未检查的异常的争论。 从JPA / Hibernate等所有设计师的笔记中,我建议未检查的异常可能是最合适的。我的观点是,不能合理地期望AP
问题内容: 我在理解Java 和异常之间的区别时遇到了一些问题。 首先,异常应该在编译时寻找异常。在不同来源中提供的示例引用了数据库连接性,其中一些是文件处理,而异常应该是在程序员方面寻找错误,例如索引超出数组范围等。 不应该反过来吗?我的意思是,数据库连接是在运行时完成的,对吧?文件处理也是如此。您没有在编译时打开文件句柄,那么为什么在编译时会寻找一个可能的错误呢?另一方面,超出数组范围的索引已
问题内容: 在Java(或任何其他具有检查的异常的语言)中,当创建自己的异常类时,如何决定应检查还是不检查它? 我的直觉是,在调用者能够以某种有效的方式进行恢复的情况下,将要求使用检查异常,而对于无法恢复的情况,未检查异常将更多,但是我会对其他人的想法感兴趣。 问题答案: 只要你知道何时应使用检查异常,它就很棒。Java核心API未能遵循SQLException(有时甚至是IOException)
问题内容: 我在Java中有这个工厂方法: 我想将两个已检查的异常转换为未检查的异常。最好的方法是什么? 我是否应该仅捕获异常并使用捕获的异常作为内部异常抛出新的RuntimeException? 有没有更好的方法可以做到这一点?或者我应该首先尝试这样做吗? 编辑: 只是为了澄清。这些异常将是致命的,因为配置文件实质上是程序的运行,所有异常都将在程序的顶层捕获并记录。 我的目的是避免不必要的引发异