Java错误排行:50种常见bug及如何避免它们(二)

createh53个月前 (01-07)技术教程41

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中静态方法不能调用非静态方法和变量?

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

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

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

Java基础知识 - 静态代理/JDK动态代理/Cglib动态代理

1)代理的作用是为指定类构建代理类;1、指定类可能不能够直接被访问,所以在外层包一层代理类,让执行代理类方法;2、也有可能想在执行指定类的方法前后,做一些自己的事情,也可以使用代理类;2)使用哪种代理...

Java静态内部类、匿名内部类、成员式内部类和局部内部类

内部类可以是静态(static)的,可以使用 public、protected 和 private 访问控制符,而外部类只能使用 public,或者默认。成员式内部类在外部类内部直接定义(不在方法内部...

详解Java 中 static 的作用

在 Java 中 static 关键字有4种使用场景,下面分别进行介绍:1.static 成员变量public class Student { // 静态成员变量 private st...

Java对象中非空属性一键转Map,让你的代码飞起来

哈喽,大家好,我是木头左!引言在日常开发中,经常会遇到需要将一个Java对象中的非空属性提取出来,放到一个Map中的情况。这样的做法有很多好处,比如方便进行属性的查找、修改等操作,同时也能够提升代码的...