1. 变量综述
1.1 变量原理
class Test{
public static void main(String []args){
int a = 1;
int b = 3;
b = 89;
System.out.println(a);
System.out.println(b);
}
}
①处a指向1,b指向3 ②处b指向的位置,数据被换掉,b指向89
1.2 变量声明、赋值和使用
可以声明和赋值分开,也可以声明后紧接着赋值。
public class Var01
public static void main(String[]args){
int a;
a=100;
System.out.println(a);
int b = 800;
System.out.println(b);
}
}
1.3 存储不同的数据类型
public class Var02
public static void main(String[]args){
int age = 30;
double score = 88.9;
char gender = '男';
String name = "king";
System.out.println("人的信息如下:");
System.out.println(name);
System.out.println(age);
System.out.println(score);
System.out.println(gender);
}
}
1.4 变量使用注意事项
- 变量表示内存中的一个存储区域 。变量类型不同,所占空间不同,比如: int 4个字节,double 8个字节。
- 变量必须先声明,后使用。
- 某一变量值可以在同一类型范围内不断变化。
- 在同一作用域内,变量不能重名。
- 变量三要素:变量名、值、数据类型。
2. 加号的使用
- 左右两边都是数值,做加法运算
- 左右两边有一方为字符串,做拼接运算
System.out.println(100 + 98);
System.out.println("100" + 98);
System.out.println(100 + 3 + "hello");
System.out.printIn("hello" + 100 + 3);
3. 数据类型
3.1 综述
??Java数据类型分为两大类:基本数据类型、引用类型。 ??基本数据类型有8种,包括数值型【byte,short,int,long,float,double】,char,boolean;引用类型有3种,类,接口,数组。 ??Java中没有单独的String类型,String在引用数据类型的类当中讲解。 ??下图中放括号内标注的是各个数据类型所占的字节数。
3.2 整型
类型 | 占用存储空间 | 范围 |
---|
byte | 1字节 | -128~127 | short | 2字节 | -215 ~ 215-1 (-32768~32767) | int | 4字节 | -231 ~ 231-1 (-2147483648 ~ 2147483647) | long | 8字节 | -263 ~ 263-1 (-9223372036854775808 ~ 9223372036854775807) |
- Java整型有固定的范围和字段长度,与操作系统无关,以保证Java的可移植性。
- Java整型数值默认为int型,long型数值后须加‘l’或‘L’。int a = 1L是不允许的,
- Java变量一般声明为int型, 除非不足以表示大数,才使用long。
3.3 浮点型
类型 | 占用存储空间 | 范围 |
---|
float | 4字节 | -3.403E38~3.403E38 | double | 8字节 | -1.798E308~1.798E308 |
-
浮点数在机器中的存放形式:浮点数 = 符位 + 指数位 + 尾数位。 -
尾数部分可能丢失,造成精度损失,所以小数都是近似值。 -
与整型类似,Java 浮点型也有固定的范围和字段长度,与操作系统无关。 -
Java的浮点型数值默认为double型,float型数值后须加’f’或’F’。 float num2 = 1.1F;
double num3 = 1.1;
double num4 = 1.1F;
-
通常应使用double,因为它比float更精确。 double num9 = 2.1234567851;
float num10 = 2.1234567851F;
System.out.println(num9);
System.out.println(num10);
-
浮点数使用陷阱:2.7 与 8.1/3 double num11 = 2.7;
double num12 = 8.1/3;
System.out.println(num11);
System.out.println(num12);
??num12是一个接近2.7的值。若出现num11和num12这种情形,即:从数学角度来说,两个值相等,但计算机得到的却不相等,就不能直接用if(num11 == num12) 这种方式判断是否相等,可以用if(Math.abs(num11 - num12) < 0.0000001) 这种方式判断(0.0000001是可以接受的误差)。 ??若num2直接赋值为2.7,num11与num12就是完全相等的,如下面代码所示:
double num11 = 2.7;
double num12 = 2.7;
System.out.println(num11);
System.out.println(num12);
3.4 字符型
3.4.1 字符型的使用
-
字符类型是char,字符常用单引号括起来。 -
Java字符占2个字节,可以存放单个字符,也可以存放汉字。char c = '韩'; -
多个字符用String存放,后面会详细讲解String。 -
字符在底层对应的是数字,所以char类型也可以存放一个数字,但是在输出这个char类型的数据时,会输出数字对应的字符(Unicode码对应的字符)。Unicode码与字符在线转换:https://tool.chinaz.com/tools/unicode.aspx char c = 97;
System.out.println(c);
-
要输出对应的数字,可以使用“(int)字符”的方式。 char c2 = 'a';
System.out.println((int)c2);
char c3 = '韩' ;
System.out.println( (int)c3);
-
char型可以参与运算,因为相当于一个整数。 System.out.println('a' + 10);
char c5 = 'b'+ 1;
System.out.println((int)c5);
System.out.println(c5);
3.4.2 字符型的本质
字符型在计算机中的存储和读取,比如’a’ : 存储:‘a’ → 码值97 → 二进制(110 0001) → 存储 读取:二进制(110 0001) → 97→ 'a’→ 显示
字符编码
编码类型 | 描述 |
---|
ASCII 编码 | ?英文字符与二进制之间的关系。 ?用1个字节表示,共128个字符(实际上可以表示256个字符,只用了128个,最前面一位统一为0)。 ?缺点:不能表示所有字符。 | Unicede 编码 | ?万国码,可以表示世界上所有字符,各种文字使用统一的编码,所以不会出现乱码。 ?字母和汉字都占2个字节。 ?最多编码 216 = 65536个字符. ?编码0~127的字符时与ASCII码一样。比如’a’的ASCII码是0x61 ,Unicode码是0x0061,都对应97。因此Unicode码兼容ASCII码。. ?缺点:浪费存储空间(字母也占2字节)。 | utf-8 编码 | 使用1~6个字节表示一个符号。 字母占1个字节,汉字占3个字节。 | gbk 编码 | 字母占1个字节,汉字占2个字节(可表示的汉字数量比utf-8少,但也基本够用;也因为可表示汉字数量的原因,有时将utf-8的文件转换成gbk会报错)。 | gb2312 编码 | 可以表示的汉字比较少(gb2312 < gbk),开发中很少用。 | big5 编码 | 繁体中文,台湾,香港 |
3.5 布尔型
- 布尔类型(boolean),取值为true和false,无null。
- boolean类型占1个字节。
- boolean类型适于逻辑运算,一般用于程序流程控制。
- 不可以0或非0的整数替代false和true,这点和C语言不同。
4. 数据类型转换
4.1 自动类型转换
自动类型转换:当Java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型。 数据类型按精度(容量)大小排序为:
int a = 'c';
double d = 80;
System.out.println(a);
System.out.println(d);
-
多种类型的数据混合运算时,首先自动将所有数据转换成容量最大的数据类型,再计算(计算结果的类型与操作数中容量最大的类型一致)。 -
把容量(精度)大的数据类型赋值给容量(精度)小的数据类型时,就会报错,反之就会自动类型转换。 int n1 = 10;
float d1 = n1 + 1.1;
double d2 = n1 + 1.1;
float d3 = n1 + 1.1F;
int n2 = 1.1;
-
把具体数值赋给 char、byte、short 时,先判断该数值是否在其范围内,如果是,就可以赋值;char、byte不能接受变量赋值,short可接受byte变量赋值(原理在上一条)。 -
byte与char, short与char之间不会相互自动转换。 byte b1 = 10;
int n2 = 1;
byte b2 = n2;
char c1 = b1;
-
byte, short, char在计算时首先转换为int类型。 byte b2 = 1;
byte b3 = 2;
short s1 = 1;
short s2 = b2 + s1;
int s2 = b2 + s1;
byte b4 = b2 + b3;
-
boolean不参与转换(上面的容量大小排序示意图中没有boolean)。
4.2 强制类型转换
强制类型转换:自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符( ),但可能造成精度降低或溢出,要格外注意。
int n1 = (int)1.9;
System.out.println(n1);
int n2 = 2000;
byte b1 = (byte)n2;
System.out.println(n2);
5. Java API文档
??API (Application Programming Interface),即应用程序编程接口,是Java提供的类还有相关的方法。中文在线文档:https://www.matools.com/api/java8。 ??Java类的组织形式: ??查看某个类中的某个方法的使用: ??(1)按照“包->类->方法”的顺序在文档中查找。 ??(2)直接在搜索框中搜索方法名。
|