第二章 Java基本语法(上):变量和运算符
关键字: 被Java语言赋予了特殊含义,用做专门用途的字符串。关键字中所有字母均为小写。
标识符:凡是可以自己起名的地方都叫标识符。
合法标识符的定义规则:
由26个英文字母大小写,0-9 ,_或 $ 组成
数字不可以开头。
不可以使用关键字和保留字,但能包含关键字和保留字。
Java中严格区分大小写,长度无限制。
标识符不能包含空格。
名称命名规范:
- 包名:多单词组成时所有字母都小写 xxxyyyzzz
- 类名、接口名:多单词组成时,所有单词的首字母大写 XxxYyyZzz
- 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写 xxxYyyZzz
- 常量名:所有字母都大写。多单词时每个单词用下划线连接 XXX_YYY_ZZZ
取名的时候为了提高阅读性,尽量要有意义。
java采用unicode字符集
注意:
变量使用之前必须先定义(声明+赋值),否则编译不通过!
变量只其作用域内有效,即只在其定义所在的一对"{ }”内
同一作用域内不允许定义重名的变量
数据类型:
- 按数据类型来分:

- 按声明的位置来分:(讲完面向对象之后重点关注)

整数类型:
byte (1字节=8bit) / short (2字节) / int (4字节) / long(8字节)
定义long型常/变量时必须以’l’ 或’L’结尾
通常,定义整型变量时,使用int型
浮点类型:
float (4字节) / double(8字节)
float表示的数值范围比long还要大
原因在于整数类型的变量内存中放的是实实在在的数,浮点类型的变量内存中存放的是小数+10的多少次幂
定义float型常/变量时必须以’f’或’F’结尾
通常,定义浮点型变量时,使用double型
字符类型:
char (2字节)
定义char型变量,通常使用一对 ' ',内部只能写一个字符,一个汉字、一个日文、字母都行
3种表现形式:1.声明一个字符 2.转义字符 3.直接使用Unicode值来表示字符型常量,e.g.'\u0043'

布尔类型:
只允许取值true和false,无null
注:不可以使用0或非 0 的整数替代false和true,这点和C语言不同
字符串String类型:
String不是基本数据类型,属于引用数据类型
声明String类型变量时,使用一对 “ "
String可以和8种基本数据类型做运算,且只能是连接运算(+),运算结果仍为String
基本数据类型之间的运算规则:
注:不包含boolean类型
1.自动类型提升:
当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型。
特别的,byte、char、short之间(包括同类型)做运算时,结果均要转化为int型。
byte 、char、short —> int —> long —> float —> double
说明:这里的容量大小指的是,表示的数据范围的大小。比如4字节的float的容量大于8字节的long
2.强制类型转换:
自动类型转换的逆过程,将容量大的数据类型转化为容量小的数据类型。
使用时需要加上强转符: ( )
可能会造成精度损失和溢出,使用时要小心
String不能通过( )来直接转换成基本数据类型,但通过基本类型对应的包装类可以 e.g. int i = Integer.parseInt("43")

进制:

二进制的整数有三种形式:原码、反码、补码
正数的原码、反码、补码都一样,负数的补码是其反码+1
计算机以补码的形式保存所有整数
运算符:
算术运算符

注:取模运算%,结果的符号与被模数的符号相同,也就是说模数的负号可以忽略不用管
自加加或自减减不会改变变量本身的数据类型
赋值运算符
“ = "支持连续赋值
扩展赋值运算符: +=, -=, *=, /=, %= 也不会改变变量本身的数据类型
比较运算符

比较运算符的结果都是boolean型,也就是要么是true,要么是false。
逻辑运算符

用于连接布尔型表达式
“&”和“&&”的区别:
两者运算结果相同
当符号左边是true时,两者都会执行符号右边的运算
当符号左边是false时,单&继续执行右边的运算,双&不再继续执行右边的运算,相当于被短路了。
“|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。
注:开发中推荐使用“&&”和“||”
位运算符


位运算符操作的都是整型的数据
<<:在一定范围内,每左移1位相当于 * 2
>>:在一定范围内,每右移1位相当于 / 2
三元运算符

三元运算符可以嵌套使用 e.g. String res = ( m > n ) ? “m大” : ( ( m == n )? “一样大” : ”n大” )
凡可以使用三元运算符的地方,均可以改写成if-else语句,反之不成立
当三元运算符和if-else结构均可以使用的时候,建议优先选择三元运算符,原因:简洁、执行效率高