3. Java 程序的基本规则
3. Java 程序的基本规则
Java 类名、方法名、变量名统称为“标识符”,凡是程序员自己有权利命名的单词都是标识符。 主方法的 main
也属于标识符,但这个标识符不能被修改,这个 main
是 SUN 公司固定死的。
main 方法的问题
如果需要用 Java 解释器直接运行一个 Java 类,则这个 Java 类必须包含 main 方法,这个 main 方法必须使用 public 和 static 来修饰,必须使用 void 声明该方法的返回值,而且该方法的参数类型只能是一个字符串数组,而不能是其他形式的参数。
对于这个 main 方法而言,前面的 public 和 static 修饰符的位置可以互换,但其他部分则是固定的。定义 main 方法时,不要写成 Main 方法,如果不小心把方法名的首字母写成了大写,编译时不会出现任何问题,但运行该程序时将给出如下错误提示:
因为 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 类,那么谁在前就生成谁,类名最好不要“相同”。
标识符理论上没有长度限制。
标识符命名规范
见名知意(标识符在起名的时候,最好一看这个单词就知道啥意思)。
遵循驼峰命名法,驼峰有利于单词与单词之间很好的分隔,例如
HelloWorld
,IdentifierTest
。类名和接口名的特殊要求:
类名和接口名首字母大写,后面每个单词首字母小写。
StudentTest
,UserTest
变量名,方法名的特殊要求:
变量名和方法名首字母小写,后面每个单词首字母大写。
moveAll
所有常量名:全部大写,单词与单词之间采用下划线衔接。USER_AGE
更多详情可参考阿里的 Java 开发手册
alibaba/p3c: Alibaba Java Coding Guidelines pmd implements and IDE plugin (github.com)
注释
与大多数程序设计语言一样,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
会解决编码问题。
打开 Test.java 文件存储的位置,会发现多出了一个 大量 .html
文件,打开其中的 Test.html。