Java 文档的基本格式
因为Java是面向对象的语言,一个程序的基本单位就是class,class是关键字[1]。
下面我们来将上一个文档的例子来做一下文档基本格式的分析
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
类的定义
类名要求:
类名必须以英文字母开头,后接字母,数字和下划线的组合
习惯以大写字母开头
public 是访问修饰符[2],表示该class是公开的。不写public,也能正确编译,但是这个类将无法从命令行执行。
在class内部,可以定义若干方法(method)。
一个类中的内容以一对{}来作为分隔符。
如下面这类:
public class Man{
}
定义了一个公开的类Man
方法的定义
在类中我们可以定义方法
public class Man{
public static void main(String[] args) {
}
}
方法定义了一组执行语句,方法内部的代码将会被依次顺序执行。
这里的方法名是main,返回值是void,表示没有任何返回值。
我们注意到public除了可以修饰class外,也可以修饰方法。而关键字static是另一个修饰符,它表示静态方法,后面我们会讲解方法的类型,目前,我们只需要知道,Java入口程序规定的方法必须是静态方法,方法名必须为main,括号内的参数必须是String数组[3]。
这个方法是Java程序的入口函数,格式固定
方法名也有命名规则,命名和class一样,但是首字母小写:
- 必须以英文字母开头,后接字母,数字和下划线的组合
- 小写字母开头
方法中代码
在方法内部,语句才是真正的执行代码。Java的每一行语句必须以分号结束:
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
注释
虽然对于程序来说,程序结构已经完整了,但对于我们来所还需要注释来对程序进行说明,在Java中程序注释有如下几种:
- 单行注释,以双斜线开头,直到这一行的结尾结束:
// 注释 - 多行注释,以/星号开头,以/结束,可以有多行:
/*
注释
*/
- 特殊的多行注释,以/**开头,以*/结束,如果有多行,每行通常以星号开头:
/**
*注释
*/
特殊的多行注释需要写在类和方法的定义处,可以用于自动创建文档。
现在我们可以来创建一个完整的程序代码:
/**
* 可以用来自动创建文档的注释
*/
public class Hello {
public static void main(String[] args) {
// 向屏幕输出文本:
System.out.println("Hello, world!");
/* 多行注释开始
注释内容
注释结束 */
}
} // class定义结束
Java变量
在Java中,变量分为两种:基本类型的变量和引用类型的变量。
基本类型的变量
我们先讨论基本类型的变量:
基本数据类型是CPU可以直接进行运算的类型
在Java中,变量必须先定义后使用,在定义变量的时候,可以给它一个初始值。如”
int x = 1;
上述语句定义了一个整型int类型的变量,名称为x,初始值为1.不写初始值,就相当于给它指定了默认值。Java中默认值总是0。
第一次指定变量时,要指定变量类型,变量的一个重要特点是可以重新赋值。
变量可以说是内存空间地址的别名,同一个内存地址只能存储一个值。
引用类型变量
除了基本类型的变量,剩下的都是引用类型。
有些时候,类型的名字太长,写起来比较麻烦。例如:
StringBuilder sb = new StringBuilder();
这个时候,如果想省略变量类型,可以使用var关键字:
var sb = new StringBuilder();
编译器会根据赋值语句自动推断出变量sb的类型是StringBuilder。
变量的作用范围
在Java中,多行语句用{ }括起来。很多控制语句,例如条件判断和循环,都以{ }作为它们自身的范围,例如:
if (...) { // if开始
...
while (...) { while 开始
...
if (...) { // if开始
...
} // if结束
...
} // while结束
...
} // if结束
定义变量时,要遵循作用域最小化原则,尽量将变量定义在尽可能小的作用域,并且,不要重复使用变量名
只要正确地嵌套这些{ },编译器就能识别出语句块的开始和结束。而在语句块中定义的变量,它有一个作用域,就是从定义处开始,到语句块结束。超出了作用域引用这些变量,编译器会报错。
常量
定义变量的时候,如果加上final修饰符,这个变量就变成了常量:
final double PI = 3.14; // PI是一个常量
常量在定义时进行初始化后就不可再次赋值,再次赋值会导致编译错误。
[1]关键字:Java关键字是预先定义的具有特别意义的标识符,也可以叫Java保留字,Java关键字不能用作变量名、方法名、类名、包名和参数。
Java偶如下的关键字:
| 关键字 | 含义 |
| ------------ | ------------------------------------------------------------ |
| abstract | 表明类或者成员方法具有抽象属性 |
| assert | 断言,用来进行程序调试 |
| boolean | 基本数据类型之一,声明布尔类型的关键字 |
| break | 提前跳出一个块 |
| byte | 基本数据类型之一,字节类型 |
| case | 用在switch语句之中,表示其中的一个分支 |
| catch | 用在异常处理中,用来捕捉异常 |
| char | 基本数据类型之一,字符类型 |
| class | 声明一个类 |
| const | 保留关键字,没有具体含义 |
| continue | 回到一个块的开始处 |
| default | 默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现 |
| do | 用在do-while循环结构中 |
| double | 基本数据类型之一,双精度浮点数类型 |
| else | 用在条件语句中,表明当条件不成立时的分支 |
| enum | 枚举 |
| extends | 表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口 |
| final | 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量 |
| finally | 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块 |
| float | 基本数据类型之一,单精度浮点数类型 |
| for | 一种循环结构的引导词 |
| goto | 保留关键字,没有具体含义 |
| if | 条件语句的引导词 |
| implements | 表明一个类实现了给定的接口 |
| import | 表明要访问指定的类或包 |
| instanceof | 用来测试一个对象是否是指定类型的实例对象 |
| int | 基本数据类型之一,整数类型 |
| interface | 接口 |
| long | 基本数据类型之一,长整数类型 |
| native | 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的 |
| new | 用来创建新实例对象 |
| package | 包 |
| private | 一种访问控制方式:私用模式 |
| protected | 一种访问控制方式:保护模式 |
| public | 一种访问控制方式:共用模式 |
| return | 从成员方法中返回数据 |
| short | 基本数据类型之一,短整数类型 |
| static | 表明具有静态属性 |
| strictfp | 用来声明FP_strict(单精度或双精度浮点数)表达式遵循[IEEE 754](https://baike.baidu.com/item/IEEE 754)算术规范 |
| super | 表明当前对象的父类型的引用或者父类型的构造方法 |
| switch | 分支语句结构的引导词 |
| synchronized | 表明一段代码需要同步执行 |
| this | 指向当前实例对象的引用 |
| throw | 抛出一个异常 |
| throws | 声明在当前定义的成员方法中所有需要抛出的异常 |
| transient | 声明不用序列化的成员域 |
| try | 尝试一个可能抛出异常的程序块 |
| void | 声明当前成员方法没有返回值 |
| volatile | 表明两个或者多个变量必须同步地发生变化 |
| while | 用在循环结构中 |
这些将在我们的学习中不断遇到,所以现在没必要全部记下来,会在学习中渐渐的烂熟于心。
[2]访问控制符
Java具有四个访问控制符,如下:
- private(当前类访问权限):如果类里的一个成员(包括成员变量、方法和构造器等)使用private访问控制符来修饰,则这个成员只能在当前类的内部被访问。很显然,这个访问控制符用于修饰成员变量最合适,使用它来修饰成员变量就可以把成员变量隐藏在该类的内部。
- default(包(package)访问权限):如果类里的一个成员(包括成员变量、方法和构造器等)或者一个外部类不使用任何访问控制修饰,就称它为包访问权限的,default访问控制的成员或外部类可以被相同包下的其他类访问。
- protected(子类访问权限):如果一个成员(包括成员变量、方法和构造器等)使用protected访问控制符修饰,那么这个成员既可以被同一个包中的其他类访问,也可以被不同包中的子类访问。在通常情况下,如果使用protected来修饰一个方法,通常是希望其子类来重写这个方法。
- public(公共访问权限):这是一个最宽松的访问控制级别,如果一个成员(包括成员变量、方法和构造器等)或者一个外部类使用public访问控制符修饰,那么这个成员或外部类就可以被所有类访问,不管访问类和被访问类是否处于同一个包中,是否具有父子继承关系。
[3]命令行传参
Java通过main中的数组来接收命令行中给定的参数,保存为数组args,就是我们定义主方法是括号里的内容
public static void main(String[] args)
我们可以通过访问数组args中的内容访问传递的参数