JavaRush /Java 博客 /Random-ZH /翻译:困扰 Java 新手的 6 个 Java 异常。
profeg
第 18 级

翻译:困扰 Java 新手的 6 个 Java 异常。

已在 Random-ZH 群组中发布

困扰 Java 初学者的 6 个 Java 异常。

(原创) (我对Java和英语都是新手,所以我很高兴收到批评和帮助) 无论是以前还是现在,我都遇到过很多 Java 新手,他们对一些常见的异常有疑问,我必须再次解释一下。我相信其他高级 Java 开发人员也有同样的问题,试图帮助新手处理这些异常。于是,为了自己的发展,写了这篇文章。请随意对本文发表评论或在下面的列表中添加例外情况。
1.NoClassDefFoundError _
这是大多数新 Java 开发人员在 Java 编程世界中遇到的异常之一,其中包含诸如 “线程“main”NoClassDefFoundError 中的异常”之类的消息。初学者编写一个程序,显示“Hello world!”,进入命令行,输入“java ...”,按 Enter 键,然后“砰!” =)。并弄清楚如何让程序打印“Hello world!” 在监视器上,需要一些时间。 Java 虚拟机 (JVM) 在启动时尝试访问某个类但未找到该类时,即使在编译时找到了相同的类,也会发生 NoClassDefFoundError。大多数情况下,当尝试使用“java”命令执行程序并且类路径设置不正确时,会发生此异常。这里描述一下出现这个异常的原因。
  • 该类在 -classpath 中不可用。
  • CLASSPATH 环境变量已被覆盖。您可以使用 Windows 命令“set”检查其存在性和正确性。
这里更详细地描述了该问题的解决方案
此外,您需要了解 CLASSPATH 环境变量和解释器键 -classpath 之间的区别。专业人士不建议使用CLASSPATH。最好的方法是将 -classpath 键传递给解释器。
2.类未找到异常
ClassNotFoundException 是另一个异常,对于刚开始编程的新手来说,它就是一场噩梦。有趣的是,普通 Java 开发人员经常 对 ClassNotFoundException 和 NoClassDefFoundError 异常感到困惑。因此,这两种例外之间的区别仍然是 初级职位面试中最常见的问题之一。当JVM 尝试加载特定类但在类路径中找不到它 时,会发生 ClassNotFoundException 。新 Java 开发人员第一次遇到它的常见地方之一是使用 JDBC 库连接到数据库。在那里,我们将尝试使用 Class.forName("JDBCdriver") 之类的代码加载驱动程序。 这里有一篇关于 ClassNotFoundException 的好文章。尝试理解 Java类加载器的概念是处理这个问题最有效的方法。您可以阅读 如何在 Win/Unix 环境中配置 Java 类路径正如java文档中所述,以下情况会发生异常:
  • 您尝试使用 Class.forName 方法加载类,但 .class 文件不在类路径中。这是此处列出的三种情况中最常见的情况。
  • 当类加载器尝试使用 loadClass 加载类时。
  • 当类加载器尝试使用 findSystemClass 加载类时。
3.空指针异常
对于初学者来说,这个异常比前两个更容易理解。此外, 这个异常很容易识别,因为 当发生异常时,有关异常的消息 会指示发生异常的程序中的行号。当 JVM 尝试访问对象或尝试调用对象的方法并收到 null 而不是对该对象的引用时,会发生此异常。Java Doc 还指出了以下原因:
  • 访问或更改无效对象的方法。(即,它不是对 JVM 对象的引用,而是 null)
  • 当数组无效时获取数组的长度。(例如未初始化)
  • 尝试访问不存在的对象类型数组元素。(即,当数组元素包含 null 而不是对象引用时)
避免此异常的最简单方法是使用非 NULL 检查。然而,迟早这会成为 Java 开发实践,你会发现到处都是非 NULL 检查。有趣的是,到处 插入非 NULL 检查并不被认为是好的编程风格。使用非 NULL 检查的主要原因是开发人员希望在失败或错误时传递 null 对象。相反,程序员应该使用 返回空对象而不是 null 值作为程序在发生错误时的行为的基本逻辑,这是 一种良好的编程实践。然而,采用这种编程实践比看起来更困难。
我们的资源中有一篇关于此的好文章
4.类转换异常
这是初学者熟悉的另一个异常,当尝试将对象转换为不是其子类的类时会发生这种情况。同样,这很容易理解、识别并且修复起来也很简单。当运行时对象的类型未知时,避免此异常的一种方法是使用 “InstanceOf”来检查该对象是否是特定类的实例。
5. ArrayIndexOutOfBoundsException 异常
此异常是不言自明的,当 JVM 尝试访问具有不存在索引(例如负数 (-1) 或大于或等于数组大小)的数组元素时,就会发生此异常。 它很容易理解、定义和纠正。例如,创建循环时 for (i = 0; i <= cmd_stack.length; i++) System.out.println(cmd_stack[i]); 会出现异常,因为数组中索引从0开始,而length方法返回元素的数量,并且该数量比最后一个索引的值大1。正确使用 for (i = 0; i < cmd_stack.length; i++) System.out.println(cmd_stack[i]);
6.非法参数异常
这种异常不太常见,而且相当容易理解、识别和解决。当 JVM 尝试调用不存在的方法或带有无效参数的方法时,就会发生这种情况。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION