1. 关键字 保留字与标识符
关键字
被java语言赋予了特殊含义,用作专门用途的字符串(或单词)关键字比较多,全部都是小写字母
说明:关键字一共有50个,其中const和go是保留字
true, false, null 不在其中,其实是字面量,用来表示特殊的布尔值和空值
类型 | 关键字 |
---|---|
定义数据类型的关键字 | 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 |
定义类 函数,变量修饰符的关键字 | abstract final static synchronized |
定义类与类之间关系的关键字 | extends implements |
定义建立实例及引用实例,判断实例的关键字 | new this super instanceof |
定义异常处理的关键字 | try cache finally throw throws |
定义包的关键字 | package import |
定义修饰符关键字 | native strictfp transient volatile assert const goto |
标识符identifier
java中的变量,方法,类等要素命名是使用的字符序列,成为标识符
技巧:凡是可以自己命名的地方都叫标识符
标识符的命名规则:
- 26个英文字母大小写 0~9,_或$组成
- 数字不可以开头
- 不可以使用关键字和保留字,但能包含
- java中严格区分大小写,长度无限制
- 标识符中不能包含空格
标识符的命名规范:
- 包名:多单词组成所有字母都小写:java.lang com.auguigu.bean
- 类名,接口名:多单词组成,所有单词首字母大写
- 变量名,方法名:多单词组成,第一个单词首字母小写,其余单词首字母大写,驼峰
- 常量名:所有字母都大写,多单词之间用下划线连接
- 为提高阅读性,见名知意
2. 变量
变量是程序中不可或缺的组成单位,是最基本的存储单元
变量的概念:
- 内存中的一个存储区域,该区域的数据可以在同一类型范围内不断变化
- 变量构成的三个要素:数据类型,变量名,存储的值
- java中声明变量的格式:数据类型 变量名 = 变量值
变量的作用: 用于在内存中保存数据
使用变量注意:
- java中每个变量必须先声明,后使用
- 使用变量名来访问这块区域中的变量
- 变量的作用域,其定义在一个{}内
- 变量只有在其作用域中有效,出了作用域,变量不可以再次被调用
- 同一个作用域内,不可定义重名的变量
2.1 java中变量的数据类型
java中的数据类型分为两大类:
基本数据类型: 整数类型,浮点数类型,字符类型,布尔类型
引用数据类型: 数组,类,接口,枚举,注解,记录
变量的数据类型可以是基本数据类型,也可以是引用数据类型
class VariableTest{
public static void main(String[] args){
int age = 12;
double weight = 40.5;
char gender = '男';
boolean isMarry = false;
String name="join";
// 声明多个同类型变量
int a, b,c;
a = 30;
System.out.println("age" + age);
System.out.println("weight" + weight);
System.out.println("gender" + gender);
System.out.println("isMarry" + isMarry);
System.out.println("name" + name);
System.out.println("a" + a);
}
}
2.2 变量的赋值
给变量赋值,表示把值存储在变量代表的内存空间中,同时给变量赋值。类型必须与声明该变量时的类型一致或兼容
格式:变量名 = 值
- 可以使用合适类型的常量值给已声明的变量赋值
- 也可以使用其他变量或者表达式给变量赋值
- 变量可以反复赋值
2.3 基本数据类型介绍
2.3.1 整数类型 byte short int long
java各整数类型有固定的表数范围,和字段长度。不受操作系统的影响,以保证java程序的可移植性。
类型 | 占用存储空间 | 表数范围 |
---|---|---|
byte | 1字节 = 8bit位 | -128~127 |
short | 2字节 | -2^ 15~2^ 15-1 |
int | 4字节 | -2^ 31~2^ 31-1 |
long | 8字节 | -2^ 63~2^ 63-1 |
- 定义long类型的变量,赋值时需要以l或L作为后缀
- java变量通常声明为int型,除非不足以表示较大的数才会使用long
- java整形默认为int型
计算机存储单位:
字节(btye)是计算机用于计算存储容量的基本单位,一个字节等于8个bit
位(bit)是数据存储的最小单位,二进制数系统中,每一个0或1就是一个位,叫做bit(比特)
转换关系:
- 8bit = 1Byte
- 1024Byte = 1KB
- 1024KB = 1MB
- 1024MB = 1GB
- 1024GB = 1TB
2.3.2 浮点类型:float double
与整数类型类似,java浮点类型也有固定的表数范围和字段长度,不受具体操作系统的影响
类型 | 占用存储空间 | 表数范围 |
---|---|---|
单精度 float | 4字节 | -3.403E38~3.403E38 |
双精度 double | 8字节 | -1.798E308~1.798E308 |
浮点型常量有两种表示形式
- 十进制形式:如5.12 必须有小数点
- 科学计数法形式:5.12e2
注意: - float单精度:尾数可以有7位有效数字,很多情况下,精度难以满足要求,赋值时要以f结尾
- double双精度:精度是float的双倍,通常采用此类型
- java浮点型默认为double类型
浮点型精度
并不是所有的小数都能用明确的二进制浮点数表示,二进制浮点数不能精确的表示0.1、 0.01、 0.001这样的10的负次幂
浮点类型float double的数据不适合在不容许四舍五入误差的金融领域,如果需要精确数字计算或保留指定位数的精度,需要使用BigDecimal类
float f1 = 0.1f;
float f2 = 0.2f;
System.out.println(0.1+ 0.2); // 0.30000000000000004
System.out.println(0.1+ f1); // 0.20000000149011612
2.3.3 字符类型 char
char型数据用来表示通常意义上的“字符”
java中所有字符都用Unicode编码,故一个字符可以存储一个字母,一个汉字或其他书面语的一个字符
有且只有一个字符
字符型变量有三种表现形式:
- 使用单引号(’ ')括起来的单个字符 char c1 = ‘a’;
- 直接使用unicode值来表示字符型常量 char c2 = ‘\uxxxx’ 其中xxxx代表一个十六进制整数
- java中还允许使用转义字符’'来将其后面的字符转变为特殊字符型常量 char c3 = ‘\n’ 表示换行符
常见的转义字符
转义字符 | 说明 | Unicode表示方式 |
---|---|---|
\n | 换行符 | \u000a |
\t | 制表符 | \u0009 |
" | 双引号 | \u0022 |
’ | 单引号 | \u0027 |
\ | 反斜线 | \u005c |
\b | 退格符 | \u0008 |
\r | 回车符 | \u000d |
char型是可以进行运算的,因为他们都对应一个unicode编码,可以看做是一个数值
2.3.4 布尔类型 boolean
布尔类型用来判断逻辑条件,一般用于流程控制语句中
布尔类型数据只有两个值,true false
不可使用01整数代表false和true,这点和C语言不通
注:java虚拟机中没有任何供boolean值专用的字节码指令,java语言表达所操作的boolean值,在编译之后都使用java虚拟机中的int型来代替,true用1表示,false用0表示
2.3.5 基本数据类型变量之间的运算规则
在java程序中,不同的基本数据类型(7中除boolean)变量之间的值经常需要进行相互转换
转换的方式有两种:自动类型提升和强制类型转换
自动类型提升
- 将取值范围小的类型自动提升为取值范围大的类型
class AutoChange{
public static void main(String[] args){
int i = 'A'; // 将 char自动升级为int,将字符的编码值赋值给i
double d = 10; // 将int自动升级为double
long num = 123455; // 右边的值在int范围,将int自动升级为long
long bigNum = 12345678129L; // 右边的值超出int范围必须加L表示long类型,而不是自动类型提升
// byte b1 = 130; // 130超出byte范围
}
}
-
当存储范围小的数据类型与存储范围大的数据类型一起混合运算时,会按照最大的数据类型运算
-
当byte short char进行运算时,会按照int类型处理
强制类型转换
将3.14赋值给int类型会发生什么? 编译失败,无法赋值
想要赋值成功,需要通过强制类型转换,将double转换为int
- 将取值范围大的类型强制转换成取值范围小的类型是自动类型提升的逆运算,需要我们手动执行
- 转换格式:数据类型1 变量名 = (数据类型1)被抢转换数据值
- 当把存储范围大的值强制转换为存储范围小的值会损失精度或溢出
- 当某个值想要提升数据类型时,也可以手动使用强制类型转换,这种情况的强制类型转换是没有风险的,但通常可省略
- 声明long类型变量时,可以出现省略后缀,此种情况是int自动类型提升至long, 但是float不能省略f,因为float的取值范围小于默认的double
问答题:为什么标识符的声明规则里要求不能以数字开头?
int 134L = 112;
long l = 134L; // l到底是变量123L对应的值112还是134L呢,产生歧义,不能自洽
2.3.6 基本数据类型与String的运算
字符串类型String
String不是基本数据类型,属于引用数据类型
使用一对双引号,表示一个字符串,内部可以包含0个,1个,或多个字符
声明方式与基本数据类型一致,String s1 = “asds”;
运算规则
任意八种基本数据类型的数据与String类型只能进行连接+ 运算,并且结果肯定为String类型
String类型不能通过强制类型转换转换为其他类型
思考下列代码能否正常编译?
int i = 10;
boolean b = true;
String s = "we";
system.out.println(i+b+s);
不能,因为基本数据类型中整形和布尔型不能进行运算
3. 计算机底层如何存储数据
计算机世界中只有二进制,所以计算机中存储和运算的所有数据都要转换为二进制,包括数字,字符,图片,声音,视频等。