1、变量 1.5.1 变量的概念 定义:内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型),该区域的数据可以在同一类型范围内不断变化。 特点:变量其实就是将不拟定的数据进行存储,也就是需要在内存中开辟一个空间。 为什么要定义变量? 用来不断的存放同一类型的常量,并可以反复使用。 定义变量的格式: 数据类型 变量名 = 初始化值; 例如:byte b = 3; P.S. 1、格式是固定的,记住格式,以不变应万变。 2、变量的作用范围(一对{}之间有效)
2、 3、变量只能存放某一类型的数据。 理解: 变量就如同数学中的未知数X。 1.5.2 Java语言的数据类型 Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分派了不同大小的内存空间: byte 1个字节 short 2个字节 int 4个字节 long 8个字节 float 4个字节 double 8个字节 char 2个字节
3、 Java语言的数据类型涉及8种基本类型,3种引用类型。 P.S. 1、整数默认类型:int类型,小数默认类型:double类型。 2、double类型的小数精度比float类型的小数更高。 1.5.3 常见错误 错误示例一: 1. class VarDemo 2. { 3. public static void main(String[] args){ 4. byte b = 3; 5. byte b = 8; 6. } 7. } 复制代码 运营结果
4、 错误因素:变量定义一次以后,不能再重新定义一次。 错误示例二: 1. class VarDemo 2. { 3. public static void main(String[] args){ 4. long l = ; 5. System.out.println(l); 6. } 7. } 复制代码 运营结果: 错误因素:由于整数默认类型是int类型,假如数值超过了int类型的范围,那么就会报如上错误。即使是赋值给long类型的变量,但是由于后面的常量已经超
5、过了int类型的范围,同样会报错。 解决方法:在数值后面加上一个“l”,就可以让编译器知道后面的常量是long类型。 代码如下: 1. class VarDemo 2. { 3. public static void main(String[] args){ 4. long l = l; 5. System.out.println(l); 6. } 7. } 复制代码 运营结果: 错误示例三: 1. class VarDemo 2. { 3. public s
6、tatic void main(String[] args){ 4. float f = 2.3; 5. System.out.println(f); 6. } 7. } 复制代码 错误因素:由于小数默认是double(8byte)类型,赋值给float(4byte)类型的变量,当然也许会损失精度,必然通但是编译器的审核。 解决方法:在数值后面加上一个“f”,让编译器知道后面的常量是float类型的。 1. class VarDemo 2. { 3. public static void main(String
7、[] args){ 4. float f = 2.3f; 5. System.out.println(f); 6. } 7. } 复制代码 运营结果: 错误示例四: 1. class VarDemo 2. { 3. public static void main(String[] args){ 4. int y; 5. System.out.println(y); 6. } 7. } 复制代码 运营结果: 错误因素:
8、由于变量y是未初始化的,所以不能直接操作。 解决方法:一定要为变量y先赋值,再打印输出。 错误示例五: 1. class VarDemo 2. { 3. public static void main(String[] args){ 4. int z = 9; 5. } 6. System.out.println(z); 7. } 复制代码 运营结果: 错误因素:由于变量z的作用范围是在一对{}之间有效,超过这个范围就失效了。所以,找不到z这个符号。 解决方法:将大括号去
9、掉,或者在大括号里面直接打印变量z。 错误示例六: 1. class VarDemo 2. { 3. public static void main(String[] args){ 4. char ch = 'a'; 5. System.out.println(ch); 6. } 7. } 复制代码 运营结果: 错误因素:编写程序时,不能使用中文符号。 解决方法:改成英文分号符号即可。 1.5.4 类型转换 类型转换在开发中也很常用,简朴来说就是类型
10、之间互相的转化,类型转换共分两种,自动类型转换和强制类型转换。 1. 自动类型转换(隐式类型转换) 定义:自动类型转换就是不需要我们手动对类型来进行强制转换。 示例: 1. class VarDemo 2. { 3. public static void main(String[] args){ 4. int x = 3; 5. byte b = 5; 6. x = x + b; 7. System.out.println(x); 8. } 9. } 复
11、制代码 运营结果: 说明:int类型的变量占4个字节,当byte类型的变量与其相加的时候,一方面会将byte类型的变量自动转化为4个字节的int类型,然后再进行加法操作。 2. 强制类型转换(显式类型转换) 定义:强制类型转换需要把类型进行手动转换,否则无法正常使用 示例: 1. class VarDemo 2. { 3. public static void main(String[] args){ 4. byte b = 3; 5. b = b + 200; 6.
12、 System.out.println(b); 7. } 8. } 复制代码 运营结果: 错误因素:当byte类型的变量提高为int类型与int类型的常量200相加后,结果仍然是int类型,再赋值给byte类型,当然会出现损失精度的错误。 解决方法:进行强制类型转换,也就是将占4个字节的int类型值,再强硬存储到占1个字节的byte变量中。 代码如下: 1. class VarDemo 2. { 3. public static void main(String[] args){ 4.
13、 byte b = 3; 5. b = (byte)(b + 200); 6. System.out.println(b); 7. } 8. } 复制代码 运营结果: 说明:结果为-53的因素是,200+3结果是203,换算成占1个字节空间的二进制也就是11001011。由于首位为1,所以是负数,除符号位外,其余部分取反加1,得1,0110101,即-53。 P.S. 1、只有数值类型才干进行加法操作,非数值类型不行。 示例: 1. class VarDemo
14、 2. { 3. public static void main(String[] args){ 4. System.out.println(true+1); 5. } 6. } 复制代码 运营结果: 2、char类型数据也可以和int类型相加,但是一方面char类型数据会被自动提高为int类型。 示例: 1. class VarDemo 2. { 3. public static void main(String[] args){ 4. System.out.println
15、'a'+1); 5. System.out.println('你'+1); 6. } 7. } 复制代码 运营结果: 说明:字符类型数据之所以可以自动提高为int类型是由于字符类型数据在计算机中也是用0、1表达的,int类型数据在计算机中也用0、1表达,所以char类型数据当然可以转换为int类型数据。但是,字符类型数据在计算机中使用0、1表达是按照何种顺序组合排列的则需要依据某个码表而定。Java中的内置码表是Unicode,既包含中文,也包含英文。 P.S. 通过强转也可以把数字强转成字符。
16、 示例: 1. class VarDemo 2. { 3. public static void main(String[] args){ 4. System.out.println((char)('a'+1)); 5. } 6. } 复制代码 运营结果: 表达式的数据类型自动提高: 所有的byte型、short型和char的值将被提高到int型。 假如一个操作数是long型,计算结果就是long型; 假如一个操作数是float型,计算结果就是float型; 假如一个操作数是double型,计算结果就是double型。






