1 Java程序的组织形式

Java程序是一种纯粹的面向对象的程序设计语言,因此Java程序必须以类(class)的形式存在,类(class)是Java程序的最小程序单位。Java程序不允许可执行性语句、方法等成分独立存在,所有的程序部分都必须放在类定义里。

上面的HelloWorld.java程序是一个简单的程序,但还不是最简单的Java程序,最简单的Java程序是只包含一个空类定义的程序。下面将编写一个最简单的Java程序。

程序清单:codes\01\1.5\Test.java

class Test
{
}

这是一个最简单的Java程序,这个程序定义了一个Test类,这个类里没有任何的类成分,是一个空类,但这个Java程序是绝对正确的,如果使用javac命令来编译这个程序,就知道这个程序可以通过编译,没有任何问题。

但如果使用java命令来运行上面的Test类,则会得到如下错误提示:

错误: 在类 Test 中找不到 main 方法, 请将 main 方法定义为:public static void main(String[] args)

上面的错误提示仅仅表明:这个类不能被java命令解释执行,并不表示这个类是错误的。实际上,Java解释器规定:如需某个类能被解释器直接解释执行,则这个类里必须包含main方法,而且main方法必须使用public static void来修饰,且main方法的形参必须是字符串数组类型(String[] args是字符串数组的形式)。也就是说,main方法的写法几乎是固定的。Java虚拟机就从这个main方法开始解释执行,因此,main方法是Java程序的入口。至于main方法为何要采用这么“复杂”的写法,后面章节会有更详细的解释,读者现在只能把这个方法死记下来。

对于那些不包含main方法的类,也是有用的类。对于一个大型的Java程序而言,往往只需要一个入口,也就是只有一个类包含main方法,而其他类都是用于被main方法直接或间接调用的。

2 Java源文件的命名规则

Java程序源文件的命名不是随意的,Java文件的命名必须满足如下规则。

Java程序源文件的扩展名必须是.java,不能是其他文件扩展名。

在通常情况下,Java程序源文件的主文件名可以是任意的。但有一种情况例外:如果Java程序源代码里定义了一个public类,则该源文件的主文件名必须与该public类(也就是该类定义使用了public关键字修饰)的类名相同。

由于Java程序源文件的文件名必须与public类的类名相同,因此,一个Java源文件里最多只能定义一个public类。

注意:一个Java源文件可以包含多个类定义,但最多只能包含一个public类定义;如果Java源文件里包含public类定义,则该源文件的文件名必须与这个public类的类名相同。

虽然Java源文件里没有包含public类定义时,这个源文件的文件名可以是随意的,但推荐让Java源文件的主文件名与类名相同,这可以提供更好的可读性。通常有如下建议:

一个Java源文件只定义一个类,不同的类使用不同的源文件定义。

让Java源文件的主文件名与该源文件中定义的public类同名。

在疯狂软件的教学过程中,发现很多学员经常犯一个错误,他们在保存一个Java文件时,常常保存成形如.java.txt的文件名,而且这种文件名看起来非常像是.java。这是Windows的默认设置所引起的,Windows默认会“隐藏已知文件类型的扩展名”。为了避免这个问题,通常推荐关闭Windows的“隐藏已知文件类型的扩展名”功能。

为了关闭“隐藏已知文件类型的扩展名”功能,在Windows的资源管理器窗口打开“组织”菜单,然后单击“文件夹和搜索选项”菜单项,将弹出“文件夹选项”对话框,单击该对话框里的“查看”Tab页,看到如图1所示的对话框。

图1 “文件夹选项”对话框

去掉“隐藏已知文件类型的扩展名”选项之前的钩,则可以让所有文件显示真实的文件名,从而避免HelloWorld.java.txt这样的错误。

另外,图1中还显示勾选了“在标题栏显示完整路径(仅限经典主题)”选项,这对于开发中准确定位Java源文件也很有帮助。

3 初学者容易犯的错误

万事开头难,Java编程的初学者常常会遇到各种各样的问题,对于在学校跟着老师学习的读者而言,可以直接通过询问老师来解决这些问题;但对于自学的读者而言,则需要花更多时间、精力来解决这些问题,而且一旦遇到的问题几天都得不到解决,往往会带给他们很大的挫败感。

下面介绍一些初学者经常出现的错误,希望减少读者在学习中的障碍。

1.CLASSPATH环境变量的问题

由于历史原因,几乎所有的图书和资料中都介绍必须设置这个环境变量。实际上,正如前面所介绍的,如果使用1.5以上版本的JDK,完全可以不用设置这个环境变量。如果不设置这个环境变量,将可以正常编译和运行Java程序。

相反,如果有的读者看过其他Java入门书籍,或者参考过网上的各种资料(网络是一个最大的资源库,但网络上的资料又是鱼龙混杂、良莠不齐的。网络上的资料很多都是转载的,只要一个人提出一个错误的说法,这个错误的说法可能被成千上万的人转载,从而看到成千上万的错误说法),可能总是习惯设置CLASSPATH环境变量。

设置CLASSPATH环境变量没有错,关键是设置错了就比较麻烦了。正如前面所介绍的,如果没有设置CLASSPATH环境变量,Java解释器将会在当前路径下搜索Java类,因此在HelloWorld.class文件所在的路径运行java HelloWorld将没有任何问题;但如果设置了CLASSPATH环境变量,Java解释器将只在CLASSPATH环境变量所指定的系列路径中搜索Java类,这样就容易出现问题了。

由于很多资料上提到CLASSPATH环境变量中应该添加dt.jar和tools.jar两个文件,因此很多读者会设置CLASSPATH环境变量的值为:D:\Java\jdk-9\lib\dt.jar;D:\Java\jdk-9\lib\tools.jar(实际上JDK 9已经删除了这两个文件),这将导致Java解释器不在当前路径下搜索Java类。如果此时在HelloWorld.class文件所在的路径运行java HelloWorld,将出现如下错误提示:

错误: 找不到或无法加载主类 HelloWorld

上面的错误是一个典型错误:找不到类定义的错误,通常都是由CLASSPATH环境变量设置不正确造成的。因此,如果读者要设置CLASSPATH环境变量,一定不要忘记在CLASSPATH环境变量中增加点(.),强制Java解释器在当前路径下搜索Java类。

提醒:定了CLASSPATH环境变量,一定不要忘记在CLASSPATH环境变量中增加点(.),点代表当前路径,用以强制Java解释器在当前路径下搜索Java类。

除此之外,有的读者在设置CLASSPATH环境变量时总是仗着自己记忆很好,往往选择手动输入CLASSPATH环境变量的值,这非常容易引起错误:偶然的手误,或者多一个空格,或者少一个空格,都有可能引起错误。

实际上,有更好的方法来解决这个错误,完全可以在文件夹的地址栏里看到某个文件或文件夹的完整路径,就可以直接通过复制、粘贴来设置CLASSPATH环境变量了。

通过资源管理器打开JDK安装路径,将可以看到如图2所示的界面。

图2 在地址栏中显示完整路径

读者可以通过复制地址栏里的字符串来设置环境变量,而不是采用手动输入,从而减少出错的可能。

2.大小写问题

前面已经提到:Java语言是严格区分大小写的语言。但由于大部分读者都是Windows操作系统的忠实拥护者,因此对大小写问题往往都不够重视(Linux平台是区分大小写的)。

例如,有的读者编写的Java程序里的类是HelloWorld,但当他运行Java程序时,运行的则是java helloworld这种形式——这种错误的形式有很多种(对的道路只有一条,但错误的道路则有成千上万条)。总之,就是java命令后的类名没有严格按Java程序中编写的来写,可能引起系统提示如图3示的错误。

图3类名大小写不正确的提示

因此必须提醒读者注意:在Java程序里,HelloWorld和helloworld是完全不同的,必须严格注意Java程序里的大小写问题。

不仅如此,读者按书中所示的程序编写Java程序时,必须严格注意Java程序中每个单词的大小写,不要随意编写。例如class和Class是不同的两个词,class是正确的,但如果写成Class,则程序无法编译通过。实际上,Java程序中的关键字全部是小写的,无须大写任何字母。

3.路径里包含空格的问题

这是一个更容易引起错误的问题。由于Windows系统的很多路径都包含了空格,典型的例如Program Files文件夹,而且这个文件夹是JDK的默认安装路径。

如果CLASSPATH环境变量里包含的路径中存在空格,则可能引发错误。因此,推荐大家安装JDK以及Java相关程序、工具时,不要安装在包含空格的路径下,否则可能引发错误。

4.main方法的问题

如果需要用java命令直接运行一个Java类,这个Java类必须包含main方法,这个main方法必须使用public和static来修饰,必须使用void声明该方法的返回值,而且该方法的参数类型只能是一个字符串数组,而不能是其他形式的参数。对于这个main方法而言,前面的 public和static修饰符的位置可以互换,但其他部分则是固定的。

定义main方法时,不要写成Main方法,如果不小心把方法名的首字母写成了大写,编译时不会出现任何问题,但运行该程序时将给出如下错误提示:

错误: 在类 Xxx 中找不到 main 方法, 请将 main 方法定义为:public static void main(String[] args)

这个错误提示找不到main方法,因为Java虚拟机只会选择从main方法开始执行;对于Main方法,Java虚拟机会把该方法当成一个普通方法,而不是程序的入口。

main方法里可以放置程序员需要执行的可执行性语句,例如System.out.println(“Hello Java!”),这行语句是Java里的输出语句,用于向控制台输出”Hello Java!”这个字符串内容,输出结束后还输出一个换行符。

在Java程序里执行输出有两种简单的方式:System.out.print(需要输出的内容)和System.out.println (需要输出的内容),其中前者在输出结束后不会换行,而后者在输出结束后会换行。后面会有关于这两个方法更详细的解释,此处读者只能把这两个方法先记下来。

本文选自《疯狂Java讲义(第四版)》

经典Java读物基于Java 9抢先升级面世,赠送包含1500分钟课程讲解的视频、源代码、电子书、课件、面试题,提供微信+QQ答疑群,配套学习交流网站

李刚 编著

ISBN 978-7-121-33108-4

2018年1月出版

定价:109.00元

几点Java程序必须满足的基本规则相关推荐

  1. 计算机Java程序设计标准讲义

     疯狂Java讲义--计算机Java程序设计标准讲义 内容 简 介<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com: ...

  2. 编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议1~5)...

                 The reasonable man adapts himself to the world; The unreasonable one persists in trying ...

  3. 用条件运算符编写java程序_Java 编程入门课程丨第 8 单元:条件运算符和控制语句...

    原标题:Java 编程入门课程丨第 8 单元:条件运算符和控制语句 教程概览 本单元是"Java 编程入门"课程的第 8 部分.尽管各单元中讨论的概念具有独立性,但实践组件是在您学 ...

  4. Java程序入口+输出语句+数据类型

    一(Java程序入口):要想执行一个java程序,就必须有一个程序入口,且该入口为固定格式:public static void main(String[ ] args){}.注意:是main而不是m ...

  5. 2019最新Java程序员面试指南——HR的套路+Java常见技术点

    本文转载自:2019最新Java程序员面试指南--HR的套路+Java常见技术点 面试是件既简单又复杂的事情,也正是因为简单和复杂的两面性,所以Java程序员在面试的时候要多学些面试技巧,当然技术也不 ...

  6. 编写高质量代码:改善Java程序的151个建议 (第1章 Java开发中通用的方法和准则)

    第1章 Java开发中通用的方法和准则 The reasonable man adapts himself to the world;the unreasonable one persists in ...

  7. 转载----编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议1~5)...

    阅读目录 建议1:不要在常量和变量中出现易混淆的字母 建议2:莫让常量蜕变成变量 建议3:三元操作符的类型务必一致 建议4:避免带有变长参数的方法重载 建议5:别让null值和空值威胁到变长方法    ...

  8. 作为一名合格的JAVA程序员需要点亮那些技能树?

    转自:https://zhuanlan.zhihu.com/p/26035486 先看看这些程序员技能树,你掌握或了解哪些?OMG竟然有么多---震精!震精!!! 这是从450家企业的招聘信息中统计而 ...

  9. Java程序猿面试题集(181- 199)

    Java面试题集(181-199) 摘要:这部分是包括了Java高级玩法的一些专题,对面试者和新入职的Java程序猿相信都会有帮助的. 181.  182. 183. 184. 185. 186. 1 ...

  10. java负数右移_收入囊中篇---Java程序基础(二)

    前言: 本篇是接着上一篇更新的,如果没有阅读上一篇的话,可以查阅或回顾一下. 1.收入囊中篇---Java基础必备知识(一) 2.收入囊中篇---Java程序基础(二) Java程序基础目录 1.Ja ...

最新文章

  1. GRE核心词汇助记与精练-List8倒、流
  2. Python语言学习:创建/删除文件/文件夹、获取当前文件/文件夹路径(系统环境路径/目录)、获取当前文件夹下的所有子文件路径等代码(os系列用法)实现之详细攻略
  3. ccna综合实验实训总结_实验室设备搬迁工作顺利展开
  4. php连接MYSQL(2)
  5. 《剑指offer》给定一颗二叉搜索树,请找出其中的第k大的结点。
  6. Unity3D学习笔记之四完善Prefab并添加First Person Controller
  7. IntelliJ IDEA:使用Google Guava生成equals,hashCode和toString
  8. java容器类3:set/HastSet/MapSet深入解读
  9. 用NuGet掌管你的Vi“.NET研究”sual Studio扩展
  10. 同步和异步概念(由DZW前端框架引发的百度地图api无法加载问题总结)
  11. 两种进入容器的方法 - 每天5分钟玩转 Docker 容器技术(23)
  12. 编写第一个OpenACC程序
  13. Java 读取文件大写和格式化输出字串
  14. oracle 11g regexp_substr,oracle中REGEXP_SUBSTR方法的使用
  15. win7旗舰版系统如何重装系统win10
  16. java stream流_恕我直言你可能真的不会java第4篇:Stream管道流Map操作
  17. django–url
  18. macOS Catalina 10.15.7 ISO/CDR 虚拟机镜像下载
  19. 武汉Web前端开发薪水没有别人高?先弄明白这4点
  20. android 8.0手机无法更新版本,微信8.0安卓机怎么安装更新 安卓微信更新不了8.0解决办法一览...

热门文章

  1. java day62【 响应数据和结果视图 、 SpringMVC 实现文件上传 、 SpringMVC 中的异常处理 、 SpringMVC 中的拦截器 】...
  2. select样式调整
  3. yaf零基础学习总结7-学习使用Yaf中的插件
  4. SQL中GROUP BY语句介绍
  5. docker 容器中设置 mysql lampp php软链接
  6. 使用python生成c文件模板
  7. easyui 时间段校验,开始时间小于结束时间,并且时间间隔不能超过30天
  8. 最舒服的颜色搭配值,很有用哦,特别是做设计的!!
  9. sql server的数据同步
  10. 学术必备 | 论文写作中注意这些细节,能显著提升成稿质量