Java基本类型
new关键字会将对象存储在“堆”中,由于基本数据类型是小并且简单的变量,用new在堆中创建,并不是非常有效。因此,Java采取与C和C++相同的方式,将基本类型存储在栈中,不需要new来创建变量,基本变量直接存储值,可以提高效率。
Java基本数据类型,为了方便可移植性,每种基本数据类型所占空间的大小是固定不变的,不随硬件架构的变化而变。
8种基本类型
- 整型
byte(1字节/8bit)
short(2字节/16bit)
int(4字节/32bit)
long(8字节/64bit) - 浮点型
float(4字节/32bit)
double(8字节/64bit) - 字符型
char(2字节/16bit) - 布尔型
boolean
类型转换
- 自动转换
数据类型小的自动转换为数据类型大的。
double d = 8;
- 强制转换
数据类型大的强制转换为数据类型小的,会丢失一定精度。
int n = (int) 2.12;
Java引用类型
字符串
所有“”都是String类的对象。字符串是常量,一旦创建,不可更改。本质char[]。——private final char value[];——堆内存有一个常量池,字符串对象以char[]数组形式存在。不可变更的是char[]数组的数据,即字符串对象。
- StringBuffer类
解决String类的内存浪费问题。
字符串的缓冲区。内部采用了可变数组方式。内部定义了数组,内部char[]没有final(实现可变性),默认容量16个字符。 - StringBuilder类
StringBuilder类中的方法与StringBuffer类中的API完全一致(方法一致)。但是不保证同步,适用于单线程,运行速度快。线程不安全的类。
数组
创建一个数组,就是创建了一个数组的引用,并且赋予相对应的默认初始值。
类
自动拆箱与装箱
8种基本数据类型的包装类(Byte、Integer、Short、Long、Float、Double、Boolean、Character)
jdk1.5后
自动装箱——基本数据类型包装对象
自动拆箱——引用类型转变为基本数据类型
Integer i = 1;//自动装箱
int x = i;//自动拆箱
优点:基本类型和引用类型可以直接运算。缺点:Integer in = null;in = in+1;会出现空指针异常——java.lang.NullPointerException;
抽象类
包含抽象方法的类叫做抽象类。只要包含抽象方法,该类必须被限定为抽象类,否则,编译不通过。(但是抽象类可以不包含抽象方法,该抽象类仅仅用于被继承,被限制不可创建对象)
抽象类不能被实例化,不能使用new关键字创建对象,原因在于不可调用抽象方法。
接口
为了解决抽象类的耦合度以及单继承问题,引入接口概念。
接口比抽象类更抽象,所有的成员方法均是抽象的。
定义方法——public abstract 返回值 方法名(参数列表);
定义变量——public static final 数据类型 变量名 = 值。(必须定义为常量,不可更改)