Thrown when an application tries to load in a class through its string name using: The forName method in class Class. The findSystemClass method in class ClassLoader. The loadClass method in class ClassLoader. but no definition for the class with the specified name could be found.
找不到 .class
文件
Thrown if the Java Virtual Machine or a ClassLoader instance tries to load in the definition of a class (as part of a normal method call or as part of creating a new instance using the new expression) and no definition of the class could be found. The searched-for class definition existed when the currently executing class was compiled, but the definition can no longer be found.
能找到 .class
文件,但 ClassLoader
尝试加载类的定义时却找不到该类的定义
try { // 业务代码 Thread.sleep(1000L); } catch (Exception e) { // 忽略 }
Exception
,应该捕获 特定异常 InterruptedException
Throwable
或 Error
,否则很难保证能够正常处理 OutOfMemoryError
try { // 业务代码 } catch (IOException e) { // Prints this throwable and its backtrace to the standard error stream. e.printStackTrace(); }
stderr
不是一个合适的输出选项,很难判断输出到哪里去了 public static void main(String[] args) throws FileNotFoundException { readFile(null); } private static void readFile(String fileName) throws FileNotFoundException { InputStream in = new FileInputStream(fileName); } // 异常信息不直观 Exception in thread "main" java.lang.NullPointerException at java.io.FileInputStream.<init>(FileInputStream.java:130) at java.io.FileInputStream.<init>(FileInputStream.java:93) at me.zhongmingmao.Main.readFile(Main.java:14) at me.zhongmingmao.Main.main(Main.java:9)
public static void main(String[] args) throws FileNotFoundException { readFile(null); } private static void readFile(String fileName) throws FileNotFoundException { Objects.requireNonNull(fileName); InputStream in = new FileInputStream(fileName); } // 使用Throw early,异常信息比较直观 Exception in thread "main" java.lang.NullPointerException at java.util.Objects.requireNonNull(Objects.java:203) at me.zhongmingmao.Main.readFile(Main.java:14) at me.zhongmingmao.Main.main(Main.java:10)
捕获异常后,如果实在不知道如何处理,可以保留 原有异常的cause信息 ,直接 再抛出 或者 构建新的异常 抛出
Checked Exception
, Checked Exception
的设计初衷是为了 从异常情况中恢复
Checked Exception
的设计初衷