1.1 Java数据类型的分类
Java的数据类型包括基本数据类型和引用数据类型。基本数据类型有byte、short、int、long、float、double、char和boolean,用于处理简单类型的数据。引用数据类型有class、interface和array,用于处理复杂类型的数据。
1.2 基本数据类型的种类
类型 | 说明 | 字节数 | 范围 |
---|---|---|---|
byte | 用于存储整数 | 1 | -128~127 |
short | 短整数 | 2 | -32768~32767 |
int | 整型 | 4 | -2^31 ~ 2^31-1 |
long | 长整型 | 8 | -2^63 ~ 2^63-1 |
float | 单精度浮点数 | 4 | |
double | 双精度浮点数 | 8 | |
boolean | 布尔型 | 1 | |
char | 字符型,Unicode编码 | 2 |
1.3 Java浮点数
遵循IEEE754标准,采用二进制数据的科学计数法来表示,对于float,第一位是符号位,接下来8位表示指数,在接下来23位表示尾数;对于double类型,第一位也是符号位,接下来11位表示指数,在接下来52位表示尾数。
因为使用二进制数据的科学计数法表示浮点数,因为浮点数不能准确的表示一个浮点数。
如果想准确的表示浮点数,可以考虑使用BigDecimal类。
Java还提供了三个特殊的浮点数值:正无穷大POSITIVE_INFINITY、负无穷大NEGATIVE_INFINITY、非数NaN
1.4 Java类型转换
1.4.1 自动类型转换
自动类型转换也叫隐式类型转换。指将数据类型范围小的变量或常量赋值给数据类型大的变量或常量时,Java会自动进行类型转换。
- byte、short、char类型的值在表达式中首先被提升为int类型
- 如果有一个操作数是long类型,整个表达式都会被自动提升为long类型
- 如果有一个操作数是float类型,整个表达式都会被自动提升为float类型
- 如果有一个操作数是double类型,整个表达式都会被自动提升为double类型
1.4.2 强制类型转换
强制类型转换也叫显示类型转换,指的是将类型大的变量赋值给数据类型小的变量,需要使用强制类型转换符。如:
double d = 100.00;
int i = (int) d;
1.5 Java常量
Java定义常量的关键字是final
1.6 Java运算符的优先级
后缀运算符(变量后的++、–)、前缀运算符(变量前的++、–)、一元运算符(正负号、逻辑非!、位非~)、乘法除法运算符(*、/、%)、加减法运算符、位移运算符、关系运算符、相等运算符、位运算符、逻辑运算符、条件运算符(条件表达式?:等)、赋值运算符(=、-=、+=)。
1.7 泛型
指所操作的数据类型被指定为一个参数。
1.7.1 提高类型安全
主要目标是提高Java程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在非常高的层次上验证类型假设。通过在变量声明中捕获这一附加的类型信息,泛型允许编译器实施这些附加的类型约束。类型错误可以在编译时被捕获,而不是运行时当做ClassCastException展示出来。有助于Java开发人员更早更容易的找到错误,并可提高程序的可靠性。
1.7.2 消除强制类型转换
1.7.3 更高的运行效率
避免不必要的装箱拆箱操作。在非泛型中,将简单类型作为Object传递时,会引起Boxing(装箱)和Unboxing(拆箱)操作,会有很大的开销。
1.8 泛型的注意事项
- 泛型的类型只能是类类型,不能是简单类型
- 泛型的类型参数可以有多个
- 不能对确切的泛型类型使用instanceof操作
- 不能创建一个确切的泛型类型的数组
1.9 泛型的通配符
- E:element,在集合中使用
- T:type,Java类
- K:key
- V:value
- N:Number
- ?:表示不确定的Java类型
1.10 通配符上下界
<? extends T>
表示这个泛型参数必须是T或者T的子类
<? super T>
,表示泛型参数必须是T或者T的父类
1.11 类型擦除
Java的泛型是假泛型,因为在编译时所有的泛型都会被擦除。
1.12 Java跳转语句
break、continue、return
1.13 Java构造方法的特点
- 构造方法的方法名必须和类名相同
- 构造方法没有返回类型,也不能被定义为void
- 构造方法的主要作用是完成对象的初始化,能够把定义对象时的参数传递给对象
- 一个类可以定义多个构造方法,如果没有显示的定义构造方法,编译时会自动生成一个无参数误操作的构造函数
- 构造函数可以重载
1.14 构造方法的继承
- 子类只继承父类的默认构造函数(即无参数构造函数)
- 子类从父类继承来的父类默认构造函数,不能成为子类的默认构造函数
- 在创建对象时,先调用父类的默认构造函数,然后调用子类自身定义的构造函数
- 如果子类想调用父类的构造函数,必须使用super来实现
- 子类必须调用父类的构造函数
1.15 重载和重写
重写:子类重新定义父类中的方法,要求方法名、参数列表、返回类型必须相同
- 必须有相同的名称、参数列表、返回值类型
- 重写的访问修饰符不能比父类严格
- 子类不能抛出比父类更宽泛的异常类型
- 可以使用@Override来提高代码可读性
重载:同一个类中,方法名相同,参数列表不同
- 方法名相同,但是参数列表不同(参数类型、参数个数、参数顺序)
- 重载方法可以具有不同的返回类型
- 可以在同一个类或者其父类中定义
- 访问修饰符无限制