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 HEREpublic 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 typesreturn stringBuilder.toString();^required: intfound: String1 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 <X> in Class <Y> 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<String, Double> 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 Statement”Java软件错误的示例。(@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 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)

12.“Unreachable Statement”

当一个语句写在一个阻止它执行的地方时,就会发生“Unreachable statement”错误。通常它出现在中断或返回语句之后。

for(;;){ break;... // unreachable statement}int i=1;if(i==1)...else... // dead code

通常简单地移动返回语句将修复错误。阅读关于如何修复Unreachable Statement Java软件错误的讨论。 (@StackOverflow)

13.“Variable <X> Might Not Have Been Initialized”

当方法中声明的局部变量未初始化时,就会发生这种错误。它也会出现在没有初始值的变量是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)

14.“Operator … Cannot be Applied to <X>”

当操作符用于非定义中的类型时,就会出现此问题。

operator < cannot be applied to java.lang.Object,java.lang.Object

当Java代码尝试在计算中使用类型字符串时,通常会发生这种情况。 要修复的话,就需要将字符串转换为整型或浮点型。

阅读此说明非数字类型如何导致Java软件错误从而警报操作符无法应用于类型的例子。 (@StackOverflow)

15.“Inconvertible Types”

当Java代码尝试执行非法转换时,就会发生“Inconvertible Types”错误。

TypeInvocationConversionTest.java:12: inconvertible typesfound : java.util.ArrayList<java.lang.Class<? extends TypeInvocationConversionTest.Interface1>>required: java.util.ArrayList<java.lang.Class<?>>lessRestrictiveClassList = (ArrayList<Class<?>>) 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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容

  • 对象的创建与销毁 Item 1: 使用static工厂方法,而不是构造函数创建对象:仅仅是创建对象的方法,并非Fa...
    孙小磊阅读 1,878评论 0 3
  • 简书,吾常听人提及,曰其善,为社交软件之一股清流。吾奇之,遂下载,前来观之。 四海之内皆兄弟。来到...
    捂face男阅读 270评论 0 0
  • 《黍離 • 詩經》 彼黍離離,彼稷之苗。 行邁靡靡,中心摇摇。 知我者謂我心憂,不知我者謂我何求。 悠悠蒼天!此何...
    墨影teresa阅读 1,567评论 4 15
  • 是什么力量 扯的眼皮不能眨 阳光灿烂的如刺 闭上阴暗 迷迷糊糊 蓦闻秀女莺嗓 吟唱 醉在梦中
    惜1王福利阅读 276评论 2 7
  • 一、缘起 从多看上翻到《思想独步旅行》这本书,其中包含了三岛由纪夫、克罗瑟斯、赫尔曼·黑塞等在人生不同阶段的思考。...
    苦寂生阅读 733评论 0 3