包装类
对基本数据类型进行包装
把基本数据类型变的更强大
把基本数据类型变成包装类叫做装箱操作
jdk1.5新特性,自动装箱,Integer等包装数据类型不用new
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
flout | Float |
char | Character |
boolean | Boolean |
Integer内部覆盖了tostring
三种赋值方法
Integer num =new Integer(1);
Integer num2 =Integer.valueOf(1);
Integer num3=3;
装箱操作:把一个基本数据类型的值,转换为对应的包装类对象。
拆箱操作:把包装类的对象,转换为对应的基本数据类型的变量
自动装箱:可以直接把一个基本数据类型赋值给包装类对象,其实最终编译成字节码的时候,还是使用valueOf进行装箱(语法糖)
Integer i=Integer.valueOf(20);
Integer i=20;//这俩者等价
自动拆箱:可以直接把一个包装类对象赋值给基本数据类型的变量。本质:编译成字节码的时候。会调用intValue方法
基本数据类型与包装类区别
默认值不一样
包装类当中提供了很多方法直接给我们使用
集合框架当中不能存放基本数据类型,只能存对象
什么时候使用基本数据类型什么时候使用包装类
在类当中,成员变量一般都使用包装类型
在方法中,我们一般都都使用基本数据类型
方法中基本数据类型在栈中,包装类型在堆中
Integer i =new Integer(100);
Integer i2 =new Integer(100);
System.out.println(i==i2)//false,包装类中比较的是地址,每new都会创建新的地址,
Integer i3 =Integer.valueOf(123);
Integer i4 =Integer.valueOf(123)
System.out.println(i==i2)//true 包装类当中的缓存设计,但在-128到127之间才使用给缓存,超过这个范围会直接创建新的地址
结论不要使用==直接比较,对于Object类型使用equals进行比较
抽象方法
在方法前面添加了一个关键字abstract
特点,抽象方法是没有方法体的
抽象方法必须得要定义在抽象类 或接口当中(在类前面添加上了一个abstract就成为了抽象类)
抽象类的子类必须去覆盖抽象的方法
抽象方法在定义的时候不需要要方法体,并且不能是私有private的,不能使用final和static修饰
抽象类一般都当作父类去被继承,可以有非抽象的方法,不能直接创建对象
抽象类继承抽象类可以不覆盖抽象方法
抽象类的构造方法不能定义为私有的(抽象方法必须要让子类继承之后,才能实现内部的方法体,子类继承的话,先去调用父类的构造方法)
抽象类不能使用final来修饰
命名时,都喜欢在类名前面加上Abstract
接口
java接口表示一种规范约束要求实现遵循该规范,用来约束使用者该怎么做
使用抽象方法来去定义一组功能必须要实现者提供方法的实现
interface Jiekou{
}
接口也会生成对应的字节码
接口是一个特殊的抽象类,可以在接口前面和接口的方法前加上或不加abstract等价。编译时字节码中会自动的给方法前面哦加上abstract
注意点
接口没有构造器,不能创建对象,接口当中定义的变量,编译成字节码时会变成全局的静态常量会加上public syayic final
接口当中定义的方法都是公共的抽象的方法
接口当中可以定义内部类,内部类也是public abstract
接口的继承
一类可以继承多个接口,接口之间用用,分割
interface 接口名称 extends 继承的接口名称,继承的接口名称
接口继承的时候一般不回去覆盖父接口的方法
接口默认是public,所以实现接口的访问权限不能小于public,所以只能是public
接口的实现 类名 implements 接口1,接口2{}
接口弥补了类只能单继承的缺点
接口也可以使用多态的写法(多态,编译时看左边,运行时看右边)叫做面向接口编程。