1.标识符
java中标识符是为方法、变量或其他用户定义项所定义的名称。
标识符可以有一个或多个字符组成。构成规则如下:
(1)标识符由数字和字母、美元符号($)、下划线_以及Unicode字符集中的符号大于0xCO的所有符号组合构成,符号之间不能有空格。
(2)标识符的第一个符号为字母、下划线和美元符号,后面可以是任何字母、数字和美元符号或下划线。
Java 区分大小写,因此 Abc 和 abc 是两个不同的标识符。
标识符分为两类,分别为关键字和用户自定义标识符。
(1)关键字是有特殊含义的标识符,如 true、false 表示逻辑的真假。
(2)用户自定义标识符是由用户按标识符构成规则生成的非保留字的标识符,如 abc 就是一个标识符.
标识符可以包含关键字,但不能与关键字重名。
标识符常用来命名常量、变量、类和类对象。
2.关键字
关键字是对编译器有特殊意义的固定单词,不能再程序中做其他母的使用。关键字具有专门的意义和用途,和自定义的标识符不同,不能当作一般的标识符来使用。
实例 HelloJava.java 中的 class 就是一个关键字,它用来声明一个类,其类名称为 HelloJava。
关键字对 Java 编译器有特殊的意义,它们用来表示一种数据类型,或者表示程序的结构等。保留字是为 Java 预留的关键字,它们虽然现在没有作为关键字,但在以后的升级版本中有可能作为关键字。
Java 语言目前定义了 51 个关键字,这些关键字不能作为变量名、类名和方法名来使用。以下对这些关键字进行了分类。
(1)数据类型:boolean、int、long、short、byte、float、double、char、class、interface。
(2)流程控制:if、else、do、while、for、switch、case、default、break、continue、return、try、catch、finally。
(3)修饰符:public、protected、private、final、void、static、strict、abstract、transient、synchronized、volatile、native。
(4)动作:package、import、throw、throws、extends、implements、this、supper、instanceof、new。
(5)保留字:true、false、null、goto、const。
3.注释
双斜杠“//”标识,智能注释一行内容用在注释信息内容少的地方
包含在“/”和“/”之间的是多行注释,能注释很多行的内容。为了可读性比较好,一般首行和尾行不写注释信息
包含在“/*”和“/”之间的是文档注释,也能注释多行内容,一般用在类、方法和变量上面,用来描述其作用。注释后,鼠标放在类和变量上面会自动显示出我们注释的内容。

4.常量值
常量和常量值是不同的概念,常量值是常量的具体和直观的表现形式,常量是形式化的表现。
常量值又称为字面常量,它是通过数据直接表示的,因此有很多种数据类型,像整型和字符串型等。
整型常量值:如十进制数54、-56,0,八进制数0125、-013,十六进制数0x100,-0x16。
实型常量值:十进制 12.43,-98.0。科学计数法1.75e5或 32&E3,其中 e 或 E 之前必须有数字,且 e 或 E 之后的数字必须为整数。
Java 实型常量默认在内存中占 64 位,是具有双精度型(double)的值。
布尔型常量值
Java 的布尔型常量只有两个值,即 false(假)和 true(真)。
字符型和字符串常量值
Java 的字符型常量值是用单引号引起来的一个字符,如 'e'、E'。需要注意的是,Java 字符串常量值中的单引号和双引号不可混用。双引号用来表示字符串,像 "11"、"d" 等都是表示单个字符的字符串。
除了以上所述形式的字符常量值之外,Java 还允许使用一种特殊形式的字符常量值来表示一些难以用一般字符表示的字符,这种特殊形式的字符是以开头的字符序列,称为转义字符。Java 中常用的转义字符及其表示的意义如下
\ddd 13 位八进制数所表示的字符
\uxxxx 1
4 位十六进制数所表示的字符
' 单引号字符
\" 双引号字符
\ 双斜杠字符
\r 回车
\n 换行
\b 退格
\t 横向跳格

定义常量,使用 final 关键字来定义一个常量,其语法如下所示:

final dataType variableName = value

其中,final 是定义常量的关键字,dataType 指明常量的数据类型,variableName 是变量的名称,value 是初始值。
final 关键字表示最终的,它可以修改很多元素,修饰变量就变成了常量。

常量有三种类型:静态常量、成员常量和局部常量。
静态常量,使用在 final 之前 public static 修饰。public static 修饰的常量作用域是全局的,不需要创建对象就可以访问它。
成员常量,作用域类似于成员变量,但不能修改。
局部常量,作用域类似于局部变量,但不能修改。

注意:
在定义常量时就需要对该常量进行初始化。
final 关键字不仅可以用来修饰基本数据类型的常量,还可以用来修饰对象的引用或者方法。
为了与变量区别,常量取名一般都用大写字符。
5.变量的声明和初始化
常量和变量是 Java 程序中最基础的两个元素。常量的值是不能被修改的,而变量的值在程序运行期间可以被修改。
所有的变量必须先声明、后使用。指定类型的变量只能接受类型与之匹配的值。

用户通过指定数据类型和标识符来声明变量,其基本语法如下:

DataType identifier;

DataType identifier=value;

DataType:变量类型,如 int、string、 char 和 double 等。
identifier:标识符,也叫变量名称。
value:声明变量时的值。

变量标识符的命名规范如下:

(1)首字符必须是字母、下划线(―)、美元符号($)或者人民币(¥)。
(2)标识符有数字(0 ~ 9)、大写字母(A ~ Z)、小写字母(a ~ z)、下划线(_)以及所有在十六进制 0xC0 前的 ASCII 码组成。
(3)不能把关键字、保留字作为标识符。
(4)标识符的长度没有限制。
(5)标识符区分大小写。
5.1变量赋值
初始化变量是指为变量指定一个明确的初始值。初始化变量有两种方式:一种是声明时直接赋值,一种是先声明、后赋值。如下代码分别使用两种方式对变量进行了初始化。

char usersex='女';    // 直接赋值

或者

String username;    // 先声明
username ="琪琪";    // 后赋值

多个同类型的变量可以同时定义或者初始化,但是多个变量中间要使用逗号分隔,声明结束时用分号分隔。

String username,address,phone,tel;    // 声明多个变量
int num1=12,num2=23,result=35;    // 声明并初始化多个变量

java变量的作用域有:静态变量、全局变量和局部变量
根据作用域的不同,一般将变量分为:成员变量和局部变量。
成员变量:Java 的成员变量有两种,分别是全局变量和静态变量(类变量)。定义在方法体和语句块之外,不属于任何一个方法,作用域是整个类。
全局变量(实例变量): 无 static 修饰访问方式为,对象名.变量名。生命周期为只要对象被当作引用,实例变量就将存在。
静态变量(类变量): 用 static 修饰,访问方式类名.变量名或对象名.变量名。其生命周期取决于类的生命周期。类被垃圾回收机制彻底回收时才会被销毁。
局部变量
局部变量是指在方法或者方法代码块中定义的变量,其作用域是其所在的代码块。可分为以下三种:
方法参数变量(形参):在整个方法内有效。
方法局部变量(方法内定义): 从定义这个变量开始到方法结束这一段时间内有效。
代码块局部变量(代码块内定义):从定义这个变量开始到代码块结束这一段时间内有效。
注意:局部变量在使用前必须被程序员主动初始化值。
6.数据类型:基本数据类型和引用数据类型
Java 语言支持的数据类型分为两种:基本数据类型(Primitive Type)和引用数据类型(Reference Type)。
基本数据类型: boolean(布尔型)、float(单精度浮点型)、char(字符型)、byte(字节型)、short(短整型)、int(整型)、long(长整型)和 double (双精度浮点型)共 8 种,
类型名称 关键字 占用内存 取值范围
字节型 byte 1 字节 -128 ~ 127
短整型 short 2 字节 -32768 ~ 32767
整型 int 4 字节 -2147483648 ~ 2147483647
长整型 long 8 字节 -9223372036854775808L ~ 9223372036854775807L
单精度浮点型 float 4 字节 +/-3.4E+38F(6~7 个有效位)
双精度浮点型 double 8 字节 +/-1.8E+308 (15 个有效位)
字符型 char 2 字节 ISO 单一字符集
布尔型 boolean 1 字节 true 或 false

引用数据类型:类(class)、接口(interface)、数组[]。
6.1基本数据类型
基本数据类型又可分为 4 大类,即整数类型(包括 byte、short,int 和 long)、浮点类型(包括 float 和 double)、布尔类型和字符类型(char)。
字节型(byte):byte 类型是最小的整数类型。当用户从网络或文件中处理数据流时,或者处理可能与 Java 的其他内置类型不直接兼容的未加工的二进制数据时,该类型非常有用。
短整型(short):short 类型限制数据的存储为先高字节,后低字节,这样在某些机器中会出错,因此该类型很少被使用。
整型(int):int 类型是最常使用的一种整数类型。
长整型(long):对于大型程序常会遇到很大的整数,当超出 int 类型所表示的范围时就要使用 long 类型。

浮点类型是带有小数部分的数据类型,也叫实型。浮点型数据包括单精度浮点型(float)和双精度浮点型(double),代表有小数精度要求的数字。

单精度浮点型(float)和双精度浮点型(double)之间的区别主要是所占用的内存大小不同,float 类型占用 4 字节的内存空间,double 类型占用 8 字节的内存空间。双精度类型 double 比单精度类型 float 具有更高的精度和更大的表示范围。

Java 默认的浮点型为 double,例如,11.11 和 1.2345 都是 double 型数值。如果要说明一个 float 类型数值,就需要在其后追加字母 f 或 F,如 11.11f 和 1.2345F 都是 float 类型的常数。
一个 double 类型的数据与一个 int 类型的数据相乘后得到的结果类型为 double

布尔类型(boolean)用于对两个数值通过逻辑运算,判断结果是“真”还是“假”。Java 中用保留字 true 和 false 来代表逻辑运算中的“真”和“假”。因此,一个 boolean 类型的变量或表达式只能是取 true 和 false 这两个值中的一个。
在 Java 语言中,布尔类型的值不能转换成任何数据类型,true 常量不等于 1,而 false 常量也不等于 0。这两个值只能赋给声明为 boolean 类型的变量,或者用于布尔运算表达式中。

Java 语言中的字符类型(char)使用两个字节的 Unicode 编码表示,它支持世界上所有语言,可以使用单引号字符或者整数对 char 型赋值。
一般计算机语言使用 ASCII 编码,用一个字节表示一个字符。ASCII 码是 Unicode 码的一个子集,用 Unicode 表示 ASCII 码时,其高字节为 0,它是其前 255 个字符。
6.2引用数据类型
引用数据类型建立在基本数据类型的基础上,包括数组、类和接口。引用数据类型是由用户自定义,用来限制其他数据的类型。另外,Java 语言中不支持 C++ 中的指针类型、结构类型、联合类型和枚举类型。
引用类型还有一种特殊的 null 类型。所谓引用数据类型就是对一个对象的引用,对象包括实例和数组两种。实际上,引用类型变量就是一个指针,只是 Java 语言里不再使用指针这个说法。
空类型(null type)就是 null 值的类型,这种类型没有名称。因为 null 类型没有名称,所以不可能声明一个 null 类型的变量或者转换到 null 类型。
空引用(null)是 null 类型变量唯一的值。空引用(null)可以转换为任何引用类型。
在实际开发中,程序员可以忽略 null 类型,假定 null 只是引用类型的一个特殊直接量。

注意:空引用(null)只能被转换成引用类型,不能转换成基本类型,因此不要把一个 null 值赋给基本数据类型的变量。

7.数据类型转换:强制类型转换+自动类型转换
数据类型的转换是在所赋值的数值类型和被变量接收的数据类型不一致时发生的,它需要从一种数据类型转换成另一种数据类型。数据类型的转换可以分为隐式转换(自动类型转换)和显式转换(强制类型转换)两种。
7.1隐式转换(自动类型转换)
如果以下 2 个条件都满足,那么将一种类型的数据赋给另外一种类型变量的时,将执行自动类型转换(automatic type conversion)。
(1)两种数据类型彼此兼容
(2)目标类型的取值范围大于源数据类型(低级类型数据转换成高级类型数据)
例如 byte 类型向 short 类型转换时,由于 short 类型的取值范围较大,会自动将 byte 转换为 short 类型。
自动转换的规则是从低级类型数据转换成高级类型数据。转换规则如下:
数值型数据的转换:byte → short → int →long → float → double。
字符型转换为整型:char → int。
注意:char 类型比较特殊,char 自动转换成 int、long、float 和 double,但 byte 和 short 不能自动转换为 char,而且 char 也不能自动转换为 byte 或 short。
7.2显式转换(强制类型转换)
当两种数据类型不兼容,或目标类型的取值范围小于源类型时,自动转换将无法进行,这时就需要进行强制类型转换。强制转换的实例如下:

int a = 3;
double b = 5.0;
a = (int)b;

在强制类型转换中,如果是将浮点类型的值转换为整数,直接去掉小数点后边的所有数字;而如果是整数类型强制转换为浮点类型时,将在小数点后面补零。

8.算术运算符
运算符按照操作数的数量可以分为单目运算符、双目运算符和三目运算符。
7.1一元运算符
算术一元运算一共有 3 个,分别是 -、++ 和 --。

运算符 名称 说明 例 子

-         取反符号         取反运算                       b=-a

++       自加一         先取值再加一,或先加一再取值      a++ 或 ++a

--        自减一         先取值再减一,或先减一再取值      a-- 或 --a

-a 是对 a 取反运算,a++ 或 a-- 是在表达式运算完后,再给 a 加一或减一。而 ++a 或 --a 是先给 a 加一或减一,然后再进行表达式运算。
7.2二元运算符
Java 语言中算术运算符的功能是进行算术运算,除了经常使用的加(+)、减(-)、乘()和除(\)外,还有取模运算(%)。加(+)、减(-)、乘()、除(\)和我们平常接触的数算具有相同的含义。
图片说明
算术运算符都是双目运算符,即连接两个操作数的运算符。优先级上,*、/、% 具有相同运算级别,并高于 +、-(+、- 具有相同级别)。
这种运算规则与数
算中的规则是相同的。首先计算赋值符号(=)右边配对的括号内的值,其次按从左向右的结合方向计算乘法,最后做求余运算。
进行算术运算时应注意以下两点:
求余(%)运算要求参与运算的两个操作数均为整型,不能为其他类型。
两个整数进行除法运算,其结果仍为整数。如果整数与实数进行除法运算,则结果为实数。
例如:
①int x=2,y=1; 表达式 y/x 的结果是 0。
②float x=2.0f; int y=1; 表达式 y/x 的结果是 0.5。
7.3算术赋值运算符
算术赋值运算符只是一种简写,一般用于变量自身的变化。
图片说明
图片说明
7.4逻辑运算符(&&、||和!)
逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是 true 或 false。
逻辑运算符是对布尔型变量进行运算,其结果也是布尔型。
图片说明
逻辑运算符的优先级为:!运算级别最高,&& 运算高于 || 运算。!运算符的优先级高于算术运算符,而 && 和 || 运算则低于关系运算符。结合方向是:逻辑非(单目运算符)具有右结合性,逻辑与和逻辑或(双目运算符)具有左结合性。
7.5关系运算符
关系运算符(relational operators)也可以称为“比较运算符”,用于用来比较判断两个变量或常量的大小。关系运算符是二元运算符,运算结果是 boolean 型。当运算符对应的关系成立时,运算结果是 true,否则是 false。
图片说明
注意:
(1)基本类型的变量、值不能和引用类型的变量、值使用 == 进行比较;boolean 类型的变量、值不能与其他任意类型的变量、值使用 == 进行比较;如果两个引用类型之间没有父子继承关系,那么它们的变量也不能使用 == 进行比较。
(2)== 和 != 可以应用于基本数据类型和引用类型。当用于引用类型比较时,比较的是两个引用是否指向同一个对象,但当时实际开发过程多数情况下,只是比较对象的内容是否相当,不需要比较是否为同一个对象。
关系运算符的优先级为:>、<、>=、<= 具有相同的优先级,并且高于具有相同优先级的 !=、==。关系运算符的优先级高于赋值运算符而低于算术运算符,结合方向是自左向右。
7.6位运算符
Java 定义的位运算(bitwise operators)直接对整数类型的位进行操作,这些整数类型包括 long,int,short,char 和 byte。
位运算符主要用来对操作数二进制的位进行运算。按位运算表示按每个二进制位(bit)进行计算,其操作数和运算结果都是整型值。
Java 语言中的位运算符分为位逻辑运算符和位移运算符两类。
位逻辑运算符
位逻辑运算符包含 4 个:&(与)、|(或)、~(非)和 ^(异或)。除了 ~(即位取反)为单目运算符外,其余都为双目运算符。
图片说明

位与运算符为&,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位同时为 1,那么计算结果才为 1,否则为 0。因此,任何数与 0 进行按位与运算,其结果都为 0。
位或运算符为|,其运算规则是:参与运算的数字,低位对齐,高位不足的补零。如果对应的二进制位只要有一个为 1,那么结果就为 1;如果对应的二进制位都为 0,结果才为 0。
位异或运算符为^,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位相同(同时为 0 或同时为 1)时,结果为 0;如果对应的二进制位不相同,结果则为 1。
位取反运算符为~,其运算规则是:只对一个操作数进行运算,将操作数二进制中的 1 改为 0,0 改为 1。
位移运算符
位移运算符用来将操作数向某个方向(向左或者右)移动指定的二进制位数。 Java 语言中的两个位移运算符,它们都属于双目运算符。
图片说明
左移位运算符为«,其运算规则是:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
右位移运算符为»,其运算规则是:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补零。
复合位赋值运算符
所有的二进制位运算符都有一种将赋值与位运算组合在一起的简写形式。复合位赋值运算符由赋值运算符与位逻辑运算符和位移运算符组合而成
图片说明
三目运算符(?:)
Java 提供了一个特别的三元运算符(也叫三目运算符)经常用于取代某个类型的 if-then-else 语句。条件运算符的符号表示为“?:”,使用该运算符时需要有三个操作数,因此称其为三目运算符。

result = <expression> ? <statement1> : <statement3>;

其中,expression 是一个布尔表达式。当 expression 为真时,执行 statement1, 否则就执行 statement3。此三元运算符要求返回一个结果,因此要实现简单的二分支程序,即可使用该条件运算符。

运算符优先级
一般而言,单目运算符优先级较高,赋值运算符优先级较低。算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性,单目运算符、三目运算符、赋值运算符具有右结合性。
图片说明