Java 语法基础
1.常量和变量
量是用来传递数据的介质,有着十分重要的作用。Java语言中的量既可以是变化的,也可以是固定不变的。根据是否可变,可以将Java中的量分为变量和常量。
1.1.常量
永远不变的量就是常量,常量的值不会随着时间的变化而发生改变,在程序中通常用来表示某一固定值的字符或字符串。在Java程序中,我们经常会用大写字母来表示常量名,使用final
关键字来定义常量,具体格式如下:
final double PI=3.1415926;
1.2.变量
在Java程序中,变量是指在程序运行过程中其值会随时发生变化的量。在声明变量时必须为其分配一种类型,在程序运行过程中,变量的内存空间中的值是发生变化的,这个内存空间就是变量的实体。为了操作方便,给这个内存空间取一个名字,称为变量名。因为内存空间中的值就是变量值,所以即使申请了内存空间,变量也不一定有值。要让变量有值,就必须先放入一个值。在申请变量的时候,无论是什么样的数据类型,它们都会有默认值,例如int 数据变量的默认值是’0’。
在Java程序中,声明变量的基本格式与声明常量有所不同,具体格式如下:
typeSpencifier varName=value;
- typeSpencifier:可以是Java 语言中所有合法的数据类型,这和常量是一样的。
- varName:变量名,变量和常量的最大区别在于value 的值可有可无,而且还可以对其进行动态初始化。
Java中的变量根据作用域可以分为 局部变量和 全局变量。
局部变量
局部变量就是在一个方法块或一个函数内起左右,超过这个范围,局部变量将没有任何作用。
全局变量
全局变量就是作用域比局部变量更大的变量,能在整个程序内起作用。
2.数据类型
Java 中的数据类型可以分为简单数据类型和复杂数据类型两种。简单数据类型是Java 的基础类型,包括 整数类型、浮点类型、字符类型和布尔类型。复合数据类型则由简单数据类型组成,是用户根据自己的需要定义并实现其意图的类型,包括类、接口、数组。为了便于快速理解,可以将Java中的数据类型分成更简单明了的两大类,及 基本类型 和 引用类型。
2.1.简单数据类型的取值范围
Java中的基本数据类型共有三大类,8个品种,分别是字符类型char,布尔类型 boolean以及数值类型 byte、short、int、long、float、double。数值类型又可以分为整数类型 byte、short、int、long 和 浮点类型 float、double。
Java 中的数值类型不存在无符号的情况,它们的取值范围是固定的,不会随着硬件环境或操作系统的改变而改变。
8种基本类型的具体取值范围如下:
- byte:8位,1字节,最大数据存储量是255,数值范围是-128~127
- short:16位,2字节,最大数据存储量是65536,数值范围是-32768~32767
- int:32位,4字节,最大数据存储容量是232-1,数值范围是-231~2^31-1
- long:64位,8字节,最大数据存储容量是264-1,数值范围是-263~2^63-1
- float:32位,4字节,数值范围是3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F
- double:64位,8字节,数值范围是 4.9e-324~1.8e308,赋值时可以加d 或 D,也可以不加
- boolean:只有 true 和 false 两个取值
- char:16位,2字节,存储 Unicode 码,用单引号赋值。
2.2.字符型
在Java程序中,字符型常量有如下3种表示形式:
- 直接通过单个字符来指定字符常量,如’A’ ‘9’ 和 ‘0’ 等
- 通过转义字符表示特殊字符常量,例如’\n’ '\f’等
- 直接使用 Unicode 值来表示字符常量,格式是 ‘\uXXXX’,其中XXXX代表一个十六进制整数
转义字符 | 描述 |
---|---|
\0x | 八进制字符 |
\u | 十六进制 Unicode字符 |
\’ | 单引号字符 |
\’’ | 双引号字符 |
\\ | 反斜杠 |
\r | 回车符 |
\n | 换行符 |
\f | 换页符 |
\t | 制表符 |
\b | 退格符 |
2.3.整型
int 是最常用的整数类型,通常情况下,Java 整数变量默认就是 int 类型。对于初学者来说,需要特别注意如下两点。
- 如果直接将一个较小的整数常量(在byte 或 short 类型的数值范围内)赋给一个 byte 或 short 变量,系统会自动把这个整数常量当成byte 或 short 类型来处理。
- 使用一个巨大的整数变量(超出 int 类型的数值表示范围)时,Java不会自动把这个整数常量当成long类型来处理。如果希望Java系统把一个整数常量当成 long 类型来处理,应在这个整数常量的后面添加 l 或 L作为后缀。通常推荐使用L。
2.4.浮点型
浮点型数据用来表示Java 中的浮点数,浮点数数据表示有小数部分的数字,总共有两种类型:单精度浮点型 float和双精度浮点型 double。
单精度浮点型专指占用32位存储空间的单精度数据类型,在编程过程中,当需要小数部分且对精度要求不高时,一般使用单精度浮点型,这种数据类型很少用。
双精度浮点型double占用64位,8字节。详细地说,Java 语言的浮点数有两种表示形式。
(1)十进制形式:5.12、0.512
(2)科学计数法形式:例如 5.12e2或5.12E2(即 5.12×10^2)
Java 语言的浮点型默认是 double型,如果希望 Java把一个浮点型数值当成float型处理,应该在这个浮点型数值的后面加上 f 或 F。
2.5.布尔型
布尔型是一种表示逻辑值的简单类型,它的值只能是真或假这两个值中的一个。boolean 类型的值只能是true或false,不能用 0 或 非0 来代表。
3.运算符
运算符是程序设计语言中重要的构成元素之一,运算符可以细分为算数运算符、位运算符、关系运算符、逻辑运算符和其他运算符。
3.1.算数运算符
类型 | 运算符 | 说明 |
---|---|---|
基本运算符 | + - × ÷ | 加减乘除 |
取余运算符 | % | 取余 |
递增 | ++ | 递增 |
递减 | – | 递减 |
3.2.关系运算符
类型 | 说明 |
---|---|
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
3.3.逻辑运算符
类型 | 说明 |
---|---|
&& | 与 |
|| | 或 |
^ | 异或 |
| | 简化或 |
& | 简化并 |
! | 非 |
3.4.位逻辑运算符
在Java程序设计中,使用位逻辑运算符来操作二进制数据。
位逻辑运算符只能操作二进制数据。如果用在其他进制
位逻辑运算符 | 说明 |
---|---|
~ | 按位取反运算 |
& | 按位与运算 |
| | 按位或运算 |
^ | 按位异或运算 |
>> | 右移 |
>>> | 右移并用0填充 |
<< | 左移 |
3.5.条件运算符
条件运算符是一种特殊的运算符,也被称为三目运算符。
变量=(布尔表达式)? 为true时赋予的值:为false时赋予的值
3.6.赋值运算符
赋值运算符是等号“=”
3.7.运算符的优先级
运算符 | Java 运算符 |
---|---|
分隔符 | . [] () {} , ; |
单目运算符 | ++ – ~ ! |
强制类型转换运算符 | (type) |
乘 除 取余 | × ÷ % |
加 减 | + - |
移位运算符 | << >> >>> |
关系运算符 | < <= >= > instanceof |
等价运算符 | == != |
按位与 | & |
按位异或 | ^ |
按位或 | | |
条件与 | && |
条件或 | || |
三目运算符 | ?: |
赋值 | = += -= *= /= &= |= ^= %= <<= >>= >>>= |
4.字符串
字符串(String)是由 0 个或多个字符组成的有限序列,是编程语言中表示文本的数据类型。通常以字符串的整体作为操作对象,例如在字符串中查找某个子串、求取一个子串、在字符串的某个位置插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置的字符都相等。
4.1.字符串的初始化
在Java程序中,我们可以先使用关键字new
来创建String
实例,然后再对创建好的实例赋值,如下:
String a = new String();//这个时候a是空字符串
a = "HelloWorld!!!";
我们也可以将上述两行代码合并,如下:
String a = new String("HelloWorld!!!");
除此之外,还有表示字符串的如下形式:
String a = "HelloWorld!!!";
注意:字符串并不是原始的数据类型,而是一种复杂的数据类型,对它进行初始化的方法不止一种,但也没有规定哪种方法最优秀,因此我们可以根据自己的习惯使用。
4.2.String类
在Java程序中可以使用String类来操作字符串,该类有很多方法可供我们使用。如 索引、追加字符串、比较字符串、取字符串长度、替换字符串、字符串截取、字符串大小写互转和消除字符串中的空格字符。
索引
在Java程序中,通过索引函数 charAt()可以返回字符串中指定索引的位置。需要注意的是,索引是从0开始的:
public char charAt(int index)
追加字符串
追加字符串函数 concat()的功能是在字符串的末尾添加字符串,追加字符串是一种比较常用的操作,具体语法格式如下所示:
public String concat(String s)
比较字符串
比较字符串函数 equalsIgnoreCase() 的功能是对两个字符串进行比较,看是否相同。如果是,返回true,不是则返回false。
public Boolean equalsIgnoreCase(String s)
取字符串长度
在String 类中有一个方法可以获取字符串的长度,语法格式如下:
public int length()
替换字符串
替换是两个动作,第一个是查找,第二个是替换。在Java中实现替换字符串的方法十分简单,只需要使用 replace()方法即可实现。
public String replace(char old,char new)
字符串的截取
有时候,我们需要从长的字符串中截取一段字符串,此功能可以通过 substring() 方法实现,此方法有两种语法格式。
第一种格式为:
public String substring(int begin)
第二种格式为:
public String substring(int begin,int end)
字符串大小写互转
当我们需要对字符串中的字母进行转换,在String 类里,用户可以使用专用方法进行互换。
将大写字母转换成小写字母的格式如下:
public String toLowerCase()
将小写字母转换成大写字母的格式如下:
public String toUpperCase()
消除字符串中的空格字符
在字符串中可能有空白字符,有时在一些特定的环境中并不需要这样的空白字符,此时我们可以使用 trim() 方法去除空白,此方法的语法格式如下:
public String trim()
4.3.StringBuffer类
StringBuffer 类是 Java中另一个重要的操作字符串的类,当需要对字符串进行大量的修改时,使用StringBuffer类是最佳选择。StringBuffer 类提供给我们常用的方法有 追加字符、插入字符和颠倒字符。
追加字符
在 StringBuffer 类中实现追加字符功能的方法的语法格式如下:
public synchronized StringBuffer append(boolean b)
插入字符
前面的字符追加方法总是在字符串的末尾添加内容,倘若需要在字符串中添加内容,就需要使用方法 insert(),语法格式如下:
public synchronized StringBuffer insert(int offset,String s)
上述语法的含义是:将第2个参数的内容添加到第1个参数指定的位置,换句话说,第1个参数表示要插入的起始位置,第2个参数是需要插入的内容,可以是包括String在内的任何数据类型
颠倒字符
颠倒字符方法 reverse() 的语法格式如下:
public synchronized StringBuffer reverse()
4.4.类型转换
在 Java程序中,不同基本类型的值经常需要在不同类型之间进行转换。Java 语言提供的7种数值类型之间可以相互转换,有自动类型转换和强制类型转换两种类型转换方式。
自动类型转换
如果系统支持把某种基本类型的值直接赋值给另一种基本类型的变量,这种方式被称为自动类型转换。当把一个取值范围小的数值或变量直接赋给另一个取值大的变量时,系统可以进行自动类型转换。
Java 中所有数值型变量之间可以进行类型转换,取值范围小的可以向取值范围大的进行自动类型转换。Java支持自动类型转换的类型如下图所示:
上图中左边的数据类型转换成右边的数据类型,采用自动类型转换。
强制类型转换
如果希望上图逆向,右边的数据类型转换成左边的数据类型,则要采用强制类型转换。语法如下:
(targetType)value
4.4.Java11新特性:新增的String函数
在JDK11中,新增了6个字符串函数。
String.repeat(int):根据int 参数的值重复String
String.lines():返回从跟字符串中提取的行,由行终止符分隔。行要么是零个或多个字符的序列,后面跟着一个行结束符;要么是一个或多个字符的序列,后面是字符串的结尾。一行不包括行终止符。
String.strip():返回一个字符串,该字符串的值为该字符串,其中所有前导和尾部空白均被删除。在Java程序中,我们可以使用此函数去除字符串开头和结尾的空白。
String.stripLeading():返回一个字符串,该字符串的值为该字符串,并且删除所有前导的空白。
String.stripTrailing():返回一个字符串,该字符串的值为该字符串,并且删除所有尾部的所有空白。
String.isBlank():判断字符串是否为空或仅包含空格。如果字符串为空或仅包含空格则返回true;否则,返回false。