当程序缺少关闭大括号(“}”)时,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)
当一个语句写在一个阻止它执行的地方时,就会发生“Unreachable statement”错误。通常它出现在中断或返回语句之后。
for(;;){ break;
... // unreachable statement}int i=1;if(i==1)
...else
... // dead code
通常简单地移动返回语句将修复错误。阅读关于如何修复Unreachable Statement Java软件错误的讨论。 (@StackOverflow)
当方法中声明的局部变量未初始化时,就会发生这种错误。它也会出现在没有初始值的变量是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)
当操作符用于非定义中的类型时,就会出现此问题。
operator < cannot be applied to java.lang.Object,java.lang.Object
当Java代码尝试在计算中使用类型字符串时,通常会发生这种情况。 要修复的话,就需要将字符串转换为整型或浮点型。
阅读此说明非数字类型如何导致Java软件错误从而警报操作符无法应用于类型的例子。 (@StackOverflow)
当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)
当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)
当一个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)
当编译器尝试从静态方法(@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)
此问题发生在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
从静态方法中调用非静态方法就是声明调用非静态方法的类的实例。
阅读此关于非静态方法和静态方法之间区别的阐述。
当数组被声明但未初始化时,你将得到“(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)