.包装类
1 什么是包装类
package cn.itsource._03IntegerTest;
public class IntegerTest {
/*
* 包装类的学习:通过Integer 学习,对包装类有足够的认识
* Integer概念:表示了整数类型,为int类型提供的一个类
*
* Integer 构造方法的学习
*
* Integer(int value)
构造一个新分配的 Integer 对象,它表示指定的 int 值。
Integer(String s)
构造一个新分配的 Integer 对象,它表示 String 参数所指示的 int 值。
*
* */
public static void main(String[] args) {
Integer integer = new Integer(10);
System.out.println(integer);
Integer inte = new Integer("10");
System.out.println(inte);
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.SIZE);
}
}
- 简单理解 :
- Java为每种基本数据类型,提供对应的类,来描述对应基本数据类型的这一类事物
- 例如 : int Integer 其实都表示一个整数,并且范围是一样的
(1) int i = 10;
(2) Integer i1 = new Integer(10);
(3) Java眼里万事万物皆对象:
(4) class Integer{
public static final int max = xxxxx;
public static final int size = 32;
int i;
Integer(int i){
this.i=i;
}
} - 提供包装类有什么好处:
- 方法
- 继承Object
- 提供一些常量字段:查询该类型数据的额一些信息:最大值,最小值,存储的位数
- Java中的包装类有哪些
基本数据类型 其对应的包装类(可以在API文档中查询到)
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean - 既然有了int 干嘛还需要一个Integer,感觉差不多
- Integer类(字段,方法),在这个类中把int的位数,最大值,最小值写成常量了
- Integer类中提供了一些有用的方法:例如int-String之间的转换,和其它的数据类型的转换
- 包装类的继承体系
- Number 的子类必须提供将表示的数值转换为 byte、double、float、int、long 和 short 的方法。
- 也就是说,Number的子类都提供了方法,将子类对象所表示的数据,转换成byte、double、float、int、long 、short等数据类型
- 例如:查找Integer类中 :提供了非静态的下列方法,应该用对象调用
(1) byte byteValue() 以 byte 类型返回该 Integer 的值。
(2) double doubleValue() 以 double 类型返回该 Integer 的值。
(3) float floatValue() 以 float 类型返回该 Integer 的值。
(4) int intValue() 以 int 类型返回该 Integer 的值。
(5) long longValue() 以 long 类型返回该 Integer 的值。
(6) short shortValue() 以 short 类型返回该 Integer 的值。
4.2 包装类对象的创建方式(Integer)
1、明确通过Integer一个包装类的学习应该知道其他包装类都是一样的
2、Integer对象创建,调用构造方法
-
Integer(int value)
-
Integer(String s)
3、思考: 如下两个有什么区别 -
Integer i1 = new Integer(123);
-
Integer i1 = new Integer(“123”);
4、简单提示: 在项目很多时候从前台传输数据到后台几乎都是字符串的形式
5、排错,今日重点中的重点 -
方式一:把上面的类拷贝下来,到API文档中查询什么意思 NumberFormatException
-
方式二:从上面的错误提示中 at 在,找到我们自己写的代码最后一个 21,然后点一下(自动定位)
原来是21行报错:分析具体这行代码,哪些地方可能出错
Integer i3 = new Integer(“A”);
① 定义了一个变量 把一个对象赋值给一个变量,看起来没毛病
② 调用了Integer的一个构造方法 Integer(String s) 嫌疑最大
③ 查看此构造方法中的描述…
NumberFormatException - 如果 String 不包含可解析的整数。
分析原因:一般来说我们是把一个值为数字的字符串可以转成数字Integer -
方式三:debug使用Eclipse工具的代码调试功能,具体看课堂演示
-
删除法
6、常用的一些方法: 以文档为准
4.3 自动装箱拆箱
package cn.itsource._04Package;
public class IntegerPackage {
public static void main(String[] args) {
//Integer i1 = new Integer(10);//手动装箱
//自动装箱:包装类的特点
Integer i1 = 10;
double d = 10;//跟装箱没关系:自动类型转换
Object obj = new IntegerPackage();
//2.自动拆箱
Integer i2 = 11;
int i = i2;
System.out.println(i1+i2);
//Double b = 1;不支持自动装箱
Double c = 1.0;
}
}
1、装箱 : 把一个基本数据类型的数据赋值给一个其对应的包装类的过程
2、拆箱 : 把一个包装类对象赋值给一个其对应的基本数据类型的变量的过程
3、以int – Integer为例
装箱 Integer i1 = new Integer(123);
拆箱 int i2 = i1.intValue();
4、从jdk5开始支持自动装箱 拆箱的
① 原来接数据类型限定了变量可以存值的类型int i = 10;可以 int k = 3.0;不可以
② 多态:父类类型兼容子类类型类型:Animal aml = new Person();
手动装箱:int i2 = new Integer(123);//通过方法装箱
自动装箱: Integer i1 = 123;//包装类Java提供特性,基本数据类型装入到包装类对象
` 5、自动装箱拆箱只支持 基本数据类型和其对应的包装类
double d = 123;
Integer i = 123;
Double dd = 123.0;
Double ddd = 123; // 不行
4.4 享元模式
package cn.itsource._05XY;
public class IntegerXY {
/*
* 1.享元模式:常用的包装类值,缓存起来了:在用的时候直接引用
*
* 2.Integer享元模式:把常用的值-128 +127:Integer对象全部缓存起来
* 该范围需要用,就直接引用
* Integer有一个内部类:并且内部类中,有一个静态代码块,优先于主方法执行
* 3.超过范围会创建新的对象
* 4.强化:对象应该用equals 基本数据类型用==
* 5.Double会不会有享元模式?
* 1~2 没法缓存:不存在享元模式
* */
public static void main(String[] args) {
Integer i1 = 10;
Integer i2 = 10;
System.out.println(i1==i2);//true
System.out.println(i1.equals(i2));//true
Integer i3 = new Integer(10);//new 一定会复制一份
System.out.println(i1==i3);//false
System.out.println(i1.equals(i3));//true
Integer i4 = 500;
Integer i5 = 500;
System.out.println(i4==i5);
}
}