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 };

相关文章

Java 中的静态字段和静态方法

还记得我们写的第一个 Java 代码吗?public class Main { public static void main(String[] args) { System....

Java程序员必备技能:静态方法的正确使用姿势!

“静态方法是Java中的一种方法,它属于类而不是类的实例,这意味着你可以在不创建类的实例的情况下调用它,直接通过类名来访问,静态方法在内存中只有一份,无论该类被实例化多少次,它的静态方法都只有一份。”...

面试官:为什么java中静态方法不能调用非静态方法和变量?

这个可能很多人之前学习jvm的时候都会遇到,属于一个小问题,写这篇文章的原因是我在看java相关的面试题目中遇到的,因此顺手总结一下:一、例子我们先看效果:我们在静态方法main中调用非静态变量或者是...

为何要在Java中使用静态类?

在Java中,static关键字可以被用于变量,类,代码块和方法。当我们使用static关键字去修饰它们之中的任何一个时,意味着这个指定的成员从属与这个类型本身。换言之, 一个静态成员被创建完成后可以...

Java的“泛型”特性,你以为自己会了?(万字长文)

使用Java的小伙伴,对于Java的一些高级特性一定再熟悉不过了,例如集合、反射、泛型、注解等等,这些可以说我们在平时开发中是经常使用到的,尤其是集合,基本是只要写代码没有用不到的,今天我们先来谈谈泛...

阿里Java三面:分布式延时任务方案解析,万字长文一篇点通你

前言在开发中,往往会遇到一些关于延时任务的需求。例如生成订单30分钟未支付,则自动取消生成订单60秒后,给用户发短信对上述的任务,我们给一个专业的名字来形容,那就是延时任务。那么这里就会产生一个问题,...