摘 要:本文属于教学教法的探讨类文章,主要是借助图示法来揭示Java类型转换中的一些规律和方法。该方法清晰直观的显示了Java中类型转中的不同情形。通过实践,教学效果良好。
关键词:图示教学法 Java 类型转换
图示教学法是以图形、图象或表格为主要形式,揭示事物现象或本质特征,激发学生思维,使其更好地掌握有关知识,把握事物发展规律,加快教学进程的一种教学方法。这种教学法用形象化的图形,图象或表格的形式讲授基本概念,揭示事物之间的逻辑联系,其实质是使知识形象化,抽象理论具体化,零碎知识系列化。
Java类型转换涉及的类型较多,转换方法灵活多变。一般的讲解授课,学生总是感觉东西多而且乱。而图示教学法直观明了,便于学生理解和掌握知识。
我们知道:Java的数据类型分为三大类,即布尔型、字符型和数值型,而其中数值型又分为整型和浮点型;相对于数据类型,Java的变量类型为布尔型boolean;字符型char;整型byte、short、int、long;浮点型float、double。其中四种整型变量和两种浮点型变量分别对应于不同的精度和范围。此外,我们还经常用到两类变量,即String和StringBuffer。对于这些变量类型之间的相互转换在我们编程中经常要用到。本文将通过图示法对Java类型的转换中做了一些总结和探讨。
下面图1、图2和图3是转换图,我们分别称之为“三角转换图”、“星形转换图”和“矩形转换图”。“三角转换图”主要显示了StringBuffer、String、Integer和int之间的类似三角形的转换关系。“星形转换图”显示了日期Date类型和String类型、int类型和long类型之间的转换关系。而“矩形转换图”则显示了byte、short、char、int、long、float、double之间的转换关系。
在图1中,总共涉及到8种转换,每种转换分别举例介绍如下:
(1)由Integer类型转换到int类型,可以使用Integer类型的方法intValue()。假设x是Integer类型的变量,则x.intValue()转换为int型。
(2)由int转换为Integer型,直接利用Integer的构造函数,new Integer(x),这里假设x为整型变量。如Integer i=new Integer(3)。
(3)由int型转为String,只需要int与空串相加,如String a=“”+9;或者通过String类的方法valueOf(),比如String.valueOf(12.345),将放回字符串“12.345”。
(4)数字字符串转换为int型,只需要调用Integer类的parseInt()方法。如int i=Integer.parseInt(“123”)。
(5)Integer转换为String,直接利用其toString()方法。
(6)String转换为Integer类,需要调用Integer类的valueOf()方法。如Integer x=Integer.valueOf(“123”)。
(7)直接调用StringBuffer类的构造函数直接可以将String变为StringBuffer类,如StringBuffer sb=new StringBuffer(“123”)。
(8)将StringBuffer类变为String类,需要调用StringBuffer类的toString()方法,如str是StringBuffer类型的变量,str.toString()将把str转换为String类型;也可以利用类StringBuffer的substring方法,该方法是提取字串的函数,当然也可以拿来生成StringBuffer类型变量对应的String变量。如将StringBuffer类型的变量sb转换为对应的String类型数据,可以这样转换:String s=StringBuffer.subString(0,sb.length())。
这里有几点要注意:
1. 上面设计到的String必须是数字组成的字符串,否则会发生数据转换异常。
2. 除了上面介绍的基本的转换方法之外,还可以在此基础上变化出多种转换。比如把String转换成Integer类型,可以直接按照(6)的方法来转换,也可以经由int类型为中间桥梁做转换,通过(4)、(2)来达到转换的目的。Integer x=new Integer(Integer.parseInt(“123”))。再比如从int转换为String类型,除了上面直接的转换方法之外,还可以先把int转为Integer,然后调用Integer类的toString()方法。如String a=new Integer(8).toString()。
3. 通过前面“三角形转换”的介绍,我们再进一步讨论下包装类和对应的简单类型之间的转换:在讨论之前,简单了解一下Java的包装类。所谓包装类,就是可以直接将简单类型的变量表示为一个类,在执行变量类型的相互转换时,我们会大量使用这些包装类。Java共有六个包装类,分别是Boolean、Character、Integer、Long、Float和Double,从字面上我们就可以看出它们分别对应于boolean、char、int、long、float和double在进行简单数据类型之间的转换(自动转换或强制转换)时,总是可以利用包装类进行中间过渡。一般情况下,首先声明一个变量,然后生成一个对应的包装类,就可以利用包装类的各种方法进行类型转换了。例如:例1,当希望把float型转换为double型时:float f1=100.00f;Float F1=new float(f1);Double d1=F1.doubleValue();//F1.doubleValue()为Float类的返回double值型的方法。
当希望把double型转换为int型时:double d1=100.00;Double D1=new Double(d1);int i1=D1.intValue();
当希望把int型转换为double型时,自动转换:int i1=200;double d1=i1;
简单类型的变量转换为相应的包装类,可以利用包装类的构造函数。即:Boolean(boolean value)、Character(char value)、Integer(int value)、Long(long value)、Float(float value)、Double(double value) 。
而在各个包装类中,总有形为××Value()的方法,来得到其对应的简单类型数据。利用这种方法,也可以实现不同数值型变量间的转换,例如,对于一个双精度实型类,intValue()可以得到其对应的整型变量,而doubleValue()可以得到其对应的双精度实型变量。
4. StringBuffer、String和char也可以构成另外一个三角形转换。char类型经过String.valueOf(char c)方法可以转换为String类型,而通过String类型中的charArray()方法可以将字符串转换为字符数组。我们还可以通过StringBuffer的charAt方法,获取StringBuffer某个字符,或者通过StringBuffer的append(char ch)方法使char类型转换为StringBuffer类型。
Date类与其它数据类型的相互转换,见图2。
整型和Date类之间并不存在直接的对应关系,只是你可以使用int型为分别表示年、月、日、时、分、秒,这样就在两者之间建立了一个对应关系,在作这种转换时,你可以使用Date类构造函数的三种形式:Date(int year,int month,int date):以int型表示年、月、日;Date(int year,int month,int date,int hrs,int min):以int型表示年、月、日、时、分;Date(int year,int month,int date,int hrs,int min,int sec):以int型表示年、月、日、时、分、秒。在长整型和Date类之间有一个很有趣的对应关系,就是将一个时间表示为距离格林尼治标准时间1970年1月1日0时0分0秒的毫秒数。对于这种对应关系,Date类也有其相应的构造函数:Date(long date)
获取Date类中的年、月、日、时、分、秒以及星期你可以使用Date类的getYear()、getMonth()、getDate()、getHours()、getMinutes()、getSeconds()、getDay()方法,你也可以将其理解为将Date类转换成int。而Date类的getTime()方法可以得到我们前面所说的一个时间对应的长整型数,与包装类一样,Date类也有一个toString()方法可以将其转换为String类。
在图2中,主要涉及强制类型转换之间的情况,共7种数据类型之间的转换。每种类型下面的数字,表示该类型占用的字节数。比如float类型下面有个数字4,表示float占用4个字节。那么,类型按照实体箭头所示的方向,是由低级数据类型往高级数据类型作转换,或者绝大部分是由占用字节位数少的数据类型向占用位数多的类型转换,这种类型转换称为自动类型转换。而虚线箭头表示的是由占用字节位数较高的类型向占用字节位数较少的类型转换,这时进行的是强制类型转换。
经过教学实践,我们发现教学效果良好,学生们可以很清晰地看到其中内在的联系,而且有助于学生的理解和记忆。
参考文献:
[1]JDK在线帮助文档.
https://gceclub.省略/Java_Docs/html/zh_CN/api/index.html.
[2]Bruce Eckel著.侯捷译.Java编程思想(第二版).机械工业出版社,2002.9.