一、java提倡一切皆对象,八种数据类型不是对象,而包装类就可以将基本数据类型以类的形式进行操作!
图1
其所继承的父类不尽相同
Integer、Byte、Float、Double、Short、Long都属于Number类的子类,Number类本身提供了一系列的返回以上六种数据类型的操作。
Character属于Object的直接子类。Boolean属于Object的直接子类
图2
下面以Integer和Float为例:
装箱及拆箱:
将基本数据类型变为包装箱成为装箱
将包装类的类型变为基本数据类型成为拆箱
程序(装箱拆箱)
public class NumberDemo1 {
public static void main(String[] args) {
int x = 5;//基本数据类型
Integer i = new Integer(x);//装箱:将基本数据类型变为包装类
System.out.println(i.intValue());//拆箱:将一个包装类变为基本数据类型
//在JDK1.5之后,对程序增加了自动装箱及自动拆箱,而且可以使用包装类直接进行数字运算
//在包装类中,就可以将字符串变为指定的数据类型!
Integer i= 4;自动装箱
int a = i;自动拆箱
}
}
包装类的应用
包装类可以将字符串变为基本数据类型
例如:将一个全有数字组成的字符串变为一个int或float类型的数据在Integer和Float类中分别提供一下方法;
Integer类(字符串变为int、型)
public static int parseInt(String s) throws NumberFormatException
Float类(字符串转float型)
public static float parseFloat(String s) throws NumberFormatException
public class NumberDemo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "2784";//全是由数字组成的字符串
int x = Integer.parseInt(s);//静态方法,直接调用
System.out.println(x);
}
}
二、内部类:
一个类的内部还有另外一个类成为内部类,那么匿名内部类,如果一个类在整个操作 中只使用一次的话,就可以将其定义成匿名内部类, 匿名内部类实在抽象类即接口的基础之上发展而来的。
interface A {
public void printinfo();
}
class B implements A {// 实现接口
@Override
public void printinfo() {
// TODO Auto-generated method stub
System.out.println("下午去打球");
}
}
class X {
public void fun1() {
this.fun2(new B());
}
public void fun2(A a) {// 向上转型
a.printinfo();
}
}
public class NoneInner {
public static void main(String[] args) {
// TODO Auto-generated method stub
new X().fun1();
}
}
当B类就使用一次时,就可以使用匿名内部类了,实际开发中匿名内部类使用时很频繁的!interface A {
public void printinfo();
}
class X {//没有继承接口A,而是直接在方法的参数中直接实例化接口,同时实现上面的抽象方法
public void fun1() {
this.fun2(new A() {// 实例化接口,!!
public void printinfo() {
// TODO Auto-generated method stub
System.out.println("下午去打球");
}
});
}
public void fun2(A a) {// 向上转型
a.printinfo();
}
}
public class NoneInner1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
new X().fun1();
}
}