数据存储,常量和变量
1. 数据存储
1.1 计算机中的常用数据存储单位
计算机最小存储单位 byte 字节
数据存储进制单位:
Windows操作系统 1024
1024 Byte ==> 1KB
1024 KB ==> 1 MB
1024 MB ==> 1 GB
1024 GB ==> 1 TB
1024 TB ==> 1 PB
1024 PB ==> 1 EB
硬件实际生产 和 macOS 系统中,进制单位 1000
马云爸爸 2017 云栖大会
得数据者 得天下
后期考虑用最小的数据,表示最多的信息。
1.2 数据表示的进制关系【了解】
生活中的常见进制:
十进制,十二进制,二十四进制, 六十进制
开发中需要[了解]的进制:
进制 |
基数范围 |
进位关系 |
十进制 |
0 ~ 9 |
逢十进一 |
二进制 |
0, 1 |
逢二进一 |
八进制 |
0 ~ 7 |
逢八进一 |
十六进制 |
0 ~ 9, A ~ F |
逢G(十六)进一 |
八进制:
数据展示要求,开头为 0
0777 0755 0711
但是 0 在特殊情况下可以省略
十六进制:
数据展示要求,开头为 0x
0xABCD 0xabcd 这两个数据完全一致,十六进制不区分大小写!
0xFFFF 0x1234
所有的进制转换,全部交给计算器处理,提高效率。
2. 常量
2.1 生活中的常量
数值:
整数: 10 20 30
小数(浮点数): 3.14 0.618 11.11 12.12
文字:
你 我 他
A B C
1 2 3
文本:
"北国风光,千里冰封,万里雪飘,望长城内外,惟余莽莽...."
常量就是在生活中不可以改变的内容。
2.2 开发中对于常量分类
整数:
1 2 3 4 5 -1 -2 -3 -4 -5 0
小数(浮点数):
3.14 0.618 9.8 1998.99
真假关系(布尔类型):
true false
字符:
[重点] Java中的字符是使用英文单引号包含的单个元素
'A' 'B' 'C' '1' '你'
字符串:
[重点] Java中的字符串是使用英文双引号包含的所有内容
"老马烧烤" "淼庄地锅鸡" "新疆拉条烧烤城"
// 常量演示
class Demo1 {
public static void main(String[] args) {
// 整数
System.out.println(10);
System.out.println(20);
System.out.println(-10);
System.out.println(-20);
// 浮点数
System.out.println(3.14);
System.out.println(0.618);
// 布尔类型
System.out.println(true);
System.out.println(false);
// 字符类型
System.out.println('A');
System.out.println('B');
System.out.println('C');
// 字符串
System.out.println("老马烧烤,京广路保全街交叉口向东350米路北");
}
}
2.3 字符常量
2.3.1 编码集
常用编码集:
GBK 新国标,包含中文简体字和所有少数民族文字
GB2312 老国标,包含中文简体字和一部分少数民族文字
BIG5 中文繁体字编码集,主要用于 中国台湾省,中国香港,中国澳门,新加坡
UTF-8 万国码,目前开发中使用最多编码集
ASCII 美丽国XXX标准协会制定编码
开发使用字符要求:
1. 字符有且只允许使用字符本身,不允许使用对应编码值。【数据类型一致化】
2. 编码集中 0 ~ 31 编码为不可见字符
3. 大写字母编码值小于小写字母,并且大写字母和小写字母编码中间相隔其他字符
4. 数字字符是从 0 ~ 9
5. 编码值不允许直接使用!!!
2.3.2 转义字符[仅了解]
\ 是转义字符标记,带有特殊含义
转无意义
\' \" \\ \\\\
tips: 转义字符有且只可以处理 \ 之后的第一个字符
转有意义
\n 回车换行
\t 制表符
2.3.3 面试题
请问:
\40 是什么???
知识点:
1. \ 之后的数值要求为 八 进制
2. 八 进制在 \ 之后可以省略标记 0
3. \40 是对应编码为 32 的 sp 空格
只用于对暗号,不允许面试别人!!!
3. 变量
3.1 生活中什么是变量
生活中变量的特质:
1. 变量有名称
2. 变量有一定的单位,并且有一定取值范围
3. 变量需要一定的容器概念
3.2 Java中定义变量的格式
基本格式:
数据类型 变量名 = 初始化数据;
数据类型:
明确当前变量的数据类型,开发中需要选择合适的数据类型。
变量名:
见名知意,按照规范定义,并且在一定范围以内唯一
=:
将赋值号右侧的数据,赋值给左侧的【变量】
初始化数据:
根据程序所需,数据类型所需,选择合适的初始化数据进行赋值操作。
3.3 基本数据类型 【重点】
3.3.1 整型
数据类型 |
占用内存空间大小 |
数据存储范围 |
byte |
1字节(8bit) |
-128 ~ 127 |
short |
2字节(16bit) |
-32768 ~ 32767 |
int |
4字节(32bit) |
-2^31 ~ 2^31 - 1 |
long |
8字节(64bit) |
-2^63 ~ 2^63 - 1 |
3.3.2 浮点类型
数据类型 |
占用内存空间大小 |
数据存储范围 |
float |
4字节(32bit) |
10^38 |
double |
8字节(64bit) |
10^308 |
3.3.3 布尔类型
数据类型 |
占用内存空间大小 |
数据存储范围 |
boolean |
视情况而定 |
true false |
3.3.4 字符类型
数据类型 |
占用内存空间大小 |
数据存储范围 |
char |
2字节(16bit) |
可以存储中文 |
3.4 定义变量
// 变量定义演示
class Demo3 {
public static void main(String[] args) {
/*
整型变量定义
基本格式:
数据类型 变量名 = 初始化数据;
*/
byte byteNumber = 10;
short shortNumber = 20;
int intNumber = 30;
long longNumber = 500L;
System.out.println(byteNumber);
System.out.println(shortNumber);
System.out.println(intNumber);
System.out.println(longNumber);
// 浮点型变量定义
float floatNumber = 3.14F;
double doubleNumber = 3.14;
System.out.println(floatNumber);
System.out.println(doubleNumber);
/*
字符类型变量定义
【强调】字符类型有且只允许使用字符本身,不允许操作编码值
ch ==> character 字符
*/
char ch1 = 'A';
char ch2 = '你';
System.out.println(ch1);
System.out.println(ch2);
/*
布尔类型变量定义
ret ==> result 结果
*/
boolean ret1 = true;
boolean ret2 = false;
System.out.println(ret1);
System.out.println(ret2);
}
}
3.5 变量定义问题
3.5.1 float 类型变量赋值问题
Demo3.java:20: 错误: 不兼容的类型: 从double转换到float可能会有损失
float floatNumber = 3.14;
^
1 个错误
解释:
在计算机中为了保证数据类型精度和存储的完整性,小数(浮点数)常量默认采用的数据类型存储方式为 double。使用 double 类型的常量赋值一个 float 类型变量,会导致数据精度丢失同时数据存储完整性也存在影响。
解决方案:
明确告知计算机当前常量为 float 类型。在常量之后加上【大写 F】
float floatNumber = 3.14F;
3.5.2 long 类型变量赋值建议
Java 代码中整数默认选择数据类型为 int 类型,我们建议在给予 long 类型变量赋值的过程中,选择常量标记
【大写 L】。明确告知计算机当前常量为 long 类型。
案例:
long longNumber = 500L;
3.5.3 变量未赋值不能使用
Demo4.java:5: 错误: 可能尚未初始化变量num
System.out.println(num);
^
1 个错误
Java 中规定,变量在未赋值的情况下,不可以参与除赋值之外的其他语句操作。
3.5.4 变量未定义不能使用/拼写错误出现情况
Demo4.java:7: 错误: 找不到符号
System.out.println(nmu);
^
符号: 变量 nmu
位置: 类 Demo4
1 个错误
3.5.5 字符类型常量有且只允许使用字符本身
4. 阿里巴巴Java开发规约
4.1 注册邮箱
163邮箱为例,要求用户名/邮箱名
6 ~ 18个字符,可以使用英文,数字和下划线,并且要求英文开头
4.2 标识符命名规范
标识符有哪些内容
变量名,方法名,类名,接口名,程序员自己定义的名字。
1. AJCG规定,标识符有且只可以使用 英文字母(A ~ Z a ~ z), 数字(0 ~ 9),以及唯一可以使用的标点符号下划线(_)
2. AJCG规定,标识符要求英文字母开头,不允许其他字符开头
3. AJCG规定,标识符严格区分大小写,大写和小写含义不同。
4. AJCG规定,标识符没有严格的长度限制,会根据实际情况限制标识符长度。
5. AJCG规定,标识符要求做到【见名知意,动宾结构】
例如:
错误案例:
int a,b,c,d,e,f,g;
正确案例:
studentAge studentName studentScore studentGender
getStudentAge setStudentAge
6. AJCG规定,推荐采用驼峰命名法和下划线命名法
驼峰命名法
小驼峰
要求首字母小写,之后的每一个单词首字母大写
适用于: 变量名,方法名
iPhone iMac iTouch iPod iPad
studentAge studentName studentScore studentGender
getStudentAge setStudentAge
大驼峰
要求所有单词首字母大写
适用于: 类名,接口名
Demo1 Demo2 Demo3
FirstJava BufferedOutStream ArrayIndexOutOfBoundsException
下划线命名法
所有字母全部大写,使用下划线分割
MAX_VALUE MIN_VALUE MAX_ARRAY_SIZE DEFAULT_CAPACITY
NORMAL_PRIORITY
7.AJCG规定,已经被 Java 占用的关键字和保留字不得用于自定义标识符使用。
变色都不能用!!!
int int = 10; 不允许!!!