编译时Java最常见的错误

简介:

学习一种新的编程语言总是一种挑战,因为简单的失误就可以产生错误,对于门外汉来说都是神秘和充满困惑的。如果你不是足够幸运有一个有经验的程序员在旁边看着你并提供指导,排除你代码的故障将是非常令人沮丧的。

   如果你正学习Java语言,你在编译和执行代码的时候遇到问题,一般来说问题将分为2类:无论你遇到的是编译时错误,这说明你的程序编译失败,还是你遇 到运行时错误,这是指错误发生在你成功地编译了程序但不能运行并且没有产生错误。当然,在你遇到一个运行时错误之前,你的代码必须首先能够编译,所以在这 里我们将研究最常见的开发者可能遇到的编译时错误的原因。

  最常见的编译时错误

  我们将使用下面的代码作为一个Java示例类作为讨论:

public class Game {
    public static void main(String args[]) {
    System.out.println(“If I choose Paper,”);
    System.out.println(“And you choose Scissors,”);
    System.out.println(“Then I win, and you lose!”);
    }
    }

   Java文件错误的命名方式--Java文件的名称必须和代码中相关的公共类完全匹配。因此,如果你的代码包含一个公共类“Game”,Java文件必 须命名为“Game.Java”,而不能命名为“game.Java”,或者是“GAME.Java”,再或者是“MyGame.Java”.该文件的名 称和公共类的名称在拼写和大小写上都必须完全匹配。

  代码错误的大小写--Java对大小写敏感,因此“public”与 “Public”或“puBliC”都是不相同的。Java新手往往利用首字母大写,反之亦然,由于大小写错误导致他们编写的代码编译失败。为了进一步复 杂化这个问题,编译时错误信息由于大写问题往往是隐蔽和没有帮助的。例如,如果你把主方法中的声明“public static and void”第一个字母大写,你会得到以下错误消息,说需要一个分号,这真的不是问题的根本:

C:\_jdk1.7\bin>Javac Game.Java
    Game.Java:3: error: ';' expected
    Public Static Void main (String args[]) {
    1 error

   错误匹配的括号--你可以看到你的代码中的每一个开着的括弧,它可能是一个方括号,大括弧或圆括号,你需要一个与之匹配的关闭的括弧。有时,一个程序员 会忘记关闭方法的括弧,或者他们会记得关闭一个方法的括弧,但是忘记关闭类的括弧。不管它是如何发生的,如果括号不匹配,你将会一直得到一个编译时错误。

  例如,一个Java类的最后一个大括弧不关闭,试图编译代码将产生下列编译时错误:

  C:\_jdk1.7\bin>Javac Game.Java

  Game.Java:11: error: reached end of file while parsing

  }

  1 error

   就我个人而言,每当我创建一个新的方法或类时,在敲入开始的括弧之后,我总是敲一些回车,然后添加一个结束的封闭括号。我只有在括号匹配的情况下我才会 开始类主体或方法的代码编码。这样,你的括号会总是匹配状态,你样就可以在编写类或者方法代码时,不用担心将来的某个时刻需要关闭括号。

  漏掉分号--人们越来越熟悉的Java另一个常见编码错误是漏掉需要的分号。作为一项规则,每一个语句必须以分号结束。不幸的是,这个规则有时可能会像它的作用一样另人费解,尤其是当你有一个很难弄清楚它到底是不是一个语句的时候。

  例如,在一个方法的主体里面,所有的“system.out.print”调用都以分号结束。如果我们在一个方法体中忘记给“system.out”加上分号,我们将会得到一个编译时错误消息,就像下面一样:

C:\_jdk1.7\bin>Javac Game.Java
    Game.Java:7: error: ';' expected
    System.out.println(“Then I win and you lose!”)
    1 error

   容易混淆的部分是由于在Java中并不是每一行你写的代码就是一个语句。例如,类声明是不被视为一个语句,所以它不跟分号。同样,一个方法声明是不被视 为一个语句的,所以它也不跟分号。要想容易识别哪个是一个语句哪个不是一个语句需要一定的练习,这也需要一定的时间,但请放心,如果你确实有一个语句,它 就必须跟着一个分号,否则编译器会开始报错。

  随着时间的推移,任何编程语言的细微差别最终都会成为司空见惯的事,而Java众所周知的 请求和市场上其他编程语言没什么区别。如果你是Java新手,记住这四个小提示,如果你碰到一个编译时错误,看看是不是Java文件的命名方式产生的问 题,代码中单词和字母的大小写情况,不匹配的括号和或漏掉分号。保持这四个问题点在你的脑海里将帮助你解决Java代码故障排除问题,并希望减轻一些学习 Java程序语言的挫折。








====================================分割线================================



最新内容请见作者的GitHub页:http://qaseven.github.io/

目录
相关文章
|
20天前
|
Java 开发工具 流计算
flink最新master代码编译出现Java Runtime Environment 问题
在尝试编译Flink源码时遇到Java运行时环境致命错误:EXCEPTION_ACCESS_VIOLATION。问题出现在JVM.dll+0x88212。使用的是Java 11.0.28和Java HotSpot(TM) 64-Bit Server VM。系统为Windows客户端,没有生成核心dump文件。错误日志保存在hs_err_pid39364.log和replay_pid39364.log。要解决这个问题,建议检查JDK版本兼容性,更新JDK或参照错误报告文件提交Bug至http://bugreport.java.com/bugreport/crash.jsp。
|
4月前
|
安全 Java 开发者
【Java】<泛型>,在编译阶段约束操作的数据结构,并进行检查。
【Java】<泛型>,在编译阶段约束操作的数据结构,并进行检查。
24 0
|
4月前
|
IDE Java 开发工具
java编译通过,运行却提示找不到或无法加载主类的解决方案
java编译通过,运行却提示找不到或无法加载主类的解决方案
143 0
|
6月前
|
缓存 Java 编译器
Java编译优化
Java编译优化
|
29天前
|
Java 编译器
有关电脑中idea编译报错问题java: No implementation was created for AdminUserConverter due to having a problem in
有关电脑中idea编译报错问题java: No implementation was created for AdminUserConverter due to having a problem in
32 0
|
1月前
|
Java
916.【Java】javap 查看 class 文件的jdk编译版本
916.【Java】javap 查看 class 文件的jdk编译版本
49 2
|
3月前
|
搜索推荐 Java 编译器
Javac 编译自定义注解及分析 Lombok 的注解实现
Javac 编译自定义注解及分析 Lombok 的注解实现
63 0
|
5月前
|
Java Shell Linux
搭建Sublime Text3 Java编译运行环境
搭建Sublime Text3 Java编译运行环境
|
6月前
|
前端开发 Java jenkins
Jenkins+Gitlab+Nginx+SonarQube+Maven编译Java项目自动发布与基于tag版本回退
Jenkins+Gitlab+Nginx+SonarQube+Maven编译Java项目自动发布与基于tag版本回退
252 0
|
6月前
|
Java jenkins 应用服务中间件
Jenkins+Gitlab+Nginx+Maven编译Java项目自动发布与基于tag版本回退(重复构建问题已解决)
Jenkins+Gitlab+Nginx+Maven编译Java项目自动发布与基于tag版本回退(重复构建问题已解决)