一、变量
1.变量
1.什么是变量?
变量是内存当中存储数据的基本单元。
2.为什么要使用变量机制?
想重复使用字面量这块空间
3.变量的三要素?
数据类型:不同的数据类型分配不同的空间,1byte = 8bit
变量名:为了方便以后使用/访问
字面量:值/数据
2.什么是字面量?
1.实生活中的,这其实就是对数据的处理,一门编程语言首先能够表示数据才能处理数据。所以java程序就是通过字面量来表示数据的。
2.字面量的分类:整数型,浮点型,布尔型,字符型,字符串型,字符用单引号引用,字符串型用双引号引用
3.思考以下的字面量 10 是存储再同一块空间中,还是不同的空间中?
System.out.println(10);
System.out.println(10);
System.out.println(10);
4.如果我们在内存中开辟一块空间并存储字面量10,并且想重复使用这块空间,怎么办?使用变量机制。
int i = 10;
3.使用变量 (在java语言中有规定,变量必须先声明,再赋值,才能访问,没有赋值就意味着没有开辟空间)
1.怎么声明变量?
int i;
2.使用变量需要注意哪问题?
使用前,必须声明,赋值,没有赋值就意味着没有开辟空间
再同一个域中,变量可以重新赋值,不能重复声明
局部变量,成员变量:实例变量,静态变量
3.变量分类
成员变量:
局部变量:
请思考如下问题:没有赋值变量可以访问吗?
public class A{
int i;
System.out.println(i);
}
//没有赋值变量可以访问吗?执行效果如下:
A.java:4: 错误: 可能尚未初始化变量i
System.out.println(i);
^
1 个错误
错误: 编译失败
二、数据类型
1.数据类型的分类以及作用
1.数据类型有什么作用?
数据类型用来声明变量,并且为在程序运行过程中,根据不同的数据类型分配不同的大小的空间
2.基本数据类型:
分为4大类8小种:
整数型:byte short int long
浮点型:float double
字符型:char
布尔型:boolean
3.引用数据类型
String类型、JDK包中的其他类、自定义类等等
2.二进制、八进制、十进制
1.进制转换
2.进制的整数表示形式:
十进制:10
二进制:0b10 2
八进制:010 8
十六进制:0x10 16
3.原码,反码,补码
计算机只能识别二进制
计算机在底层存储数据的时候一律存储的是二进制补码形式
对于正数来说:二进制原码,反码,补码时同一个
对于负数来说:第一位是符号位,
原码:二进制
反码:符号位不动,数值位取反
补码:反码加1
4.字符编码
1.计算机最开始是不支持文字的,只支持科学计算。通过字符编码
2.对于char类型来说表示比较麻烦,因为每个国家文字不一样,文字不能通过***自然算法***转换成二进制,因此出现了字符编码来解决
3.在字符编码种规定了一系列文字对应的二进制
4.字符编码涉及编码和解码两个过程
5.字符编码的发展:起初是为了战争而开发的,为了计算导弹轨道,后来随着计算机的发展开始支持文字,最先支持的是英文,英文对应的编码方式是:ASCLL码 ASCLL码采用1byte进行存储,键盘上可以表示的符号不超过256个,1byte可以表示256个不同情况
6.之后国际标准组织指定了ISO-8859-1编码方式,又称为latin-1,向上兼容ASCLL码,不支持中文,后来发展到亚洲才支持中文,韩文,日文
7.中文的编码方式:GB2312<GBK<18030(容量的关系)简体中文 big5繁体中文
8.在java中为了支持所有文字:UTF-8 UTF-16 UTF-32
9.需要记住:ASCLL(a97 A65 0 48) ISO-8859-1 GB2312 GBK GB18030 big5 unicode(utf)
5.转义字符
遇到 \ ,将后面紧挨着的字符进行转义
\t 表示制表符Tab键
\\ 输出\字符
\n 换行
\" 转义"
\u 表示后面的是一个字符的unicode编码
6. 取值范围以及缺省默认值
byte:1字节 -128 127 0
short:2字节 -32768 32767 0
char:2字节 0 65535 \u0000
int:4字节 -2147483648 2147483647 0
long:8字节 0L
float:4字节 0.0F
double:8字节 0.0
boolean:1字节 true(00000001) false(00000000)
7.类型转换规则
1.boolean类型不能转换
2.自动转换:小容量的数据类型可以转换成大容量的数据类型
3.没有超过byte short char 的范围,整数字面量可以直接赋值,因为整数型字面量是int类型如果直接赋值给long类型会报错,需要
4.强制类型转换:大容量转换成小容量必须添加强制类型转换
5.只有byte short char 做混合运算时,全部转换成int类型在进行
6.多种数据类型运算时,全部转换成最大容量的类型,再进行转换
//向上隐式转型内存溢出情况
public class Int2LongOverflow {
public static void main(String[] args) {
// Integer.MAX_VALUE = 2147483647
int a = Integer.MAX_VALUE;
int b1 = 1;
long sum1 = a + b1; long sum2 = 2147483647 + 1;
long b2 = 1;
long sum3 = a + b2; long sum4 = 2147483647 + 1L;
System.out.println("sum1 = " + sum1);
System.out.println("sum2 = " + sum2);
System.out.println("sum3 = " + sum3);
System.out.println("sum4 = " + sum4);
}
}
sum1 = -2147483648
sum2 = -2147483648
sum3 = 2147483648
sum4 = 2147483648
8.浮点型:
float、double
注意:用在财务方面或者说使用再财务方面,double也远远不够
在java中提供了一种精度更高的专门用在财务方面类型,java.math.BigDecimalbyte short char混合运算
分析下面两个程序的区别?
char c1 = 'a';
byte b = 1;
short s = c1 + b;
short k = 98;
9.强制类型转换
强制类型转换符:(int)12L
会造成精度损失:long类型占八个字节,int类型站4个字节强制转换导致long类型前面4个字节丢失
byte b = (byte)300;
System.out.println(b);
//强制类型转换:00000000 00000001 00101100
byte占用1个字节:00101100 代表44byte b = (byte)150;//b是多少?