基本数据类型
数据类型指明了变量和表达式的状态和行为。
基本数据类型 | 关键字 | 内存中占用字节数 | 取值范围 |
布尔型 | boolean | 1字节(8bit) | true、false |
字节型 | byte | 1字节(8bit) | -27~27-1 |
短整型 | short | 2字节(16bit) | -215~215-1 |
整形 | int | 4字节(32bit) | -231~231-1 |
长整形 | long | 8字节(64bit) | -263~263-1 |
字符型 | char | 2字节(16bit) | ‘\u0000’~’\uffff’ |
单精度浮点型 | float | 4字节(16bit) | |
双精度浮点型 | double | 8字节(64bit) |
byte解释类型 数据类型长度用类型名首字母大写.size
Java是一种强类型语言,所有变量必须先明确定义数据类型才能使用。
- 常量
Java程序运行时,值不能修改的数据称为常量。
- 整形常量(byte、short、int、long)
- 浮点常量(float、double)
- 字符型常量(char)
- 布尔常量(boolean)
- null
- 变量
变量的本质是:内存中的一段连续的存储空间。
变量名:为了区分其他变量而给变量起的名字。
命名原则:以(美元符号)、_(下划线)、英文字母和数字字符组成的非关键字。
变量名大小写敏感。
若由单个单词组成,则变量名全部小写;若由多个单词组成,则变量名第一个单词小写拼接成的每个单词首字符大写其余均小写(驼峰式命名)。
变量名尽可能提高语义性(增加程序可读性)。
变量的定义语法
基本数据类型 变量名 = 初始化变量;数据类型一旦定义永远不变
一行只定义一个变量;未初始化的变量不能参与赋值操作!
同一个作用域(一对对应的{}内的部分)不能包括两个同名变量。
类型转换
- 自动类型转换(自动类型提升)
程序在运行时计算机自动的转化为所需要的数据类型。
自动数据类型转换只能将数据类型从字节短到字节长的转换而且不能将相同长度下由浮点自动转换为整形(不能从float自动转换为int。也不能从double自动转换为long)。因为数据会丢失不能编译。
其中在赋值运算中,当整数常量(在未超过int所能表示的最大范围时)参与和变量的运算时,整数常量被计算机自动的识别为int类型(也就是说byte或short和整数参与运算时自动地转换为int)然后根据与变量的数据类型关系来决定是否进一步进行自动类型的转换(也就是说表达式的类型由整数数值的int类型和与其运算的变量的数据类型来决定)。浮点常量(在未超过double所能表示的最大范围时)被计算机自动是被为double类型(也就是说float和小数参与运算时自动地转换为double)。 - 强制类型转换(可能造成数据损失)
(类型说明符) 表达式
其中boolean不能参与类型转换。
常量优化机制:常量表达式(常量的运算)运算的结果是否在被赋值元素类型的范围内(同长度下不能从浮点到整形),在范围内不报错,否则报错。
运算符
Java中地各种运算的符号称为运算符,运算符的对象叫操作数。只需要一个操作数的运算符叫单目运算符。
- 算数运算符
+由两个作用 数值相加(注意自动类型转换) 和 连接符
当+两端都是数字时,+作用是数值相加。当+有一端为字符串时,+将他们拼接为字符串。
- 减
* 乘
/ 除(当两个类型都是整形时,结果为去掉小数部分的整数。有一端为浮点数时,结果为浮点数)
% 取余数
++ 变量结果增1
– 变量结果减1
自增自减运算符++n(置前自增)先给n的值自增在参与下面的运算,n++(滞后自增)是先用n的值来参与下一步的运算,再给n的值增1。(也就是说在滞后自增中的一个表达式该变量只进行一步运算就进行一次自增)。 - 关系运算符
用于比较两个操作数,运算结果时布尔类型的值true或false。
< 小于
> 大于
== 判断是否等于
<= 判断是否小于或者等于
>= 判断是否大于或者等于 - 逻辑运算符
条件表达式)!(逻辑非) &(逻辑与) |(逻辑或) ^(异或) &&(短路逻辑与) ||(短路逻辑或)
逻辑运算符的运算结果只能是boolean类型。结果只能是true或者false。
逻辑运算符 结果
!true false
!false true
true & true true
true & false false
false & true false
false & false false
true | true true
true | false true
false | true true
false | false false
true ^ true false
true ^ false true
false ^ true true
false ^ false false
true && true true
true && false false
false && 任意逻辑值 结果均为false
true || 任意逻辑值 结果均为true
false || true true
false || false false
& 和 && 、 | 和 || 的区别是:(运算结果一致)& 和 | 是把逻辑表达式全部计算完,而 && 和 || 运算具有短路运算功能。短路运算是是指系统从左到右进行逻辑运表达式的计算,只要判断出结果计算过程就终止(右边部分不再执行!)。 - 位运算符
位运算符是直接对二进制补码进行运算
二进制位单位进行的运算,他的操作数和运算结果都是整形值。位运算符共有7个。位与(&)、位或(|)、位非(~)、左移(<<)、右移(>>)、0填充右移(>>>)也就是无符号右移。
区分逻辑运算符和位运算符的方法:观察运算符两端的数据类型。均为boolean类型时为逻辑运算符。均为数值类型时为位运算符。
eg:
3 & 4
0000 0011 & 0000 0100
0000 0000
0
3 | 4
0000 0011 | 0000 0100
0000 0111
7
3 ^ 4
0000 0011 ^ 0000 0100
0000 0111(补码)
7 - 赋值运算符
=双目运算符,用于 将赋值符右边操作数的值复制一份赋值给左边的变量。
赋值运算符左侧只能是变量而不能是表达式。
当左边数据类型与右边表达式结果或变量数据类型不一致时,计算机自动进行数据类型转换,或者人为进行强制类型转换。
float a = 3.14f;
复合赋值运算符
a+=b;形式等于a = a + b;(实际又有不同)
-= *= /= %=类似以上
byte a = 1;
a = a + 1; 编译错误! 应为此处1自动类型转换为int而a + 1的整体结果为int类型,int类型不能自动类型转换为byte。
a += 1;编译成功,假如超出范围,数据类型依然是byte! - 条件运算符(三目运算符)
条件表达式 ? 表达式1 : 表达式2;
计算条件表达式的结果,若结果为true则这个三元表达式的结果是表达式1的值;若结果为false则这个三元表达式的结果是表达式2的值。
进制及其进制转换
计算机内部使用二进制来运算、存储、传输各种信息。
二进制由0和1组成 任何X进制都是用从0开始到X-1种数组成(10以内为数字超过10则用A、B、C等替代)
二进制数据B 由0 和 1组成 表示 形式 0b二进制
八进制数据O 由0 1 2 3 4 5 6 7 组成 表示 形式 0八进制
十进制D 由0 1 2 3 4 5 6 7 8 9组成 表示 形式 十进制
十六进制H 由0 1 2 3 4 5 6 7 8 9 A B C D E F表示 形式 0x十六进制
进制转换规则
- 任意X进制向十进制转换
系数乘以基数的权次幂 - 十进制向任意X进制转换
将这个数的整数部分一直除以X记录余数 再将商拿出来当作下一轮的被除数继续除X取余 直到商为零 反向写出余数则得到这个数的整数部分的X进制数
将这个数的小数部分一直乘以X的结果除以1 记录这个结果 再将余数拿出来当作下一轮的乘数继续乘以X 直到积为0或者到达所需精度 正向得到这个结果放在小数后面则得到了这个数的小数部分的X进制数
原码、反码、补码
- 原码
为了表示负数,引入原码概念。将n位定长下二进制最高为当作符号位,0为整数,1为负数。其余n-1位标识二进制数值位。 - 反码
针对正数而言,反码等于原码。
针对负数而言,反码是从原码符号位不变、数值位按位取反得到的。 - 补码(计算机内部用补码表示)
针对正数而言,补码等于反码等于原码。
针对负数而言,补码是从负数的反码基础上末位(最低位)加一得到的。即“(原码)除符号位外,按位取反,末位加一”
标识符和关键字
以$(美元符号)、_(下划线)、英文字母为首字符,由$(美元符号)、_(下划线)、英文字母和数字字符组成的非关键字。
标识符大小写敏感。
- 关键字
被Java赋予关键意义的、用于专门用途的字符序列称为关键字。
数据类型:boolean、byte、short、int、long、char、float、double。
包引入和声明:import、package。
类和接口声明:class、extends、implements、interface。
流程控制:if、else、switch、do、while、case、break、continue、return、default、while、for。
异常处理:try、catch、finally、trow、throws。
修饰符:abstract、final、native、private、protected、public、static、synchronized、transient、volatile。
其他:new、instanceof、this、super、void、assert、enum、strictfp。