热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java常见的49个错误及避免方法!

学习java的同学,在开发Java软件时可能会遇到许多类型的错误,但大多数是可以避免的。为此我们罗列了49个最常见的Java编码错误,其中

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

编译器错误

学习java的同学,给大家推荐一个群:638855753,找群管理可以领取学习视频。群里还会不定期的分享学习资料。大佬和小白都欢迎哦!

当Java软件代码通过编译器运行时,会创建编译器错误消息。谨记编译器可能会针对一个错误抛出许多错误消息。所以得修复第一个错误并重新编译。这样做可以解决很多问题。

1.“…Expected”

当代码中缺少某些东西时,会发生此错误。通常是因为缺少分号或右括号。

private static double volume(String solidom, double alturam, double areaBasem, double raiom) {double vol; if (solidom.equalsIgnoreCase("esfera"){vol=(4.0/3)*Math.pi*Math.pow(raiom,3);} else { if (solidom.equalsIgnoreCase("cilindro") {vol=Math.pi*Math.pow(raiom,2)*alturam;} else {vol=(1.0/3)*Math.pi*Math.pow(raiom,2)*alturam;}} return vol;}

通常,此错误消息不会精确确定问题的确切位置。为了找到错误:

小编也是一名从事了6年java开发的全栈工程师,花了近一个月整理了一份较适合18年学习的java干货,送给每一位java小伙伴
加QQ群:818464711(招募中)

  • 确保所有的左括号都有一个对应的右括号。

  • 在查看指示的Java代码行之前顺便看看行。此Java软件错误没有被编译器注意到,直到在代码中更深层次地查看。

  • 有时一个字符,如一个左括号,并不应该放在Java代码的原先位置。所以开发人员没有放置一个右括号来平衡括号。

点击查看关于错误的圆括号会如何导致错误(@StackOverflow)的示例。

2.“Unclosed String Literal”

如果字符串文字结束时没有引号的话,会创建“Unclosed String Literal”的错误消息,并且消息将显示在与错误相同的行上。(@DreamInCode)Literal是值的源代码。

public abstract class NFLPlayersReference { private static Runningback[] nflplayersreference; private static Quarterback[] players; private static WideReceiver[] nflplayers; public static void main(String args[]){Runningback r = new Runningback("Thomlinsion");Quarterback q = new Quarterback("Tom Brady");WideReceiver w = new WideReceiver("Steve Smith");NFLPlayersReference[] NFLPlayersReference;Run();// {NFLPlayersReference = new NFLPlayersReference [3];nflplayersreference[0] = r;players[1] = q;nflplayers[2] = w; for ( int i = 0; i

通常。这种情况发生在:

  • 字符串文字不以引号结尾。这很容易纠正,加上所需的引号,闭合字符串文字即可。

  • 字符串文字扩展超过一行。长字符串文字可以分解成字符串文字,并加上加号(“+”)。

  • 作为字符串文字一部分的引号不通过反斜杠(“”)进行转义。

点击阅读关于Java软件错误消息Unclosed String Literal的讨论。(@Quora)

3.“Illegal Start of an Expression”

出现“Illegal Start of an Expression”错误的原因有很多。因此名列不太有用的错误消息之一。有些开发者甚至认为这是由坏的代码造成的。

通常,创建表达式是为了生成新的值或为变量分配值。编译器期望找到表达式,但因为语法不符合预期而找不到表达式。(@StackOverflow)在这些语句中就可以发现此错误。

} // ADD IT HEREpublic void newShape(String shape) { switch (shape) { case "Line":Shape line = new Line(startX, startY, endX, endY);shapes.add(line); break; case "Oval":Shape oval = new Oval(startX, startY, endX, endY);shapes.add(oval); break; case "Rectangle":Shape rectangle = new Rectangle(startX, startY, endX, endY);shapes.add(rectangle); break; default:System.out.println("ERROR. Check logic.");}}} // REMOVE IT FROM HERE}

点击浏览关于如何排除“Illegal Start of an Expression”错误的讨论。(@StackOverflow)

4.“Cannot Find Symbol”

这是一个非常常见的问题,因为Java中的所有标识符都需要在被使用之前进行声明。 发生错误的原因在于编译代码时,编译器不明白标识符的含义。

Java 常见的49个错误及避免方法!翻译作业:码农网-小峰

可能收到“Cannot Find Symbol”信息的原因有很多:

  • 标识符声明时的拼写可能与在代码中使用时的拼写不同。

  • 变量从未被声明。

  • 变量使用时与声明未在同一范围内。

  • 类没有导入。

点击阅读有关“Cannot Find Symbol”错误的详细讨论以及产生此问题的代码示例。(@StackOverflow)

5.“Public Class XXX Should Be in File”

当XXX类和Java程序文件名不匹配时,会发生“Public Class XXX Should Be in File”消息。只有当类和Java文件相同时,代码才会被编译。(@coderanch):

package javaapplication3;public class Robot { int xlocation; int ylocation; String name; static int ccount = 0; public Robot(int xxlocation, int yylocation, String nname) { xlocation = xxlocation; ylocation = yylocation; name = nname; ccount++; }} public class JavaApplication1 {public static void main(String[] args) { robot firstRobot = new Robot(34,51,"yossi"); System.out.println("numebr of robots is now " + Robot.ccount); }}

为解决这个问题:

  • 类和文件命名相同。

  • 确保两名称的情况一致。

点击查阅“Public Class XXX Should Be in File”错误的示例。(@StackOverflow)

6.“Incompatible Types”

“Incompatible Types”是指定语句尝试将变量与类型表达式配对时发生的逻辑错误。 通常会在代码尝试将文本字符串放入到整型中时出现,反之亦然。这并非Java语法错误。(@StackOverflow)

test.java:78: error: incompatible typesreturn stringBuilder.toString();^required: intfound: String1 error

当编译器给出“Incompatible Types”消息时,就不是简单修复可以摆平的了:

  • 有可以转换类型的函数。

  • 开发人员可能需要更改代码预期的功能。

查看此例子,里面说明了如何试着将一个字符串分配给一个整数,出现“Incompatible Types”消息。(@StackOverflow)

7.“Invalid Method Declaration; Return Type Required”

此Java软件错误消息表示方法签名中未明确声明方法的返回类型。

public class Circle{ private double radius; public CircleR(double r) {radius = r;} public diameter() { double d = radius * 2; return d;}}

有若干途径会触发“Invalid Method Declaration; Return Type Required” 错误:

  • 忘记声明类型

  • 如果方法没有返回值,那么需要将“void”声明为方法签名中的类型。

  • 构造函数名称不需要声明类型。 但是,如果构造函数名称中存在错误,那么编译器将会把构造函数视为没有指定类型的方法。

查看此说明构造函数命名如何触发“Invalid Method Declaration; Return Type Required” 问题的例子。(@StackOverflow)

8.“Method in Class Cannot Be Applied to Given Types”

此Java软件错误消息是比较有用的错误消息之一。 它解阐明了方法签名正在调用错误的参数。

RandomNumbers.java:9: error: method generateNumbers in class RandomNumbers cannot be applied to given types;generateNumbers();required: int[]found:generateNumbers();reason: actual and formal argument lists differ in length

调用的方法期待方法声明中定义的某些参数。检查方法声明并仔细调用,以确保它们是兼容的。

查看此讨论,里面说明了Java软件错误消息如何识别在方法声明和方法调用中由参数创建的不兼容性。(@StackOverflow)

9.“Missing Return Statement”

当一个方法没有返回语句时,就会出现“Missing Return Statement”的消息。每个返回值(非void类型)的方法都必须有一个字面上返回该值的语句,以便在方法之外调用它。

public String[] OpenFile() throws IOException { Map map = new HashMap();FileReader fr = new FileReader("money.txt");BufferedReader br = new BufferedReader(fr); try{ while (br.ready()){ String str = br.readLine(); String[] list = str.split(" ");System.out.println(list); }} catch (IOException e){System.err.println("Error - IOException!");}}

编译器抛出“Missing Return Statement”消息的原因有若干:

  • 返回语句由于错误被省略。

  • 该方法没有返回任何值,但类型void在方法签名中未声明。

查看如何修复“Missing Return Statement”Java软件错误的示例。(@StackOverflow)

10.“Possible Loss of Precision”

当更多的信息被分配给一个变量而超过它的容量,就会发生“Possible Loss of Precision”消息。如果出现这种情况,那么碎片就会被扔掉。 如果这样没有关系,那么代码需要将变量显式声明为新的类型。

Java 常见的49个错误及避免方法!翻译作业:码农网-小峰

“Possible Loss of Precision”错误通常发生在:

  • 尝试为整数数据类型的变量分配一个实数。

  • 尝试为整数数据类型的变量分配一个double。

此Java中基本数据类型的解释表述了数据特征。(@Oracle)

11.“Reached End of File While Parsing”

当程序缺少关闭大括号(“}”)时,Java代码中就会发生此错误消息。 有时我们可以通过在代码的末尾放置大括号来快速修复错误。

public class mod_MyMod extends BaseModpublic String Version(){ return "1.2_02";}public void AddRecipes(CraftingManager recipes){recipes.addRecipe(new ItemStack(Item.diamond), new Object[] { "#", Character.valueOf('#'), Block.dirt});}

上述代码将导致以下错误:

java:11: reached end of file while parsing }

编写utilities程序和适当的代码缩进可以更容易地找到这类遗漏的大括号。

此示例表述了缺少了大括号会如何创建“Reached End of File While Parsing”的错误消息。(@StackOverflow)

12.“Unreachable Statement”

当一个语句写在一个阻止它执行的地方时,就会发生“Unreachable statement”错误。通常它出现在中断或返回语句之后。

for(;;){ break;... // unreachable statement}int i=1;if(i==1)...else... // dead code

通常简单地移动返回语句将修复错误。阅读关于如何修复Unreachable Statement Java软件错误的讨论。 (@StackOverflow)

13.“Variable Might Not Have Been Initialized”

当方法中声明的局部变量未初始化时,就会发生这种错误。它也会出现在没有初始值的变量是if语句组成部分的情况下。

int x;if (condition) {x = 5;}System.out.println(x); // x may not have been initialized

阅读此关于如何避免触发“Variable Might Not Have Been Initialized”错误的讨论。(@reddit)

14.“Operator … Cannot be Applied to

当操作符用于非定义中的类型时,就会出现此问题。

operator

当Java代码尝试在计算中使用类型字符串时,通常会发生这种情况。 要修复的话,就需要将字符串转换为整型或浮点型。

阅读此说明非数字类型如何导致Java软件错误从而警报操作符无法应用于类型的例子。 (@StackOverflow)

15.“Inconvertible Types”

当Java代码尝试执行非法转换时,就会发生“Inconvertible Types”错误。

TypeInvocationConversionTest.java:12: inconvertible typesfound : java.util.ArrayList>required: java.util.ArrayList>lessRestrictiveClassList = (ArrayList>) classList;

例如,布尔值不能转换为整型。

阅读此关于如何在Java软件中转换不可转换的类型的讨论。(@StackOverflow)

16.“Missing Return Value”

当return语句包含不正确的类型时,你将收到“Missing Return Value”的消息。例如,以下代码:

public class SavingsAcc2 { private double balance; private double interest; public SavingsAcc2() {balance = 0.0;interest = 6.17;} public SavingsAcc2(double initBalance, double interested) {balance = initBalance;interest = interested;} public SavingsAcc2 deposit(double amount) {balance = balance + amount; return;} public SavingsAcc2 withdraw(double amount) {balance = balance - amount; return;} public SavingsAcc2 addInterest(double interest) {balance = balance * (interest / 100) + balance; return;} public double getBalance() { return balance;}}

返回以下错误:

SavingsAcc2.java:29: missing return value return;^SavingsAcc2.java:35: missing return value return;^SavingsAcc2.java:41: missing return value return;^3 errors


推荐阅读
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文整理了Java中java.lang.NoSuchMethodError.getMessage()方法的一些代码示例,展示了NoSuchMethodErr ... [详细]
  • 本文整理了Java中com.evernote.android.job.JobRequest.getTransientExtras()方法的一些代码示例,展示了 ... [详细]
author-avatar
zhiting999977
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有