在开发Java软件时可能会遇到许多类型的错误,但大多数是可以避免的。为此我们罗列了50个最常见的Java编码错误,其中包含代码示例和教程,以帮助大家解决常见的编码问题。
编译器错误
当Java软件代码通过编译器运行时,会创建编译器错误消息。谨记编译器可能会针对一个错误抛出许多错误消息。所以得修复第一个错误并重新编译。这样做可以解决很多问题。
1.…Expected
当代码中缺少某些东西时,会发生此错误。通常是因为缺少分号或右括号。
private static double volume(String solidom, double alturam, double areaBasem, double raiom) {
double vol;
if (solidom.equalsIgnoreCase("esfera"){
vol=(4.0/3)*Math.pi*Math.pow(raiom,3);
}
else {
if (solidom.equalsIgnoreCase("cilindro") {
vol=Math.pi*Math.pow(raiom,2)*alturam;
}
else {
vol=(1.0/3)*Math.pi*Math.pow(raiom,2)*alturam;
}
}
return vol;
}
通常,此错误消息不会精确确定问题的确切位置。为了找到错误:
- 确保所有的左括号都有一个对应的右括号。
- 在查看指示的Java代码行之前顺便看看行。此Java软件错误没有被编译器注意到,直到在代码中更深层次地查看。
- 有时一个字符,如一个左括号,并不应该放在Java代码的原先位置。所以开发人员没有放置一个右括号来平衡括号。
点击查看关于错误的圆括号会如何导致错误(@StackOverflow)的示例。
2.Unclosed String Literal
如果字符串文字结束时没有引号的话,会创建Unclosed String Literal的错误消息,并且消息将显示在与错误相同的行上。(@DreamInCode)Literal是值的源代码。
public abstract class NFLPlayersReference {
private static Runningback[] nflplayersreference;
private static Quarterback[] players;
private static WideReceiver[] nflplayers;
public static void main(String args[]){
Runningback r = new Runningback("Thomlinsion");
Quarterback q = new Quarterback("Tom Brady");
WideReceiver w = new WideReceiver("Steve Smith");
NFLPlayersReference[] NFLPlayersReference;
Run();// {
NFLPlayersReference = new NFLPlayersReference [3];
nflplayersreference[0] = r;
players[1] = q;
nflplayers[2] = w;
for ( int i = 0; i < nflplayersreference.length; i++ ) {
System.out.println("My name is " + " nflplayersreference[i].getName());
nflplayersreference[i].run();
nflplayersreference[i].run();
nflplayersreference[i].run();
System.out.println("NFL offensive threats have great running abilities!");
}
}
private static void Run() {
System.out.println("Not yet implemented");
}
}
通常。这种情况发生在:
- 字符串文字不以引号结尾。这很容易纠正,加上所需的引号,闭合字符串文字即可。
- 字符串文字扩展超过一行。长字符串文字可以分解成字符串文字,并加上加号(+)。
- 作为字符串文字一部分的引号不通过反斜杠(\)进行转义。
点击阅读关于Java软件错误消息Unclosed String Literal的讨论。(@Quora)
3.Illegal Start of an Expression
出现Illegal Start of an Expression错误的原因有很多。因此名列不太有用的错误消息之一。有些开发者甚至认为这是由坏的代码造成的。
通常,创建表达式是为了生成新的值或为变量分配值。编译器期望找到表达式,但因为语法不符合预期而找不到表达式。(@StackOverflow)在这些语句中就可以发现此错误。
} // ADD IT HERE
public void newShape(String shape) {
switch (shape) {
case "Line":
Shape line = new Line(startX, startY, endX, endY);
shapes.add(line);
break;
case "Oval":
Shape oval = new Oval(startX, startY, endX, endY);
shapes.add(oval);
break;
case "Rectangle":
Shape rectangle = new Rectangle(startX, startY, endX, endY);
shapes.add(rectangle);
break;
default:
System.out.println("ERROR. Check logic.");
}
}
} // REMOVE IT FROM HERE
}
点击浏览关于如何排除Illegal Start of an Expression错误的讨论。(@StackOverflow)
4.Cannot Find Symbol
这是一个非常常见的问题,因为Java中的所有标识符都需要在被使用之前进行声明。 发生错误的原因在于编译代码时,编译器不明白标识符的含义。
可能收到Cannot Find Symbol信息的原因有很多:
- 标识符声明时的拼写可能与在代码中使用时的拼写不同。
- 变量从未被声明。
- 变量使用时与声明未在同一范围内。
- 类没有导入。
点击阅读有关Cannot Find Symbol错误的详细讨论以及产生此问题的代码示例。(@StackOverflow)
5.Public Class XXX Should Be in File
当XXX类和Java程序文件名不匹配时,会发生Public Class XXX Should Be in File消息。只有当类和Java文件相同时,代码才会被编译。(@coderanch):
package javaapplication3;
public class Robot {
int xlocation;
int ylocation;
String name;
static int ccount = 0;
public Robot(int xxlocation, int yylocation, String nname) {
xlocation = xxlocation;
ylocation = yylocation;
name = nname;
ccount++;
}
}
public class JavaApplication1 {
public static void main(String[] args) {
robot firstRobot = new Robot(34,51,"yossi");
System.out.println("numebr of robots is now " + Robot.ccount);
}
}
为解决这个问题:
- 类和文件命名相同。
- 确保两名称的情况一致。
点击查阅Public Class XXX Should Be in File错误的示例。(@StackOverflow)
6.Incompatible Types
Incompatible Types是指定语句尝试将变量与类型表达式配对时发生的逻辑错误。 通常会在代码尝试将文本字符串放入到整型中时出现,反之亦然。这并非Java语法错误。(@StackOverflow)
test.java:78: error: incompatible types
return stringBuilder.toString();
^
required: int
found: String
1 error
当编译器给出Incompatible Types消息时,就不是简单修复可以摆平的了:
- 有可以转换类型的函数。
- 开发人员可能需要更改代码预期的功能。
查看此例子,里面说明了如何试着将一个字符串分配给一个整数,出现Incompatible Types消息。(@StackOverflow)
7.Invalid Method Declaration; Return Type Required
此Java软件错误消息表示方法签名中未明确声明方法的返回类型。
public class Circle
{
private double radius;
public CircleR(double r)
{
radius = r;
}
public diameter()
{
double d = radius * 2;
return d;
}
}
有若干途径会触发Invalid Method Declaration; Return Type Required 错误:
- 忘记声明类型
- 如果方法没有返回值,那么需要将void声明为方法签名中的类型。
- 构造函数名称不需要声明类型。 但是,如果构造函数名称中存在错误,那么编译器将会把构造函数视为没有指定类型的方法。
查看此说明构造函数命名如何触发Invalid Method Declaration; Return Type Required 问题的例子。(@StackOverflow)
8.Method in Class Cannot Be Applied to Given Types
此Java软件错误消息是比较有用的错误消息之一。 它解阐明了方法签名正在调用错误的参数。
RandomNumbers.java:9: error: method generateNumbers in class RandomNumbers cannot be applied to given types;
generateNumbers();
required: int[]
found:generateNumbers();
reason: actual and formal argument lists differ in length
调用的方法期待方法声明中定义的某些参数。检查方法声明并仔细调用,以确保它们是兼容的。
查看此讨论,里面说明了Java软件错误消息如何识别在方法声明和方法调用中由参数创建的不兼容性。(@StackOverflow)
9.Missing Return Statement
当一个方法没有返回语句时,就会出现Missing Return Statement的消息。每个返回值(非void类型)的方法都必须有一个字面上返回该值的语句,以便在方法之外调用它。
public String[] OpenFile() throws IOException {
Map map = new HashMap();
FileReader fr = new FileReader("money.txt");
BufferedReader br = new BufferedReader(fr);
try{
while (br.ready()){
String str = br.readLine();
String[] list = str.split(" ");
System.out.println(list);
}
} catch (IOException e){
System.err.println("Error - IOException!");
}
}
编译器抛出Missing Return Statement消息的原因有若干:
- 返回语句由于错误被省略。
- 该方法没有返回任何值,但类型void在方法签名中未声明。
查看如何修复Missing Return StatementJava软件错误的示例。(@StackOverflow)
10.Possible Loss of Precision
当更多的信息被分配给一个变量而超过它的容量,就会发生Possible Loss of Precision消息。如果出现这种情况,那么碎片就会被扔掉。 如果这样没有关系,那么代码需要将变量显式声明为新的类型。
Possible Loss of Precision错误通常发生在:
- 尝试为整数数据类型的变量分配一个实数。
- 尝试为整数数据类型的变量分配一个double。
此Java中基本数据类型的解释表述了数据特征。(@Oracle)
11.Reached End of File While Parsing
当程序缺少关闭大括号(})时,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: reached end of file while parsing }
编写utilities程序和适当的代码缩进可以更容易地找到这类遗漏的大括号。
此示例表述了缺少了大括号会如何创建Reached End of File While Parsing的错误消息。(@StackOverflow)
12.Unreachable Statement
当一个语句写在一个阻止它执行的地方时,就会发生Unreachable statement错误。通常它出现在中断或返回语句之后。
for(;;){
break;
... // unreachable statement
}
int i=1;
if(i==1)
...
else
... // dead code
通常简单地移动返回语句将修复错误。阅读关于如何修复Unreachable Statement Java软件错误的讨论。 (@StackOverflow)
13.Variable Might Not Have Been Initialized
当方法中声明的局部变量未初始化时,就会发生这种错误。它也会出现在没有初始值的变量是if语句组成部分的情况下。
int x;
if (condition) {
x = 5;
}
System.out.println(x); // x may not have been initialized
阅读此关于如何避免触发Variable
14.Operator … Cannot be Applied to
当操作符用于非定义中的类型时,就会出现此问题。
operator < cannot be applied to java.lang.Object,java.lang.Object
当Java代码尝试在计算中使用类型字符串时,通常会发生这种情况。 要修复的话,就需要将字符串转换为整型或浮点型。
阅读此说明非数字类型如何导致Java软件错误从而警报操作符无法应用于类型的例子。 (@StackOverflow)
15.Inconvertible Types
当Java代码尝试执行非法转换时,就会发生Inconvertible Types错误。
TypeInvocationConversionTest.java:12: inconvertible types
found : java.util.ArrayList>
required: java.util.ArrayList>
lessRestrictiveClassList = (ArrayList>) classList;
例如,布尔值不能转换为整型。
阅读此关于如何在Java软件中转换不可转换的类型的讨论。(@StackOverflow)
16.Missing Return Value
当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 ValueJava软件错误消息的讨论。(@coderanch)
第一部分完,敬请关注第二部分的内容。
注:译文链接:http://www.codeceo.com/article/50-java-errors-part-1.html,英文原文:50 Common Java Errors and How to Avoid Them (Part 1),翻译作者:码农网– 小峰,转载请注明出处。做一只勤劳的IT干货搬运工,喜欢就给个赞呗。
声明:本文部分素材转载自互联网,如有侵权立即删除 。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容