3. Java 程序的基本规则

空~2022年6月6日
  • java
大约 11 分钟

3. Java 程序的基本规则

Java 类名、方法名、变量名统称为“标识符”,凡是程序员自己有权利命名的单词都是标识符。 主方法的 main 也属于标识符,但这个标识符不能被修改,这个 main 是 SUN 公司固定死的。

main 方法的问题

如果需要用 Java 解释器直接运行一个 Java 类,则这个 Java 类必须包含 main 方法,这个 main 方法必须使用 public 和 static 来修饰,必须使用 void 声明该方法的返回值,而且该方法的参数类型只能是一个字符串数组,而不能是其他形式的参数。

对于这个 main 方法而言,前面的 public 和 static 修饰符的位置可以互换,但其他部分则是固定的。定义 main 方法时,不要写成 Main 方法,如果不小心把方法名的首字母写成了大写,编译时不会出现任何问题,但运行该程序时将给出如下错误提示:

image-20220516223404651

因为 Java 解释器只会选择从 main 方法开始执行;对于 Main 方法,Java 解释器会把该方法当成一个普通方法,而不是程序的入口。

Java 关键字

Java 关键字是预先定义的具有特别意义的标识符,也可以叫 Java 保留字,Java 关键字不能用作变量名、方法名、类名、包名和参数,Java 关键字大全:

Java 关键字类别Java 关键字关键字含义
访问控制private一种访问控制方式:私用模式,访问控制修饰符,可以应用于类、方法或字段(在类中声明的变量)
访问控制protected一种访问控制方式:保护模式,可以应用于类、方法或字段(在类中声明的变量)的访问控制修饰符
访问控制public一种访问控制方式:共用模式,可以应用于类、方法或字段(在类中声明的变量)的访问控制修饰符。
类、方法和变量修饰符abstract表明类或者成员方法具有抽象属性,用于修改类或方法
类、方法和变量修饰符class声明一个类,用来声明新的 Java 类
类、方法和变量修饰符extends表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口
类、方法和变量修饰符final用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量
类、方法和变量修饰符implements表明一个类实现了给定的接口
类、方法和变量修饰符interface接口
类、方法和变量修饰符native用来声明一个方法是由与计算机相关的语言(如 C/C++/FORTRAN 语言)实现的
类、方法和变量修饰符new用来创建新实例对象
类、方法和变量修饰符static表明具有静态属性
类、方法和变量修饰符strictfp用来声明 FP_strict(单精度或双精度浮点数)表达式遵循 IEEE 754 算术规范
类、方法和变量修饰符synchronized表明一段代码需要同步执行
类、方法和变量修饰符transient声明不用序列化的成员域
类、方法和变量修饰符volatile表明两个或者多个变量必须同步地发生变化
程序控制break提前跳出一个块
程序控制continue回到一个块的开始处
程序控制return从成员方法中返回数据
程序控制do用在 do-while 循环结构中
程序控制while用在循环结构中
程序控制if条件语句的引导词
程序控制else用在条件语句中,表明当条件不成立时的分支
程序控制for一种循环结构的引导词
程序控制instanceof用来测试一个对象是否是指定类型的实例对象
程序控制switch分支语句结构的引导词
程序控制case用在 switch 语句之中,表示其中的一个分支
程序控制default默认,例如:用在 switch 语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现
错误处理try尝试一个可能抛出异常的程序块
错误处理catch用在异常处理中,用来捕捉异常
错误处理throw抛出一个异常
错误处理throws声明在当前定义的成员方法中所有需要抛出的异常
包相关import表明要访问指定的类或包
包相关package
基本类型boolean基本数据类型之一,声明布尔类型的关键字
基本类型byte基本数据类型之一,字节类型
基本类型char基本数据类型之一,字符类型
基本类型double基本数据类型之一,双精度浮点数类型
基本类型float基本数据类型之一,单精度浮点数类型
基本类型int基本数据类型之一,整数类型
基本类型long基本数据类型之一,长整数类型
基本类型short基本数据类型之一,短整数类型
基本类型null空,表示无值,不能将 null 赋给原始类型(byteshortintlongcharfloatdoubleboolean)变量
基本类型true真,boolean 变量的两个合法值中的一个
基本类型false假,boolean 变量的两个合法值之一
变量引用super表明当前对象的父类型的引用或者父类型的构造方法
变量引用this指向当前实例对象的引用,用于引用当前实例
变量引用void声明当前成员方法没有返回值,void 可以用作方法的返回类型,以指示该方法不返回值
保留字goto保留关键字,没有具体含义
保留字const保留关键字,没有具体含义,是一个类型修饰符,使用 const 声明的对象不能更新

标识符命名规则

标识符只能由数字、字母(包括中文)、下划线_、美元符$组成,不能含有其他符号,标识符不能以数字开头、关键字不能做标识符、标识符严格区分大小写。

虽然 java 中的标识符严格区分大小写,但是对于类名来说,如果一个 java 源文件中同时出现了 A 类和 a 类,那么谁在前就生成谁,类名最好不要“相同”。

标识符理论上没有长度限制。

标识符命名规范

  1. 见名知意(标识符在起名的时候,最好一看这个单词就知道啥意思)。

  2. 遵循驼峰命名法,驼峰有利于单词与单词之间很好的分隔,例如HelloWorldIdentifierTest

  3. 类名和接口名的特殊要求:

    类名和接口名首字母大写,后面每个单词首字母小写。 StudentTestUserTest

  4. 变量名,方法名的特殊要求:

    变量名和方法名首字母小写,后面每个单词首字母大写。 moveAll 所有常量名:全部大写,单词与单词之间采用下划线衔接。 USER_AGE

更多详情可参考阿里的 Java 开发手册

alibaba/p3c: Alibaba Java Coding Guidelines pmd implements and IDE plugin (github.com)open in new window

注释

与大多数程序设计语言一样,Java 中的注释也不会出现在可执行程序中。因此,可以在源程序中根据需要添加任意多的注释,而不必担心可执行代码会膨胀。在 Java 中,有 3 种标记注释的方式。最常用的方式是使用//,其注释内容从//开始到本行结尾。

public class HelloWorld {
    public static void main(String args[]) {
        // 你好,世界
        System.out.println("Hello World");
    }
}

当需要长篇的注释时,既可以在每行的注释前面标记//,也可以使用/**/将一段比较长的注释括起来。

public class HelloWorld {
    /*
    世界很大,我想去看看
    */
    public static void main(String args[]) {
        // 你好,世界
        System.out.println("Hello World");
    }
}

最后,第 3 种注释可以用来自动地生成文档。这种注释以/**开始,以*/结束。

public class HelloWorld {
    /*
    世界很大,我想去看看
    */

    /**
    我的第一个Java程序
    @version 1.0
    @author 空~
    */
    public static void main(String args[]) {
        // 你好,世界
        System.out.println("Hello World");
    }
}

提示

在 Java 中,/* */注释不能嵌套。也就是说,不能简单地把代码用/**/括起来作为注释,因为这段代码本身可能也包含一个*/

Javadoc 标签(了解)

自动地生成文档使用 javadoc 命令,的基本用法如下:

javadoc [命令的选项][包名][源文件名]

cmd(命令提示符)中输入 javadoc -help 就可以看到 Javadoc 的用法和选项(前提是安装配置了 JDK),下面列举 Javadoc 命令的常用选项:

名称说明
-public仅显示 public 类和成员
-protected显示 protected/public 类和成员(默认值)
-package显示 package/protected/public 类和成员
-private显示所有类和成员
-d <directory>输出文件的目标目录
-version包含 @version
-author包含 @author
-splitindex将索引分为每个字母对应一个文件
-windowtitle <text>文档的浏览器窗口标题

Javadoc 工具可以识别文档注释中的一些特殊标签,这些标签一般以@开头,后跟一个指定的名字,有的也以{@开头,以}结束。Javadoc 可以识别的标签如下表所示:

标签描述示例
@author标识一个类的作者,一般用于类注释@author description
@deprecated指名一个过期的类或成员,表明该类或方法不建议使用@deprecated description
{@docRoot}指明当前文档根目录的路径Directory Path
@exception可能抛出异常的说明,一般用于方法注释@exception exception-name explanation
{@inheritDoc}从直接父类继承的注释Inherits a comment from the immediate surperclass
{@link}插入一个到另一个主题的链接{@link name text}
{@linkplain}插入一个到另一个主题的链接,但是该链接显示纯文本字体Inserts an in-line link to another topic
@param说明一个方法的参数,一般用于方法注释@param parameter-name explanation
@return说明返回值类型,一般用于方法注释,不能出现再构造方法中@return explanation
@see指定一个到另一个主题的链接@see anchor
@serial说明一个序列化属性@serial description
@serialData说明通过 writeObject()writeExternal() 方法写的数据@serialData description
@serialField说明一个 ObjectStreamField 组件@serialField name type description
@since说明从哪个版本起开始有了这个函数@since release
@throws@exception 标签一样.The @throws tag has the same meaning as the @exception tag
{@value}显示常量的值,该常量必须是 static 属性。Displays the value of a constant, which must be a static field
@version指定类的版本,一般用于类注释@version info

对两种标签格式的说明:

  • @tag 格式的标签(不被{}包围的标签)为块标签,只能在主要描述(类注释中对该类的详细说明为主要描述)后面的标签部分(如果块标签放在主要描述的前面,则生成 API 帮助文档时会检测不到主要描述)。
  • {@tag} 格式的标签(由{}包围的标签)为内联标签,可以放在主要描述中的任何位置或块标签的注释中。

Javadoc 标签注意事项:

  • Javadoc 标签必须从一行的开头开始,否则将被视为普通文本。
  • 一般具有相同名称的标签放在一起。
  • Javadoc 标签区分大小写,代码中对于大小写错误的标签不会发生编译错误,但是在生成 API 帮助文档时会检测不到该注释内容。

新建一个空白记事本,输入下列代码:

/**
* @author C语言中文网
* @version jdk1.8.0
*/
public class Test{
    /**
     * 求输入两个参数范围以内整数的和
     * @param n 接收的第一个参数,范围起点
     * @param m 接收的第二个参数,范围终点
     * @return 两个参数范围以内整数的和
     */
    public int add(int n, int m) {
        int sum = 0;
        for (int i = n; i <= m; i++) {
            sum = sum + i;
        }
        return sum;
    }
}

将文件命名为 Test.java,打开 cmd 窗口,输入javadoc -author -version Test.java命令。

以上没有考虑编码格式的问题,cmd 可能会乱码报错。使用javadoc -encoding UTF-8 -charset UTF-8 Test.java会解决编码问题。

image-20220801142002601

打开 Test.java 文件存储的位置,会发现多出了一个 大量 .html 文件,打开其中的 Test.html。

image-20220801142515465