专栏首页Java学习网10个常见的 Java 错误及避免方法之第二集(后续持续发布)

10个常见的 Java 错误及避免方法之第二集(后续持续发布)

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 <X> Might Not Have Been Initialized”

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

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

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

14.“Operator … Cannot be Applied to <X>”

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

operator < cannot be applied to java.lang.Object,java.lang.Object

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

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

15.“Inconvertible Types”

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

TypeInvocationConversionTest.java:12: inconvertible types
found   : java.util.ArrayList<java.lang.Class<? extends TypeInvocationConversionTest.Interface1>>
required: java.util.ArrayList<java.lang.Class<?>>
    lessRestrictiveClassList = (ArrayList<Class<?>>) 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

通常,有一个返回语句不返回任何东西。

阅读此关于如何避免“Missing Return Value”Java软件错误消息的讨论。(@coderanch)

17.“Cannot Return a Value From Method Whose Result Type Is Void”

当一个void方法尝试返回值时,就会发生此Java错误,例如在以下示例中:

public static void move(){
    System.out.println("What do you want to do?");
    Scanner scan = new Scanner(System.in);    int userMove = scan.nextInt();    return userMove;
}public static void usersMove(String playerName, int gesture){    int userMove = move();    if (userMove == -1)
    {        break;
    }

通常,这可以通过更改方法签名匹配返回语句中的类型来修正错误。在这种情况下,void的实例可以改为int:

public static int move(){
    System.out.println("What do you want to do?");
    Scanner scan = new Scanner(System.in);    int userMove = scan.nextInt();    return userMove;
}

阅读关于如何修复“Cannot Return a Value From Method Whose Result Type Is Void”错误的讨论。(@StackOverflow)

18.“Non-Static Variable … Cannot Be Referenced From a Static Context”

当编译器尝试从静态方法(@javinpaul)访问非静态变量时,就会发生此错误:

public class StaticTest {    private int count=0;    public static void main(String args[]) throws IOException {
        count++; //compiler error: non-static variable count cannot be referenced from a static context
    }
}

要修复“Non-Static Variable … Cannot Be Referenced From a Static Context”错误,可以做这两件事:

  • 在签名中声明此变量为静态。
  • 在静态方法中写代码创建非静态对象的实例。

阅读此介绍静态和非静态变量之间区别的教程。(@sitesbay)

19.“Non-Static Method … Cannot Be Referenced From a Static Context”

此问题发生在Java代码尝试在非静态类中调用非静态方法的情况下。 例如,以下代码:

class Sample{   private int age;   public void setAge(int a)   {
      age=a;
   }   public int getAge()   {      return age;
   }   public static void main(String args[])   {
       System.out.println("Age is:"+ getAge());
   }
}

将返回错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Cannot make a static reference to the non-static method getAge() from the type Sample

从静态方法中调用非静态方法就是声明调用非静态方法的类的实例。

阅读此关于非静态方法和静态方法之间区别的阐述。

20.“(array) <X> Not Initialized”

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

以下代码就可以接受:

AClass[] array = {object1, object2}

即:

AClass[] array = new AClass[2];
...array[0] = object1;array[1] = object2;

而非:

AClass[] array;
...array = {object1, object2};

阅读此关于如何在Java软件中初始化数组的讨论。(@StackOverflow)

本文分享自微信公众号 - Java学习网(javalearns),作者:javalearns.com

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java开发框架之Spring AOP知识总结

    AOP(Aspect-Oriented Programming, 面向切面编程): 是一种新的方法论, 是对传统 OOP(Object-Oriented Pro...

    用户1289394
  • 教你在Java接口中定义方法

    教你在Java接口中定义方法 基本上所有的Java教程都会告诉我们Java接口的方法都是public、abstract类型的,没有方法体的。 但是在JDK8里面...

    用户1289394
  • Java中实现找到两个数组交集的2种方法,开发实用

    1、用HashSet实现的解决方法 实例代码如下: public int[] intersection(int[] nums1, int[] nums2) { ...

    用户1289394
  • 挑战程序竞赛系列(41):4.1中国剩余定理

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.n...

    用户1147447
  • Java能写外挂吗?那就写个跳一跳辅助程序吧

    ##起初是想使用按键精灵脚本程序控制,但还是选择熟悉的java。我这里使用了工具,造成延迟问题。也求教:java控制安卓的正确姿势,

    三哥
  • LeetCode Weekly Contest 29解题思路

    代码很简单,简单说明下思路就出来了。按照题意,不管怎么二分,整个数组都会被划分成两部分和,这两部分和必然一大一小。如nums = [1,4,3,2],划分如下[...

    用户1147447
  • 挑战程序竞赛系列(90):3.6凸包(1)

    挑战程序竞赛系列(90):3.6凸包(1) 传送门:POJ 2187: Beauty Contest 题意: 平面上有N个牧场。i号牧场的位置在格点(xi,y...

    用户1147447
  • 挑战程序竞赛系列(91):3.6凸包(2)

    挑战程序竞赛系列(91):3.6凸包(2) 传送门:POJ 1113: Wall 题意参考hankcs: http://www.hankcs.com/pro...

    用户1147447
  • 挑战程序竞赛系列(94):3.6凸包(5)

    挑战程序竞赛系列(94):3.6凸包(5) 传送门:POJ 2079: Triangle 题意: 求三个点构成的最大三角形面积。 思路: 可以证明,三点构...

    用户1147447
  • Java习惯用法总结

    在Java编程中,有些知识 并不能仅通过语言规范或者标准API文档就能学到的。在本文中,我会尽量收集一些最常用的习惯用法,特别是很难猜到的用法。(Joshua ...

    Java后端工程师

扫码关注云+社区

领取腾讯云代金券