Java_数据类型
第一节:标识符,关键字,字符集
1.1. 标识符
Java中用于区分数据而需要我们自己定义的名称
允许使用 字母 数字 _ $
不允许使用 数字不能开头 不可以是java中的关键字
驼峰式命名 StudentAge
见名知意
常见的标识符 包名 类名 方法名 变量名 参数名
除了类名首字母大写 其他标识符首字母都要小写
1.2. 关键字
关键词就是具备特殊含义的词汇。比如:public,static,int,class等
Java关键字是Java语言保留供内部使用的,如class用于定义类。 关键字也可以称为保留字,它们的意思是一样的。
注意:不要刻意去背!后面会慢慢介绍每个关键字的用法
表2-1 Java中的关键字/保留字 | |||||
---|---|---|---|---|---|
abstract | assert | boolean | break | byte | case |
catch | char | class | const | continue | default |
do | double | else | extends | final | finally |
float | for | goto | if | implements | import |
instanceof | int | interface | long | native | new |
null | package | private | protected | public | return |
short | static | strictfp | super | switch | synchronized |
this | throw | throws | transient | try | void |
volatile | while |
1.3. 字符集
- ASCII
英文字符集 1个字节
- ISO-8859-1
西欧字符集 1个字节
- BIG5
台湾的大五码,表示繁体汉字 2个字节
- GB2312
大陆使用最早、最广的简体中文字符集 2个字节 65536
- GBK
GB2312的扩展,可以表示繁体中文 2个字节
- GB18030
最新GBK的扩展,可以表示汉字、维吾尔文、藏文等中华民族字符 2个字节
- Unicode
国际通用字符集 2个字节 (JAVA中用的字符集就是Unicode)
PS:
1位 1/0 >>> bit 比特
1字节=8bit >>> byte字节
千字节 = 1024 byte kB
兆字节 = 1024 KB MB
GB =1024MB
TB =1024GB
PB = 1024TB
字符>>> 代表一个文字 可以是一个字母 中文 空格 标点符号
PS:Unicode是字符集,UTF-32/ UTF-16/ UTF-8是三种字符编码方案
ANSI:获取你当前操作系统的编码格式–》一般我们用的GBK
第二节:变量和常量
如何在java程序中存储一些数据? 可以采用变量和常量的方式
变量 可以变化的量 人的年龄 身高 体重 ……
常量 不会变化的量
字面常量(其实就是具体的值)
符号常量(真理数字,类似于PI这样的数据)
2.1. 变量的声明和使用
2.2. 变量的作用范围
局部变量
方法内/代码块内/多条件分支或者循环内声明的变量,仅能在当前方法内/代码块内/多条件分支或者循环内
成员变量 (全局变量)
声明在方法之外的变量 可以通过访问修饰符控制访问范围, 但是至少可以在当前类内部可见
2.3. 常量
字面值常量1 2 3 4
符号常量 圆周率
不可修改的变量 >>> 常量
第三节:java中的数据类型
3.1. 进制及其转换
十进制 逢十进一 人类喜欢的进制 九九加法表
二进制 逢二进一 计算机底层的进制 运算快 运算准确
【1】二进制 转换为 十进制
例如:二进制 1101
12^3 + 12^2 + 02^1 + 12^0
= 8 + 4 + 0 + 1
= 13
【2】十进制 转换为 二进制
例如:十进制 13
【3】八进制 转换为 十进制
例如:八进制 16
18^1 + 68^0 = 14
【4】十进制 转换为 八进制
例如:十进制 14
【5】八进制 转换为 二进制
可以把十进制当做一个“中转站”
八进制–》十进制–》二进制
实际上我们也不用这么麻烦,我们可以直接使用程序员计算器:
3.2. 数据类型的分类
基本数据类型(primitive data type) 最基础的数据类型 八种
整数型 byte short int long
浮点型 float double 小数
字符型 char
布尔型 boolean true false 做逻辑判断
引用数据类型(reference data type)类 抽象类 接口 枚举 …. …
3.3. 整数类型
byte short int long
各自的范围
类型 | 占用存储空间 | 表数范围 |
---|---|---|
byte | 1字节 | -27 ~ 27-1(-128~127) |
short | 2字节 | -215 ~ 215-1 (-32768~32767) |
int | 4字节 | -231 ~ 231-1 (-2147483648~2147483647) 约21亿 |
long | 8字节 | -263 ~ 263-1 |
十进制整数,如:99, -500, 0
八进制整数,要求以 0 开头,如:015
十六进制数,要求 0x 或 0X 开头,如:0x15
二进制:要求0b或者0B开头,如:0b11
3.4. 浮点数类型
float double
float类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。而double表示这种类型的数值精度约是float类型的两倍(15位),又被称作双精度类型,绝大部分应用程序都采用double类型。
float类型的数值有一个后缀F或者f ,没有后缀F/f的浮点数值默认为double类型。也可以在浮点数值后添加后缀D或者d, 以明确其为double类型。
注意:
(1)浮点常量默认为double。要变为float,需在后面增加F/f. 如: 3.14F
(2)浮点数存在舍入误差,很多数字不能精确表示。如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。
科学计数法
314e2 314E2 (E的大小写没有区分)
double f = 314e2; >>>314*10^2–>31400.0
double f2 = 314e-2; >>>314*10^(-2)–>3.14
3.5. 布尔类型
Boolean
只有两个字面值常量 true false
3.6. 字符型
char 2B 16b 单个字符 java使用unicode字符集 对于java来说,世界各国的语言文字都是字母
java中的转义字符
有些特殊的字符在java中无法正常使用或展示,因为有特殊的作用
使用\+要转义的字符
\'
\"
\\
\t 制表符 一个制表符位8个空格 一个字母1个空格 一个汉字是2个空格
如果前面的内容是制表符位的整数倍,当前制表符为重开一个,如果不够,补全一整个制表符位
\n 换行
\r 光标回到行首
\b 退格
字符串 String 一堆文字串成的串儿
byte short int long
float double
boolean
char
String
3.7. 数据类型的转换
从小到大 正常转换 不会损失数据
byte >>> short >>> int >>> long>>> float>double
char
从大到小 强制转换 可能会损失数据
double>>> float>>> long>>> int>>> short>>> byte
char
给定任意浮点数 输出去保留两位小数 考虑四舍五入的结果
第四节:运算符
4.1. 赋值运算符
= 将右边的值赋值给左边的变量 一定要等右边所有的代码运算完毕再进行赋值
int i = 100*10;
4.2. 算数运算符
+ - * / %
-
在算数运算符使用的过程中,注意运算结果的数据类型 可能和参与运算的变量类型不一致
-
在进行除法运算, 整数除以整数,不会保留小数位,除非其中一方是浮点数
-
取模运算对于浮点数同样有效
% 模运算 取模运算 取余数运算
练习 准备任意一个四位整数 倒叙输出
1234 >>>> 4321
4.3. 拓展算数运算符
+= -= /= *= %= ++ –
拓展算数运算符可以理解为算数运算符的简写,但是算数运算符会改变结果的数据类型
拓展算数运算符直接在原来的变量上进行操作,所以不会改变变量的数据类型
练习 完成两个整数变量值得互换
好代码
-
注释全面
-
简介
-
格式规范
黑客代码 2B代码
杜绝2B代码 不用追求黑客代码 最受欢迎的就是普通代码
++ –
4.4. 关系运算符
数据大小关系
< > <= >= == !=
4.5. 逻辑运算符
& | ^ && || !
package demo1;
public class Test1 {
public static void main(String[] args) {
/*逻辑运算符 运算结果是boolean 类型
* & 逻辑与运算 并且 多个条件同为true 则为true 一方为false 则为false
* | 逻辑或运算 或者 多个条件任意一个为true 则为true 全为false才为false
* && 短路与运算 并且
* || 短路或运算 或者
* ^ 逻辑异或运算
* ! 逻辑非运算
* */
boolean b = 10<20 & 20<30 & 30<40 ;
System.out.println(b);
boolean b2 = 10 > 20 | 20 >30 | 30 >40;
System.out.println(b2);
// 短路与运算 发现前面的一项结果为false 则后面的条件就不在运算了
boolean b3 = false && 1/0 >1;
System.out.println(b3);
// 短路或运算 发现前面的一项结果为true 则后面的条件就不运算了
boolean b4 = 10<20 || 1/0>1;
System.out.println(b4);
/*以后基本使用短路的与运算和或运算*/
/*异或运算 ^
* 相同则为false 不同则为 true
* */
boolean b5 = 10<20 ^ 20>30;
System.out.println(b5);
/*逻辑非运算*/
boolean b6 = (10<20);
System.out.println(!b6);
}
}
4.6. 位运算符(了解)
>> << >>> & | ^ ~
package demo1;
public class Test2 {
public static void main(String[] args) {
/*位运算符在二进制上运算的符号
<< 左移运算
>> 右移运算
>>> 不带号右移运算
& 按位与运算
| 按位或运算
^ 按位异或运算
~ 按位取反运算
*/
int a =-8;//00001000
/*左移动一位相当于 *2 */
int b = a << 1;// 00001000 00010000
System.out.println(b);
/*右移动一位相当于 /2 */
int c =a >> 1;// 00001000 00000100
System.out.println(c);
/*
* >> << 不会移动符号位
* >>> 移动符号位
*01000000 00000000 00000000 00000100
* */
int d = a >>>1;//
System.out.println(d);
int e =8; //00001000
int f =9; //00001001
/*& 同为1 则为1 一方为0 则为0*/
int g = e & f;//00001000
System.out.println(g);
/*| 同为0 则为0 一方为1 则为1*/
int h = e | f;//00001001
System.out.println(h);
/*^ 相同即为0 不同即为1 */
int i = e ^ f;//00000001
System.out.println(i);
/*~ */
int j=~10;// -3 -2 -1 | 0 1 2 3
System.out.println(j);
}
}
4.7. 条件运算符号
? :
4.8. 运算符的优先级
boolean b = 1+0>1 || 5>3?true:false;
运算逻辑 先算算数 条件运算符 然后关系判断 然后逻辑判断 最后赋值
所以优先级简单可以记忆为 算数运算符>条件运算符>关系运算符>逻辑运算符>赋值运算符
实在分不清楚 那么就用小括号提升运算优先级即可