第二章:Java 的基本语法
包名
作用
将编写好的类分目录存放,便于管理。
使用
声明包
需要在源代码开头使用如以下语句声明包名称:
1 |
|
此时,存放源码的文件夹路径就应为 /com/example/packagename
。
包名在命名时最好遵循命名规范,只包含小写字母和英文句点,通常仅有三层结构。
第一层(所有者类型声明) | 第二层(所有者名称声明) | 第三层(具体的包名) |
---|---|---|
com(企业项目) | 任意名称 |
任意名称 |
indi(公共项目) | ||
pers(个人项目) | ||
priv(私有项目) |
如果没有声明,则创建的类会处于默认包下,在日常开发中是不应该出现的。
导入包
可以使用以下语句:
1 |
|
如果要导入包下的所有类,类名可以用 *(通配符)代替。
注释
行级注释
例子:
1 |
|
多行注释
例子:
1 |
|
多行注释不能嵌套,第一个 /* 只会与第一个 */ 配对。
文档注释
可用于对一个类或方法进行系统性的解释说明,便于其他开发者了解如何使用你程序中的 API。使用 JDK 工具包的 javadoc
工具可以将文档注释从源代码中提取出来,生成开发者文档。
1 |
|
语句的分号
Java 语句分为结构定义语句和功能执行语句,每条功能执行语句最后要使用一个英文半角分号(;)表示一个语句的结束,这一点与 C/C++ 类似。
代码风格
严格说来,在单词或符号之间空行或添加空格不会导致程序出错,例如,HelloWorld 的代码也可以写为:
1 |
|
这样子也能运行。但是代码的易读性明显下降了,所以,在编码时我们需要保持一定的标准,各层级之间用 Tab(输入制表符)或空格进行缩进,这样做以后代码的运行逻辑更为清晰,易于维护。
但是一段字符串就不能出现在多行之中,例如:
1 |
|
字符串的连接应用 “+” 号进行:
1 |
|
标识符
大小写的区分
Java 是一门严格区分大小写的语言,在定义标识符 PC 时还可以定义 pc,但这两者是完全不同的符号,不能通用。
命名规范
在命名时,不得与保留字、关键字重复。标识符可以由英文大小写字母(A ~ Z,a ~ z)、数字(0 ~ 9)、下划线(_)以及美元符号($)组成,但不能是数字开头。标识符不能包含空格。
包名 | 常量名 | 类名和接口名 | 变量和方法名 | |
---|---|---|---|---|
字符 |
全部字母小写,用 . 隔开单词 |
全部字母大写,用 _ 分开单词 |
每个单词的首字母都要大写 | 开头的单词首字母小写,之后的单词首字母大写 |
例子 | com.example.test com.learner.class01 |
MY_TOKEN DAY_OF_MONTH |
HelloWorld ArrayList |
myName userEmail password |
变量
作用
变量可以存储在程序运行时需要的数据并且可以在运行时进行变更。
基本数据类型
数据单位基本认识
1 byte=8 bit 即 1 字节等于 8 比特位的数据。
1 kilo byte=1000 bit 即 1KB=1000B。
1 kilo binary(2 进制)byte=1024 bit 即 1KiB=1024B。
现在,计算机行业中 1KB 也多指 1024B。
更大的单位还有 MB、GB、TB、PB 等,相邻两个单位的进率为 1024。
另外,还有 Mb、Mbps 之类的单位。小写的 b 指的是 bit,要转换为 byte 的单位需要除以 8;ps 即 per second,指的是每秒。例如,1 Mb= 100,0000 b = 12,5000 B ~= 122 KB,200 兆宽带即 200 Mbps = 25 MB/s。
数值型
整数类型
名称 | 字节型 | 短整型 | 整型 | 长整型 |
---|---|---|---|---|
大小 | 1 字节(8 位) | 2 字节(16 位) | 4 字节(32 位) | 8 字节(64 位) |
范围 | -2^7^ ~ 2^7^-1 (-128 ~ 127) | -2^15 ^~ 2^15^-1 | -2^31 ^~ 2^31^-1 | -2^63 ^~ 2^63^-1 |
英文名 | byte | short | int | long |
浮点类型(小数)
名称 | 单精度浮点数 | 双精度浮点数 |
---|---|---|
大小 | 4 字节(32 位) | 8 字节(64 位) |
英文名 | float | double |
字符类型(char)
只能存储单一字符,占地 2 字节(16 位),字符用英文单引号包起来,也可以用 0 ~ 65535 范围内整数表示一个字符。
1 |
|
布尔类型(boolean)
用于存储布尔型的值,内容只能是 true
或 false
。
1 |
|
声明变量
1 |
|
变量类型转换
自动类型转换
当一种范围较小的变量类型转换为范围更大的变量类型时,Java 会自动完成类型的转换,这样不会造成数据的丢失。
1
2
3short a =-1;
int b =a;
double c =b;在表达式的运算中,byte、short、char 类型的变量相加时,它们自身都会被临时提升为 int 类型再参与运算,出来的结果也就是 int 类型的值,值和变量的类型不同,就不能赋值。这一点需要注意一下。
1
2
3
4
5byte a =1;
char b =1;
short c =1;
byte d = (byte) (a+b+c);
System.out.println("d=" +d) // 这里用到了字符串连接
强制类型转换
当一种范围更大的变量类型或不相兼容的变量类型需要赋值到一种精度更低的变量上时,需要进行强制类型转换。4 字节的空间装不下 8 字节的数据,这就是道理所在。
类型转换的一般用法如下:
1 |
|
下面是一个示例:
1 |
|
变量的作用域
在一层花括号包裹的区域中可以声明和使用变量,在其他层面的花括号内定义的变量不能越层使用。
1 |
|
这样写会报错,因为在里层花括号中声明的变量 b 的作用范围只限于包裹它的花括号,除非删掉外层符号。
常量
用途
常量就是在程序运行中一段固定不变的值。
类型
和变量类似,分为整型常量、浮点数常量、布尔常量、字符常量等。下面进行逐一介绍。
整型常量
各进制数字的组成
- 二进制:以
0b
(B) 开头,由 0 和 1 组成的数字序列。 - 八进制:以
0
开头,其后由0 ~ 7
组成的数字序列。 - 十进制:由
0 ~ 9
的整数组成的数字序列。 - 十六进制:由
0x
(X) 开头,并且其后由0 ~ 9, A ~ F
组成的字符序列。
字母的大小写无所谓。
各进制间的转换
这里可参阅书本的截图,只用会十进制与二进制的相互转换,剩下的了解即可。
浮点数常量
分为单精度浮点数(float)常量和双精度浮点数(double)常量,Java 中默认的小数类型是 double,表示方法如下:
1 |
|
其中的 e 表示前面的数要乘以以 10 为底数的后一个数的次幂,如 2e3f
即 $2*10^3$。
布尔常量
true
或 false
,真或假。
字符常量
1 |
|
用单括号引起来,夹一个字符。
字符串常量
1 |
|
长度大于等于零,可以包含一个或多个字符,或者不含字符。
null 常量
只含一个值 null,表示引用的对象为空。
声明常量
常量其本质就是一个不可变的变量,其大体相似,只是命名规范和关键字存在一定差别。
1 |
|
转义符
反斜杠,即 “\”,也被称作转义符,用以转义后面的一个字符,来表示平常不可见的或特殊的部分符号。
常用的转义字符有以下几个:
-
\n
:最常用的一个,表示换行。 -
\r
:回车符,用于将光标移动到当前行的开头。类似于 Home 键,英文名大概是 Return 吧。 -
\t
:制表符,用于添加一段间隔,便于排版。是 Table 的缩写。 -
\b
:退格符,就是近似于删除键的东西。英文是 backspace。 -
\'
\"
:英文引号,需要在字符串中表示英文的引号时需要转义,不然会与编程语言冲突。 -
\\
:反斜杠本身。
运算符
算术运算符
-
+
加号 / 正号 -
-
减号 / 负号 -
*
乘号 -
/
除号 -
%
取模运算(取余数) -
++
自增 -
--
自减
有几点注意事项:
其中 自增 / 自减 符号放在数字前或后的用法不同,例如,
++
放在数字前表示先进行+1
操作,放在数字后就先进行之前的符号的操作。a=2;b=++a
,则结果为a=3;b=3;
。a=2;b=a++
,则结果为a=3;b=2
。自减操作同理,请仔细理解。
整数之间的除法运算结果只有整数,如果有小数参与结果才会更精确。
如 $5/2$ 结果会为 $2$,
$3500/1000*3$ 的结果会为 $9$,
$2.5/10$ 的结果是 $0.25$
取模运算结果的正负号取决于符号左边的被取模数而与取模数无关。
如 $-5$%$2$ 结果为 $-1$,
$10$%$(-3)$ 结果为 $1$。
赋值运算符
类型及用法
特殊赋值运算符的自动强制类型转换
比较运算符
类型介绍及用法
易混用法
逻辑运算符
类型介绍及用法
细节用法
位运算符
意义及用法
解释说明
条件运算符
运算符的优先级
选择结构语句
if 语句
翻译为“如果(本条件成立),就(干什么)”。
1 |
|
if … else 语句
翻译为“如果(),就();否则就()”。
1 |
|
if … else if … else 语句
翻译为“如果(主条件为真),就(干正事);否则如果(新条件),那么就(干什么);否则当主条件为假时执行(其他语句)”
1 |
|
switch 语句
1 |
|
循环结构语句
while 循环语句
当条件为真时循环执行语句。
1 |
|
do … while 循环语句
先执行语句再判断是否需要循环,语句会一直执行直到条件成立。
1 |
|
for 循环语句
1 |
|
跳转语句
break 语句
作用是跳出循环,执行循环结构体之外的下几行语句。
continue 语句
作用是跳出单次循环重新进入下一个循环。
数组
可以理解为高中阶段的集合,一个集合可以包含多个元素。
定义数组
1 |
|
使用数组
引用元素
使用 数组名[索引]
表示数组中的元素。需要注意的是一个长度为 100 个元素的数组索引范围为 0 ~ 99
。
获取数组长度
1 |
|
常见操作
数组遍历
1 |
|
数组最值
数组排序
多维数组