Java错误排行:50种常见bug及如何避免它们(二)
11.“解析时到达文件末尾”
当程序缺少右花括号(“}”)时,此错误消息通常在Java中出现。有时可以通过将其放在代码末尾来快速修复。
public class mod_MyMod extends BaseMod
public 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 :达到最终 的文件,同时解析}
编码实用程序和适当的代码缩进可以使查找这些不平衡括号的过程变得更加容易。
此示例显示了缺少的花括号如何创建“解析时文件到达末尾”错误消息。(@StackOverflow)
12.“无法到达的陈述”
如果在无法执行的地方编写了一条语句,则会发生“无法到达的语句”。通常,这是在break或return语句之后。
for(;;){
break;
… // unreachable statement
}
int i=1;
if(i==1)
…
else
… // dead code
通常,仅移动return语句即可解决该错误。阅读有关如何修复不可访问的语句Java软件错误的讨论。(@StackOverflow)
13.“变量<X>可能尚未初始化”
当方法中声明的局部变量尚未初始化时,会发生这种情况。当没有初始值的变量是if语句的一部分时,可能会发生这种情况。
int x;
if (condition) {
x = 5;
}
System.out.println(x); // x可能尚未初始化
阅读有关如何避免触发“变量<X>可能尚未初始化”错误的讨论。
14.“运算符..不能应用于<X>”
当运算符用于类型而不是在其定义中时,会发生此问题。
运算符 <不适用于java 。郎。对象,java 。郎。目的
当Java代码尝试在计算中使用类型字符串时,通常会发生这种情况。要解决此问题,需要将字符串转换为整数或浮点数。
阅读此示例,了解非数字类型如何引起Java软件错误警告,提示操作员无法应用于该类型。(@StackOverflow)
15.“不可兑换类型”
当Java代码尝试执行非法转换时,会发生“不可转换类型”错误。
TypeInvocationConversionTest 。java :12 :不可转换类型
发现 :java 。实用程序。ArrayList < java 。郎。类<? 扩展 TypeInvocationConversionTest 。接口1 >>
必需:java 。实用程序。ArrayList < java 。郎。类<?>>
lessRestrictiveClassList = (ArrayList <类<?>>)classList ;
^
例如,布尔值不能转换为整数。
阅读有关如何在Java软件中转换不可转换类型的讨论。(@StackOverflow)
16.“缺少返回值”
当return语句包含错误的类型时,您将收到“缺少返回值”消息。例如,以下代码:
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;
}
}
Returns the following error:
SavingsAcc2.java:29: missing return value
return;
^
SavingsAcc2.java:35: missing return value
return;
^
SavingsAcc2.java:41: missing return value
return;
3个错误
通常,有一个return语句不返回任何东西。
阅读有关如何避免“缺少返回值” Java软件错误消息的讨论。(@coderanch)
17.“无法从结果类型为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;
}
//通常可以通过更改方法签名来匹配return语句中的类型来解决此问题。
//在这种情况下,可以将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;
}
阅读有关如何解决“无法从结果类型为void的方法返回值”错误的讨论。(@StackOverflow)
18.“非静态变量”。。。不能从静态上下文中引用”
当编译器尝试从静态方法(@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
}
}
修复“非静态变量”。。。无法从静态上下文引用错误”,可以完成两件事:
- 可以在签名中将变量声明为静态。
- 该代码可以在static方法中创建非静态对象的实例。
阅读本教程,该教程解释了静态变量和非静态变量之间的区别。(@sitesbay)
19.“非静态方法”。。。不能从静态上下文中引用”
当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());
}
}
将返回此错误:
异常 在线程“主要”的Java 。郎。错误: 未解决的编译问题:
不能让一个静态参考非-静态方法getAge () 从类型示例
从静态方法调用非静态方法就是声明一个调用非静态方法的类的实例。
阅读有关非静态方法和静态方法之间的区别的解释。
20。“(数组)<X>未初始化”
声明但未初始化数组时,将显示“((数组)<X>未初始化)”消息。数组的长度是固定的,因此需要使用所需的长度来初始化每个数组。
可以接受以下代码:
AClass []数组= { object1 ,object2 }
照原样:
AClass [] array = new AClass [ 2 ];
…
数组[ 0 ] = object1 ;
数组[ 1 ] = object2 ;
但不是:
AClass []数组;
…
数组= { object1 ,object2 };