Day 2
关键字与保留字
关键字(keywords)
-
##### 定义:被 Java 语言赋予了特殊含义,用于专门用途的字符串(单词)
-
##### 特点:关键字中所有字母都为小写
-
用于定义数据类型的关键字:
class\interface\enum\byte\short\int\long\float\double\char\boolean\void
-
用于定义流程控制的关键字:
if\else\switch\case\default\while\do\for\break\continue\return
-
用于定义访问权限修饰符的关键字:
private\protected\public
-
用于定义类、函数、变量修饰符的关键字:
extends\final\static\synchronized
-
用于定义建立实例及引用实例,判断实例的关键字:
new\this\super\instanceof
-
用于异常处理的关键字:
try\catch\finally\throw\throws
-
用于包的关键字:
package\import
-
其他修饰符关键字:
native\strictfp\transient\volatile\assert
-
用于定义数据类型值的字面值:
true\false\null
保留字(reserved words)
goto\const
标识符
- #### Java 对各种变量、方法、和类 要素命名时使用的字符序列称为标识符(类名、变量名、方法名、接口名、包名)
标识符命名规则:
- 由
26 个英文字母大小写
、0 ~ 9
、_
或$
组成 - 数字不可开头
- 不可以使用关键字和保留字,但可以包含
- 严格区分大小写,长度无限制
- 不能包含空格
标识符命名规范:
- **包名:**多单词组成时所有字母都小写
- **类名、接口名:**多单词组成时所有单词首字母大写
- **变量名、方法名:**多单词组成时第一个单词首字母小写
- **常量名:**所有字母都大写,多单词组成时每个单词用下划线连接
注意1:在起名字时,为了提高阅读性,要尽量有意义
注意2:Java 采用 unicode 字符集,因此标识符也可以使用汉字声明,但不建议使用
变量
概念:
-
内存中的一个存储区域
-
该区域的数据可以在统一类型范围内不断变化
-
变量是程序中最基本的存储单元,包含变量类型、变量名
和存储的值
作用:
用于在内存中保存数据
说明:
- Java 中每个变量必须先声明、后使用
- 使用变量名来访问这块区域的数据
- 变量的作用域:其定义所在的一对
{}
内 - 变量只有在其作用域内才有效
- 同一个作用域内,不能定义重名的变量
分类:
基本数据类型分类:
1. 整型:byte\short\int\long
- Java 各类证书类型有固定的表数范围和字段长度,不受具体 OS 的影响,以保证 Java 程序的可移植性
- Java 的整数常量默认为 int 型,声明 long 型常量需要在后面加
I
或L
- Java 程序中变量通常声明为 int 型,除非不足以表示较大的数才使用 long
类型 | 占用空间 | 表数范围 |
---|---|---|
byte | 1 字节 = 8 bit 位 | -128 ~ 127 |
short | 2 字节 | -215 ~ 215 - 1 |
int | 4 字节 | -231 ~ 231 - 1 |
long | 8 字节 | -263 ~ 263 - 1 |
2. 浮点型:float\double
-
有固定的表数范围和字段长度,不受具体 OS 的影响,以保证 Java 程序的可移植性
-
浮点型常量有两种表示形式:
- 十进制数形式,如 3.14、3.14f、.618、(必须有小数点)
- 科学计数法形式,如 3.14e2、314E2、100E-2
-
float 单精度,尾数可以精确到 7 位有效数字
-
double 双精度,精度是 float 的两倍,通常采用此类型
-
Java 的浮点型常量默认为 double 型,声明 float 型常量需后加
f
或F
类型 占用存储空间 表述范围 单精度 float 4 字节 -3.403E38 ~ 3.403E38 双精度 double 8 字节 -1.798E308 ~ 1.798E308
3. 字符型:char
-
char 型数据用来表示通常意义上的“字符”(2字节)
-
Java 中的所有字符都使用 Unicode 编码,一个字符可以存储一个字母、一个汉字或其他书面语的一个字母
-
字符型变量的三种表现形式:
- 字符常量是用单引号括起来的单个字符,如char c1 =
a
; - Java 中还允许使用转义字符
\
来将其后的字符转变为特殊字符型常量,例如\n
表示换行,\t
表示制表符(ASCII码) - 直接使用 Unicode 值来表示字符型常量如:\u000a 表示换行符
- 字符常量是用单引号括起来的单个字符,如char c1 =
4. 布尔型:boolean
- 只能取
true
或false
两个值之一 - 常常在条件判断、循环结构中使用
基本数据类型转换
-
自动数据类型转换
当容量小的数据类型的变量与容器大的数据类型的变量做运算时,结果自动提升为容量大的数据类型-
short ⇨ int ⇨ long ⇨ float ⇨ double
-
当 byte、char、short 三种类型的变量做运算时,结果为 int 型
-
-
强制类型转换
自动类型提升运算的逆运算
- 需要使用强转符:
()
- 强制类型转换,可能导致精度损失
class VariableTest3{ public static void main(String[] args){ double d1 = 12.9; int i1 = (int)d1;//截断操作 System.out.println(i1); int i2 = 128; byte b = (byte)i2;//超出范围 System.out.println(b); } }
class VaribleTest4{ public static void main(String[] args){ long l = 123433; System.out.println(l); //声明long常量时数字末尾未加l,强制类型转换为int型 long l1 = 12321231233; System.out.println(l1); //编译失败,过大的整数,超出int范围 } }
整型常量默认类型为
int
型浮点型常量,默认类型为
double
型 - 需要使用强转符:
引用数据类型分类:
- 类
class
- 接口
interface
- 数组
array
String 类型数据变量
-
String 属于引用数据类型,翻译为字符串
-
声明 String 数据类型变量时,使用一对
“”
-
String 可以和 8 种基本数据类型变量做运算,且运算只能是连接运算,运算的结果仍然是 String 类型
class StringTest{ public static void main(String[] args){ String s1 = "Hello World"; System.out.println(s1); String s2 = "a"; String s3 = ""; //***************** int number = 1001; String numberStr = "学号"; String info = numberStr + number;//在这里 + 为连接运算 boolean b1 = true; String info1 = info +b1;//在这里 + 为连接运算 System.out.println(info1); } }
二进制
二进制整数有如下三种形式:
- 原码:直接将一个数值转换成二进制数,最高位是符号位
- 负数的反码:是对原码按位取反,只是最高位(符号位)确定为 1
- 负数的补码:其反码+ 1
计算机以二进制补码的形式保存所有整数
- 正数的原码、反码、补码都相同
- 负数的补码是其反码 + 1
//正数转化为负数
0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | // 45
符号位取反 ↓
1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | // -45 的原码
除符号位以外,各个位取反 ↓
1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | // -45的反码
反码 + 1 ↓
1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | // -45 的补码
进制
-
所有数字在计算机底层都已二进制形式存在
-
对于整数,有四种表示方式:
- 二进制(binary):0,1,满 2 进 1。以 0b 或 0B 开头
- 十进制(decimal):0 ~ 9,满 10 进 1
- 八进制(octal):0 ~ 7,满 8 进 1 。以数字 0 开头
- 十六进制(hex):0 ~ 9 及 A ~ F,满 16 进 1,以 0x 或 0X 开头
进制转换
十进制 —> 二进制:除 2 取余的逆
二进制 —> 八进制:每三位取和
二进制 —> 十进制:每位 2n - 1 相加
二进制 —> 十六进制:每四位取和