摘 要:本文屬于教學教法的探討類文章,主要是借助圖示法來揭示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在線幫助文檔.http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/index.html.
[2]Bruce Eckel著.侯捷譯.Java編程思想(第二版).機械工業出版社,2002.9.