el表达式中可以写入一个未被初始化的变量_Java开发中常见错误及规避技巧

  • Post author:
  • Post category:java


5789f6ea99a8a376a6a2b1869842429c.png

在开发Java软件时可能会遇到许多类型的错误,但大多数可以避免。我们列举了50个最常见的Java软件错误,其中包含代码示例和教程,以帮助您解决常见的编码问题。


编译器错误

编译器错误消息在Java软件代码在编译器执行时产生。需要重点记住的是,一个编译器可能为一个错误抛出多个错误消息。所以修复第一个错误并重编译,就能修复很多的问题。

前端新手学习交流群,如果有想学习前端或者交流经验的都可以加入,一起互相学习交流:→→→点击我即可加入圈子


1.“…可预料的”

当编码出现遗漏时,就会发生这类错误。可能是缺失了一个括号或者分号。

275e3367b50680787c0e23a4c271b077.png

这种错误消息常常不会准确的定位到错误发生的位置。为了找到错误,建议:

  • 确保所有的左括号有对应匹配的右括号。
  • (使用IDE,译者注)在代码行前的提示中检查。这种Java软件错误不要由编译器来关注,应该把更后面的工作交给它。
  • 有时候一个字符,比如一个左括号不应该写在Java代码的开始处。这样造成的结果是开发者不会写右括号去凑成一对。


2.“未封闭的String表达式”

“未封闭的String表达式”错误消息发生在Sting表达式结束时没有引号标记,错误消息将在发生错误的同一行提示出来。一个String表达式在源码中是一个值。

71a94901e167a75ccfab084c6f296429.png

通常情况下,错误发生在:

  • String表达式结束时没有使用引号标记。这种错误只要在String表达式结束是使用引号就能简单的改正
  • String表达式超过一行时。长的String表达式可以被拆分成多个表达式,然后用”+”连接起来。
  • 引号是String表达式中的元素又没有使用下划线“”进行转义。


3.“非法的表达式开头”

出现“非法表达式开头”错误的原因有很多。但它最终归类于一个不太有用的错误消息之一。有些开发者说这是由糟糕的代码造成的。

通常,创建表达式是用于生成新值或为变量赋值。编译器期望找到一个表达式,但找不到它,因为语法不符合预期。在下面这些语句中可以找到此错误。

caab4378d2e536b83edfb2282f97b946.png


4.“找不到符号”

这是一个非常常见的问题,因为Java中的所有标识符都需要在使用之前进行声明。当编译代码时,编译器并不理解标识符的含义。

在你遇到“找不到符号”消息时可能有很多种原因:

  • 标识符声明时的拼写可能与代码中使用时的拼写不同。
  • 该变量从未被声明。
  • 该变量使用的位置与其声明的作用域不同。
  • 类并未被导入。


5.“公共类XXX应该在文件中出现”

“公共类XXX应该在文件中出现”这个消息出现在类XXX和Java程序文件名不一致时。源代码只有在类名和Java文件名一样时才会被编译。

513dbc22fcbfd530dd5e9270803503f4.png

要修复这种情况:

  • 类名和文件名一样。
  • 确保这两个名字的大小写一致。


6.“不兼容类型”

“不兼容的类型”是在赋值语句中尝试将变量与类型表达式匹配时触发的逻辑错误。通常是在代码尝试将文本字符写入到整数中时出现,反之亦然。这不是Java语法错误。

当编译器给出“不兼容的类型”消息时,确实没有一个简单的修复方案:

  • 有可以转换类型的函数。
  • 开发人员可能需要按照代码的预期修改之。


7.“无效的方法声明;需求返回类型”

此错误表示方法签名中没有明确说明方法的返回类型。

有几种方式会触发“无效的方法声明;需求返回类型“错误:

  • 忘记说明返回类型
  • 如果方法没有返回值,那么需要用“void”表示方法签名中的返回类型。
  • 构造函数名称不需要说明返回类型。但是,如果构造函数名称中出现错误,那么编译器会将构造函数视为没有指定类型的方法。


8.“类Y中的方法X不能应用于给定类型”

此错误消息是Java中最有用的错误消息之一。它解释了方法签名是如何调用错误参数的。

e5cb53cac42c8b4c01ed0964309460b5.png

方法在被调用时期望获取在方法声明中定义的某些参数。检查方法声明、谨慎调用方法,以确保声明和调用的参数是兼容的。


9.“缺少返回语句”

当一个方法缺少返回语句时,会发生“缺少返回语句”错误。每一个有返回值的方法(非void类型)必须有一句字面上的语句用以返回返回值,以便在方法外调用该值。

43ed0cb095554e3c988c9640af7234ae.png

下面列举了一些编译器抛出“缺少返回语句”的消息的原因:

  • 返回语句被错误地省略了
  • 一个方法没有返回任何值,但是在方法签名中没有声明为void类型


10.“精度可能丢失”

当将超过一个变量可以保存的信息分配给该变量时,会发生“精度可能丢失”问题。如果发生这种情况,超出的信息将会被扔掉。如果这样做没问题,那么代码需要将变量显式地声明为新类型。

下面情况会发生“精度可能丢失”错误:

  • 将一个实数赋值给一个整型变量。
  • 将一个双精度浮点数赋值给一个整型变量。


11.“解析时到达文件末尾”

这个错误信息经常发生在Java程序缺少“}”符号时。通常在代码末加上“}”符号能很快解决这个问题。

5fe155d21d6300cba068fd3035a6f0df.png

上述代码的运行结果是下列错误:

  • 代码编写工具和适当的代码缩进可以更容易地找到这些不对的大括号。
  • 这个示例展示了缺少的大括号如何造成“解析时到达文件结尾”的错误消息。


12.“语句不可达”

“语句不可达”发生在当语句被放在一个不会被执行的位置时候。通常是在break语句或return语句后面。

通常简单地移动return语句就能解决这个错误。


13.“变量x可能未被初始化”

这个问题发生在当方法内局部变量在声明时没有被初始化的时候。当一个变量未被初始化但是出现在if语句中的时候会发生该错误。


14.“操作符…不能应用于x”

这个情况发生于当操作符应用于没有定义其使用方法的类型上。

当Java代码尝试使用string类型进行数学计算时会经常出现这个问题。为了解决它,string需要被转化为integer或float。


15.“不能转换的类型”

“不能转换的类型”错误发生在Java代码尝试进行非法转换的时候。

例如,boolean不能转换为int。


16.“缺少返回值”

当返回语句返回一个错误的类型时,你就会收到“缺少返回值”消息。例如下列代码:

返回下列错误信息:

通常,那些返回语句没有返回任何东西。


17.“返回类型为void的方法不能返回一个值”

当一个返回类型为void的方法尝试返回任何值的时候就会发生这个Java错误,例如下面的例子:

通常改变方法签名,使之和返回语句的返回类型相配就能解决这个问题。在上述例子中,void可以改为int:


18.“非静态变量…不能在静态上下文中被引用”

当编译器尝试在一个静态方法中访问一个非静态变量时会发生该错误。

为了解决“非静态变量…不能在静态上下文中被引用”的错误,有下述两种方法:

  • 在签名中将变量声明为静态变量。
  • 在静态方法中创建一个非静态对象的示例


19.“非静态方法…不能在静态上下文中被引用”

这个情况发生在Java代码尝试在非静态类中调用非静态方法的时候。例如下述代码:

将会返回下述错误:

为了在静态方法中调用非静态方法,可以声明一个类的实例来调用这个非静态方法。


20.“(array)<X>NotInitialized”(数组未初始化)

当数组已声明但未初始化时,你将得到“(array)<X>未初始化”的消息。数组的长度是固定的,因此每个数组都需要按照实际长度进行初始化。

码字不容易,帮忙点个赞,点赞关注是我写作的动力,谢谢!