前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >10个常见的 Java 错误及避免方法之第二集(后续持续发布)

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

作者头像
用户1289394
发布2018-10-25 10:28:34
2.2K0
发布2018-10-25 10:28:34
举报
文章被收录于专栏:Java学习网Java学习网

11.“Reached End of File While Parsing”

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

代码语言:javascript
复制
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
   });
}

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

代码语言:javascript
复制
java:11: reached end of file while parsing }

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

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

12.“Unreachable Statement”

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

代码语言:javascript
复制
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语句组成部分的情况下。

代码语言:javascript
复制
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>”

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

代码语言:javascript
复制
operator < cannot be applied to java.lang.Object,java.lang.Object

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

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

15.“Inconvertible Types”

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

代码语言:javascript
复制
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”的消息。例如,以下代码:

代码语言:javascript
复制
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;
    }
}

返回以下错误:

代码语言:javascript
复制
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错误,例如在以下示例中:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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)访问非静态变量时,就会发生此错误:

代码语言:javascript
复制
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代码尝试在非静态类中调用非静态方法的情况下。 例如,以下代码:

代码语言:javascript
复制
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());
   }
}

将返回错误:

代码语言:javascript
复制
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”的消息。数组的长度是固定的,因此每个数组都需要以所需的长度进行初始化。

以下代码就可以接受:

代码语言:javascript
复制
AClass[] array = {object1, object2}

即:

代码语言:javascript
复制
AClass[] array = new AClass[2];
...array[0] = object1;array[1] = object2;

而非:

代码语言:javascript
复制
AClass[] array;
...array = {object1, object2};

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 11.“Reached End of File While Parsing”
  • 12.“Unreachable Statement”
  • 13.“Variable <X> Might Not Have Been Initialized”
  • 14.“Operator … Cannot be Applied to <X>”
  • 15.“Inconvertible Types”
  • 16.“Missing Return Value”
  • 17.“Cannot Return a Value From Method Whose Result Type Is Void”
  • 18.“Non-Static Variable … Cannot Be Referenced From a Static Context”
  • 19.“Non-Static Method … Cannot Be Referenced From a Static Context”
  • 20.“(array) <X> Not Initialized”
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档