第二十一章 八种封装类
提纲
- 21.1 封装类简介
- 21.1.1 什么是封装类
- 21.1.2 包装类有哪些
- 21.1.3 为什么存在这两种类型
- 21.1.4 两种类型的区别
- 21.2 Integer
- 21.2.1 概念
- 21.2.2 构造方法
- 21.2.3 常用方法
- 21.2.4 常量
- 21.2.5 各种进制数之间的计算
- 21.2.5.1 二进制与十进制之间的转换
- 21.2.5.2 二进制与八进制之间的转换
- 21.2.5.3 二进制与十六进制之间的转换
- 21.2.5.4 十进制与八进制与十六进制之间的转换
- 21.2.5.5 十六进制与八进制之间的转换
- 21.3 Boolean
- 21.4 Byte
- 21.5 Character
- 21.6 Double
- 21.7 Nmber
- 21.8 作业
21.1 封装类简介
- 21.1.1 什么是封装类:也叫包装类。为了能将基本类型转化为对象进行处理,并能连接相关的方法,Java为每个基本数据类型都提供了包装类,这样便可以把这些基本类型转换为对象来进行处理了。需要说明的是,Java是可以直接处理基本数据类型的,但在有些情况下需要将其作为对象来处理,这时就需要将其转换为包装类了。(什么是API:Application Programming Interface,应用程序编程接口,是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。)
- 21.1.2 包装类有哪些:
- 基本数据类型:byte<short<char<int<long<float<double。boolean。
- 八种包装类(对象不分大小):除了char对应Character,int对应Integer,其他的包装类都是把基本数据类型的首字母大写。
- Object
- Boolean——boolean
- Character——char
- Number
- Byte——byte
- Short——short
- Integer——int
- Long——long
- Float——float
- Double——double
- Object
- 21.1.3 为什么存在这两种类型:
- Java语言中,new一个对象存储在堆里,我们通过栈中的引用来使用这些对象;但是对于经常用到的一系列类型如int,如果我们用new将其存储在堆里就不是很有效——特别是简单的小的变量。所以就出现了基本类型,同C++一样,Java采用了相似的做法,对于这些类型不是用new关键字来创建,而是直接将变量的值存储在栈中,因此更加高效。
- 有了基本类型之后为什么还要有包装器类型呢?我们知道Java是一个面相对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型(如我们在使用集合类型Collection时就一定要使用包装类型而非基本类型),它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。
- 另外当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装object的,这是就需要这些基本类型的包装器类了。
- 这两种类型可以相互转换。
- 21.1.4 两种类型的区别
- 声明方式不同,基本类型不适用new关键字,而包装类型需要使用new关键字来在堆中分配存储空间;
- 存储方式及位置不同,基本类型是直接将变量值存储在栈中,而包装类型是将对象放在堆中,然后通过引用来使用;
- 初始值不同,基本类型的初始值如int为0,boolean为false,而包装类型的初始值为null
- 使用方式不同,基本类型直接赋值直接使用就好,而包装类型在集合如Collection、Map时会使用到。
21.2 Integer
-
21.2.1 概念:Integer类在对象中包装了一个基本类型int的值。该类的对象包含一个int类型的字段。此外,该类提供了多个方法,能在int类型和String类型之间相互转换,同时还提供了其他一些处理int类型时非常有用的常量和方法。
-
21.2.2 构造方法:
- Integer(int number)
-
释义:该方法以一个int型变量作为参数来获取Integer对象。
-
举例:
public static void main(String[] args) { Integer integer = new Integer(10); System.out.println(integer); } //执行结果 10
-
- Integer(String str)
-
释义: 该方法以一个String型变量作为参数来获取Integer对象。
-
举例:
public static void main(String[] args) { Integer integer = new Integer("111"); System.out.println(integer); }
-
注意:必须用数值型的String变量作为参数,如111,否则会抛出NumberFormatException异常。
-
- Integer(int number)
-
21.2.3 常用方法
-
方法:byteValue();返回值:byte;功能描述:以 byte 类型返回该 Integer 的值。
-
方法:compareTo(Integer anotherInteger);返回值:int;功能释义:在数字上比较两个 Integer 对象。
public static void main(String[] args) { Integer integer = new Integer(156); int ct1 = integer.compareTo(new Integer(155)); int ct2 = integer.compareTo(new Integer(156)); int ct3 = integer.compareTo(new Integer(157)); System.out.println("ct1="+ct1); System.out.println("ct2="+ct2); System.out.println("ct3="+ct3); } //执行结果 ct1=1 ct2=0 ct3=-1
-
方法:equals(Object obj);返回值:boolean;功能释义:比较此对象与指定对象。
-
方法:intValue();返回值:int;功能释义:以 int 类型返回该 Integer 的值。
-
方法:shortValue();返回值:short;功能释义:以 short 类型返回该 Integer 的值。
-
方法:toString();返回值:String;功能释义:返回一个表示该 Integer 值的 String 对象。
-
方法:valueOf(String s);返回值:static Integer;功能释义:返回保存指定的 String 的值的 Integer 对象。
-
方法:valueOf(int i);返回值:static Integer;功能释义:返回一个表示指定的 int 值的 Integer 实例。
Integer i = Integer.valueOf(456);//将基本数据类型转化为包装类
-
方法:valueOf(String s, int radix);返回值:static Integer;功能释义:返回一个 Integer 对象,该对象中保存了用第二个参数提供的基数进行解析时从指定的 String 中提取的值。其中,radix表示字符串的进制。最后结果是十进制的数。
-
方法:parseInt(String s);返回值:static int;功能释义:将字符串参数作为有符号的十进制整数进行解析。
public static void main(String[] args) { String[] str = {"55","41","10","8","-6","33","18"}; int sum = 0; for (int i = 0; i < str.length; i++) { //将包字符串类型转化为基本数据类型 sum += Integer.parseInt(str[i]); } System.out.println("数组中的各元素之和是:"+sum); } //执行结果 数组中的各元素之和是:159
-
方法:parseInt(String s, int radix);返回值:static int;功能释义:使用第二个参数指定的基数,将字符串参数解析为有符号的整数。
-
方法:toBinaryString(int i);返回值:static String;功能释义:以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。
-
方法:toHexString(int i);返回值:static String;功能释义:以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。
-
方法:toOctalString(int i);返回值:static String;功能释义:以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。
-
方法:toString(int i);返回值:static String;功能释义:返回一个表示指定整数的 String 对象。
//12,13,14,15举例 public static void main(String[] args) { String str = Integer.toString(456);//获取数字的十进制表示 String str2 = Integer.toBinaryString(456);//获取数字的二进制表示 String str3 = Integer.toHexString(456);//获取数字的十六进制表示 String str4 = Integer.toOctalString(456);//获取数字的八进制表示 System.out.println("'456'的十进制表示为:"+str); System.out.println("'456'的二进制表示为:"+str2); System.out.println("'456'的十六进制表示为:"+str3); System.out.println("'456'的八进制表示为:"+str4); } //执行结果 '456'的十进制表示为:456 '456'的二进制表示为:111001000 '456'的十六进制表示为:1c8 '456'的八进制表示为:710
-
自动拆装箱:基本数据类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。
-
基本数据类型的自动装箱功能
//一般我们要创建一个类的对象实例的时候,我们会这样: BBB bbb = new BBB(); //当我们创建一个Integer对象时,却可以这样: Integer i = 100; //(注意:不是 int i = 100; ) //实际上,执行上面那句代码的时候,系统为我们执行了:Integer i = Integer.valueOf(100);
-
自动拆箱(unboxing),也就是将对象中的基本数据从对象中自动取出。
Integer ii = new Integer(200); int b = ii; //执行上面那句代码的时候,系统为我们执行了:int b = i1.intValue();
-
-
-
21.2.4 常量
-
MAX_VALUE:值为 2^31-1 的常量,它表示 int 类型能够表示的最大值。
-
MIN_VALUE:值为 -2^31 的常量,它表示 int 类型能够表示的最小值。
-
SIZE:用来以二进制补码形式表示 int 值的比特位数。
-
TYPE:表示基本类型 int 的 Class 实例。
-
举例:
public static void main(String[] args) { int maxInt = Integer.MAX_VALUE; int minInt = Integer.MIN_VALUE; int intSize = Integer.SIZE; Class<Integer> class1 = Integer.TYPE; System.out.println("int类型可取的最大值:"+maxInt); System.out.println("int类型可取的最小值:"+minInt); System.out.println("int类型二进制位数:"+intSize); System.out.println("int类型Class类:"+class1); } //执行结果 int类型可取的最大值:2147483647 int类型可取的最小值:-2147483648 int类型二进制位数:32 int类型Class类:int
-
-
21.2.5 各种进制数之间的计算
-
21.2.5.1 二进制与十进制之间的转换
-
十进制转二进制:方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。(具体用法见图:1十进制转二进制.png)
-
二进制转十进制:方法为:把二进制数按权展开、相加即得十进制数。(具体用法见图:1二进制转十进制.png)
-
-
21.2.5.2 二进制与八进制之间的转换
-
二进制转八进制:方法为:3位二进制数按权展开相加得到1位八进制数。(注意事项,3位二进制转成八进制是从右到左开始转换,不足时补0)。(具体用法见图:2二进制转八进制.png)
-
八进制转成二进制:方法为:八进制数通过除2取余法,得到二进制数,对每个八进制为3个二进制,不足时在最左边补零。(具体用法见图:2八进制转成二进制.png)
-
-
21.2.5.3 二进制与十六进制之间的转换
-
二进制转十六进制:方法为:与二进制转八进制方法近似,八进制是取三合一,十六进制是取四合一。(注意事项,4位二进制转成十六进制是从右到左开始转换,不足时补0)。(具体用法见图:3二进制转十六进制.png)
-
十六进制转二进制:方法为:十六进制数通过除2取余法,得到二进制数,对每个十六进制为4个二进制,不足时在最左边补零。(具体用法见图:3十六进制转二进制.png)
-
-
21.2.5.4 十进制与八进制与十六进制之间的转换
-
十进制转八进制或者十六进制
- 方法1:间接法—把十进制转成二进制,然后再由二进制转成八进制或者十六进制。这里不再做图片用法解释。
- 方法2:直接法—把十进制转八进制或者十六进制按照除8或者16取余,直到商为0为止。(4十进制转八进制或者十六进制.png)
-
八进制或者十六进制转成十进制:把八进制、十六进制数按权展开、相加即得十进制数。(4八进制或者十六进制转成十进制.png)
-
-
21.2.5.5 十六进制与八进制之间的转换
- 方法1:他们之间的转换可以先转成二进制然后再相互转换。
- 方法2:他们之间的转换可以先转成十进制然后再相互转换。
-
21.3 Boolean
- 构造方法
-
Boolean(boolean value):分配一个表示 value 参数的 Boolean 对象。
Boolean b = new Boolean(true); System.out.println(b);
-
Boolean(String s):如果 String 参数不为 null 且在忽略大小写时等于 “true”,则分配一个表示 true 值的 Boolean 对象。
public static void main(String[] args) { Boolean b1 = new Boolean("TruE"); Boolean b2 = new Boolean("ok"); System.out.println("b1="+b1); System.out.println("b2="+b2); } //执行结果 b1=true b2=false
结论:当字符串为“true”不分大小写时,得到Boolean对象结果都为true,否则其他的字符串包括null结果都为false.
-
- 常用方法
-
方法:booleanValue();返回值:boolean;功能释义:将此 Boolean 对象的值作为基本布尔值返回。
//将Boolean对象转化为boolean基本类型 public static void main(String[] args) { Boolean b1 = new Boolean("TruE"); Boolean b2 = new Boolean("ok"); System.out.println("b1="+b1.booleanValue()); System.out.println("b2="+b2.booleanValue()); } //执行结果 b1=true b2=false
-
方法:equals(Object obj);返回值:boolean;功能释义:当且仅当参数不是 null,而是一个与此对象一样,都表示同一个 Boolean 值的 boolean 对象时,才返回 true。
public static void main(String[] args) { Boolean b1 = new Boolean(true); Boolean b2 = new Boolean("true"); System.out.println("b1.equals(b2):"+b1.equals(b2)); } //执行结果 b1.equals(b2):true
-
方法:parseBoolean(String s);返回值:static boolean;功能释义:将字符串参数解析为 boolean 值。
示例:Boolean.parseBoolean("True") 返回 true。 示例:Boolean.parseBoolean("yes") 返回 false。
-
方法:toString();返回值:String;功能释义:返回表示该布尔值的 String 对象。
-
方法:valueOf(String s);返回值:static Boolean;功能释义:返回一个用指定的字符串表示值的 Boolean 值。
-
- 常量
- static Boolean final FALSE:对应基值 false 的 Boolean 对象。
- static Boolean final TRUE:对应基值 true 的 Boolean 对象。
- static Class final TYPE:表示基本类型 boolean 的 Class 对象。
- 举例:
21.4 Byte
- 构造方法
-
Byte(byte value):构造一个新分配的 Byte 对象,以表示指定的 byte 值。byte为8bit位数。int为32bit位数。
public static void main(String[] args) { Byte b = new Byte((byte) 1888888);//Java默认整数为是int类型的,所以要强转 String intBin = Integer.toBinaryString(1888888);//将整数转换为二进制 int byint = Integer.parseInt("01111000", 2);//截取二进制最后八位,再转换为十进制 System.out.println("inteBin="+intBin); System.out.println("byint="+byint); System.out.println("b="+b); } //执行结果 inte=111001101001001111000 byint=120 b=120
-
Byte(String s):构造一个新分配的 Byte 对象,以表示 String 参数所指示的 byte 值。
public static void main(String[] args) { Byte b = new Byte("111"); System.out.println("b="+b); } //执行结果 b=111
注意:只能输入数字,且只能是-128-127之间,否则会抛出NumberFormatException异常。因为方法会认为是十进制的数。
-
- 常用方法
- 方法:byteValue();返回值:byte;功能释义:作为一个 byte 返回此 Byte 的值。
- 方法:compareTo(Byte anotherByte);返回值:int;功能释义:在数字上比较两个 Byte 对象。
- 方法:doubleValue();返回值:double;功能释义:作为一个 double 返回此 Byte 的值。
- 方法:intValue();返回值:int;功能释义:作为一个 int 返回此 Byte 的值。
- 方法:parseByte(String s);返回值:static byte;功能释义:将 string 参数解析为有符号的十进制 byte。
- 方法:toString();返回值:String;功能释义:返回表示此 Byte 的值的 String 对象。
- 方法:valueOf(String s);返回值:static Byte;功能释义:返回一个保持指定 String 所给出的值的 Byte 对象。
- 方法:equals(Object obj);返回值:boolean;功能释义:将此对象与指定对象比较。
- 常量
- public static final byte MIN_VALUE = -128;一个常量,保存 byte 类型可取的最大值,即 27-1。
- public static final byte MAX_VALUE = 127;一个常量,保存 byte 类型可取的最小值,即 -27。
- public static final Class TYPE = (Class) Class.getPrimitiveClass(“byte”);表示基本类型 byte 的 Class 实例。
- public static final int SIZE = 8;用于以二进制补码形式表示 byte 值的位数。
21.5 Character
- Character类:Character类在对象中包装一个基本类型为char的值。一个Character类型对象包含类型为char的单个字段。该类提供了几种方法,以确定字符的类别(小写字母、数字等),并将字符从大写转换成小写,反之亦然。
- 构造方法
-
Character(char value):构造一个新分配的 Character 对象,用以表示指定的 char 值。一旦Character类被创建,它包含的数值就不能改变了。
Character c = new Character('你');
-
- 常用方法
-
方法:charValue();返回值:char;功能释义:返回此 Character 对象的值。
-
方法:compareTo(Character anotherCharacter);返回值:int;功能释义:根据数字比较两个 Character 对象。
//先转化成阿斯克吗中的数字,然后比较,那要这个数减去要比较的数,得出结果! Character character1 = new Character('c');//99 Character character2 = new Character('a');//97 Character character3 = new Character('c');//99 Character character4 = new Character('d');//100 System.out.println("character="+character1); System.out.println(character1.compareTo(character2)); System.out.println(character1.compareTo(character3)); System.out.println(character1.compareTo(character4)); //执行结果 character=c 2 0 -1
-
方法:equals(Object obj);返回值:boolean;功能释义:将此对象与指定对象比较。
-
方法:toUpperCase(char ch);返回值:static char;功能释义:将字符参数转换为大写。
-
方法:toLowerCase(char ch);返回值:static char;功能释义:将字符参数转换为小写。
-
方法:toString();返回值:String;功能释义:返回表示此 Character 值的 String 对象。
-
方法:isUpperCase(char ch);返回值:static boolean;功能释义:确定指定字符是否为大写字母。
-
方法:isLowerCase(char ch);返回值:static boolean;功能释义:确定指定字符是否为小写字母。
-
方法:isLetter(char ch);返回值:static boolean;功能释义:确定指定字符是否为字母。
-
方法:isDigit(char ch);返回值:static boolean;功能释义:确定指定字符是否为数字。
-
方法:isWhitespace(char ch);返回值:static boolean;功能释义:确定指定字符依据 Java 标准是否为空白字符。
-
方法:valueOf(char c);返回值:static Character;功能释义:返回一个表示指定 char 值的 Character 实例。
-
方法:isLetterOrDigit(char ch);返回值:static boolean;功能释义:确定指定字符是否为字母或数字。
//判断是否为一个字母 char c1 = '1'; if (((byte)c1>=65 && (byte)c1<=90) || ((byte)c1>=97 && (byte)c1<=122) ) { System.out.println("是一个字母"); } //isLetter(char ch)判断【一个】字符是否为字母 if (Character.isLetter(c1)) { System.out.println("是一个字母2"); } //isDigit(char ch)判断【一个】字符是否为数字 if (Character.isDigit(c1)) { System.out.println("是一个数字"); } //isWhitespace(char ch) 确定指定字符依据 Java 标准是否为空白字符。 if (Character.isWhitespace(c1)) { System.out.println("是一个空白符"); } //执行结果 是一个数字
-
21.6 Double
- 构造方法
-
Double(double value):构造一个新分配的 Double 对象,它表示基本的 double 参数。
-
Double(String s):构造一个新分配的 Double 对象,表示用字符串表示的 double 类型的浮点值。
Double d = new Double(20.3); Double d2 = new Double("20.55");
注意:传入的字符串必须是数字型的,否则会抛出NumberFormatException异常。
-
- 常用方法
- 方法:byteValue();返回值:byte;功能释义:以 byte 形式返回此 Double 的值(通过强制转换为 byte)。
- 方法:compare(double d1, double d2);返回值:static int;功能释义:比较两个指定的 double 值。
- 方法:equals(Object obj);返回值:boolean;功能释义:将此对象与指定对象比较。
- 方法:intValue();返回值:int;功能释义:以 int 形式返回此 Double 的值(通过强制转换为 int 类型)。
- 方法:isNaN();返回值:boolean;功能释义:如果此 Double 值是非数字(NaN)值,则返回 true;否则返回 false。
- 方法:isNaN(double v);返回值:static boolean;功能释义: 如果指定的数是一个 NaN 值,则返回 true;否则返回 false。
- 方法:toString();返回值:String;功能释义:返回此 Double 对象的字符串表示形式。
- 方法:valueOf(String s);返回值:static Double;功能释义:返回保存用参数字符串 s 表示的 double 值的 Double 对象。
- 方法:doubleValue();返回值:double;功能释义:返回此 Double 对象的 double 值。
- 方法:longValue();返回值:long;功能释义:以 long 形式返回此 Double 的值(通过强制转换为 long 类型)。
- 方法:compareTo(Double anotherDouble);返回值:int;功能释义:对两个 Double 对象所表示的数值进行比较。
21.7 Number
- Number类:抽象类 Number 是 BigDecimal、BigInteger、Byte、Double、Float、Integer、Long 和 Short 类的父类。Number 的子类必须提供将表示的数值转换为 byte、double、float、int、long 和 short 的方法。Number类中的方法分别被Number的子类所实现,也就是说,在Number类的所有子类中都包含这些方法。
- 常用方法
- 方法:byteValue();返回值:byte;功能释义:以 byte 形式返回指定的数值。
- 方法:intValue();返回值:abstract int;功能释义:以 int 形式返回指定的数值。
- 方法:floatValue();返回值:abstract float;功能释义:以 float 形式返回指定的数值。
- 方法:shortValue();返回值:short;功能释义:以 short 形式返回指定的数值。
- 方法:longValue();返回值:abstract long;功能释义:以 long 形式返回指定的数值。
- 方法:doubleValue();返回值:abstract double;功能释义:以 double 形式返回指定的数值。
七、作业
- 定义两个Integer对象,it1与it2,比较两个Integer对象的值(注意使用对象与基本数据类型之间的转换):
- 如果it1比it2小,则计算他们的和。
- 如果it1与it2相等,则计算他们的乘积。
- 如果it1比it2大,则计算他们的差。
- 将十进制数字567,转换成二进制、八进制、十六进制。写出其过程。
- 将二进制数10111010,转换成十进制、八进制、十六进制。写出其过程。
- 将八进制数26354,转换成十进制、二进制、十六进制。写出其过程。
- 将十六进制数5f69d6f,转换成十进制、二进制、八进制。写出其过程。
- 定义一个char型数组,char c = {‘a’,‘T’,‘U’,‘你’,’ ‘,‘b’,‘9’,‘c’,’ ‘,‘6’,’&‘,‘我’,‘H’,’!'};统计其中有: 多少个字母,多少个数字,都少个特殊符号(查API寻找判断特殊符号的方法),多少个空白符,多少个大写字母,多少个小写字母。
- 定义一个基本数据类型,int a = 1827;将其转换成Integer对象。
- 如果it1与it2相等,则计算他们的乘积。
3. 如果it1比it2大,则计算他们的差。 - 将十进制数字567,转换成二进制、八进制、十六进制。写出其过程。
- 将二进制数10111010,转换成十进制、八进制、十六进制。写出其过程。
- 将八进制数26354,转换成十进制、二进制、十六进制。写出其过程。
- 将十六进制数5f69d6f,转换成十进制、二进制、八进制。写出其过程。
- 定义一个char型数组,char c = {‘a’,‘T’,‘U’,‘你’,’ ‘,‘b’,‘9’,‘c’,’ ‘,‘6’,’&‘,‘我’,‘H’,’!'};统计其中有: 多少个字母,多少个数字,都少个特殊符号(查API寻找判断特殊符号的方法),多少个空白符,多少个大写字母,多少个小写字母。
- 定义一个基本数据类型,int a = 1827;将其转换成Integer对象。
- 定义一个数字字符串,String str = “548965.36”;将其转化成基本数据类型与封装类。