Java面向对象编程进阶之包装类
Java面向对象编程进阶之包装类
- 一、为什么要使用包装类
- 二、掌握基本数据类型与包装类之间的转换
- 1、为什么需要转换?
- 2、如何转换?
- 三、String与基本数据类型、包装类之间的转换
- 1、案例
- 2、特别注意
一、为什么要使用包装类
为了使得基本类型的数据变量具备引用类型变量的特征(封装性、继承性、多态性),我们给各个基本数据类型的变量提供了对应的包装类。
二、掌握基本数据类型与包装类之间的转换
1、为什么需要转换?
一方面,在有些场景下,需要使用基本数据类型对应的包装类的对象。此时就需要将基本数据类型的变量转化为包装类的对象。比如:ArrayList的add(Object obj);Object类的equal(Object obj)
对于包装类来讲,既然我们使用的是对象,那么对象是不能进行加减乘除等运算。为了能够进行这些运算,就需要将包装类的对象转化为基本数据的对象
2、如何转换?
(装箱)基本数据类型——》包装类 1、使用包装类的构造器;2、(建议)调用包装类的valueOf(xxx, xx)
package com.wrapper;public class WrapperTest {/*基本数据类型——》包装类 1、使用包装类的构造器;2、(建议)调用包装类的valueOf(xxx, xx)*/public void test1() {int i1 = 10;Integer ii1 = new Integer(i1);System.out.println(ii1.toString()); //10float f1 = 12.3F;Float ff1 = new Float(f1); //12.3String s1 = "32.1";Float ff2 = new Float(s1); //32.1// String s2 = "abc";
// Float ff3 = new Float(s2); //报异常String s3 = "false";Boolean bb3 = new Boolean(s3); //falseString s4 = "False";Boolean bb4 = new Boolean(s4); //falseString s5 = "False123";Boolean bb5 = new Boolean(s5); //false//todo 推荐使用int i2 = 10;Integer ii2 = Integer.valueOf(i2);Boolean b2 = Boolean.valueOf(true);Float f2 = Float.valueOf(12.3F);}
}
(拆箱)包装类——》基本数据类型:调用包装类的xxxValue()
package com.wrapper;public class WrapperTest {//包装类——》基本数据类型public void test3(){}public void test2() {Integer ii1 = new Integer(10);int i1 = ii1.intValue();i1 = i1 + 1;Float ff1 = new Float(12.4F);float f1 = ff1.floatValue();Boolean bb2 = Boolean.valueOf(true);boolean b2 = bb2.booleanValue();}}class Account{boolean isFlag1;Boolean isFlag2;double balance1; //默认值 0.0Double balance2; //默认值 null
}
注意:原来使用基本数据类型变量的位置,改成包装类以后,对于成员变量来说,其默认值变化了!
jdk5.0新特性:自动装箱、自动拆箱。
package com.wrapper;public class WrapperTest {public void test3() {//todo 自动装箱:基本数据类型——》包装类int i1 = 10;Integer ii1 = i1; //自动装箱Integer ii2 = i1 + 1; //自动装箱Boolean bb1 = true;//todo 自动拆箱:包装类——》基本数据类型int i2 = ii1;boolean b1 = bb1;}
}
三、String与基本数据类型、包装类之间的转换
基本数据类型、包装类——》String类型:
- 调用String的重载的静态方法valueOf(xxx,xx);
- 基本数据类型的变量+“”
package com.wrapper;public class WeapperTest1 {/*基本数据类型——》包装类——》调用String的重载的静态方法valueOf(xxx,xx);基本数据类型的变量+“”包装类——》基本数据类型*/public static void main(String[] args) {WeapperTest1 w = new WeapperTest1();w.test1();}public void test1() {//方式1int i1 = 10;String str1 = String.valueOf(i1);System.out.println(str1); // "10"boolean b1 = true;String str2 = String.valueOf(b1);System.out.println(str2);// 方式2String str4 = i1 + "";String str5 = b1 + "";}
}
String类型——》基本数据类型、调用包装类的静态方法:parseXxx()
package com.wrapper;public class WeapperTest1 {/*基本数据类型——》包装类——》调用String的重载的静态方法valueOf(xxx,xx);基本数据类型的变量+“”包装类——》基本数据类型*/public static void main(String[] args) {WeapperTest1 w = new WeapperTest1();w.test1();w.test2();}//String类型——》基本数据类型、调用包装类的静态方法:parseXxx()public void test2(){String s1 = "123";int i1 = Integer.parseInt(s1);System.out.println(i1+10);String s2 = "true";Boolean b2 = Boolean.parseBoolean(s2);System.out.println(b2);//特别的
// String s3 = "123a";
// int i2 = Integer.parseInt(s3); //报错}}
1、案例
利用Vector代替数组处理:从键盘读入学生成绩(以负数代表输入结束),找出最高分,并输出学生成绩等级。提示:数组一旦创建,长度就固定不变,所以在创建数组前就需要知道它的长度。而向量类java.util.Vector可以根据需要动态伸缩。
1、创建Vector对象:Vector v=new Vector();
2、给向量添加元素:v.addElement(Object obj);//obj必须是对象
3、职出向量中的元素:Object obj=v.elementAt(0);注意第一个元素的下标是0,返回值是Object类型的。
4、计算向量的长度:v.size();
5、若与最高分相差10分内:A等;20分内:B等;30分内:C等;其它:D等
package com.wrapper.exer1;import java.util.Scanner;
import java.util.Vector;/*** package:com.wrapper.exer1** @Author jimmy-yan* @Create 2024/11/14 15:17*/
public class ScoreTest {public static void main(String[] args) {// 1、创建Vector对象 Vector v=new Vector();Vector v = new Vector();Scanner scanner = new Scanner(System.in);int maxScore = 0; //记录最高分// 2、从键盘获取多个学生成绩,存放到v中,输入负数代表结束while (true) {System.out.println("请输入学生成绩:");int intScore = scanner.nextInt();if (intScore < 0) {break;}//装箱,int——》Integer对象Integer score = Integer.valueOf(intScore);//添加学生成绩到容器v中v.addElement(score);//todo 自动装箱v.addElement(intScore);//3、获取学生成绩的最大值if (maxScore < intScore) {maxScore = intScore;}}//4、依次获取v中的每个学生成绩,与最高分进行比较,获取学生成绩并且输出for (int i = 0; i < v.size(); i++) {Object objScore = v.elementAt(i);
// Integer integerScore = (Integer) objScore;
// //拆箱
// int score = integerScore.intValue();//自动拆箱int score = (Integer) objScore;char grade = ' ';if (maxScore - score <= 10) {grade = 'A';} else if (maxScore - score <= 20) {grade = 'B';} else {grade = 'D';}System.out.println("student" + i + "score is" + score + "grade is " + grade);}scanner.close();}
}