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 赋给原始类型(byte、short、int、long、char、float、double、boolean)变量
基本类型true真,boolean 变量的两个合法值中的一个
基本类型false假,boolean 变量的两个合法值之一
变量引用super表明当前对象的父类型的引用或者父类型的构造方法
变量引用this指向当前实例对象的引用,用于引用当前实例
变量引用void声明当前成员方法没有返回值,void 可以用作方法的返回类型,以指示该方法不返回值
保留字goto保留关键字,没有具体含义
保留字const保留关键字,没有具体含义,是一个类型修饰符,使用 const 声明的对象不能更新

标识符命名规则

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

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

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

标识符命名规范

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

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

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

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

  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