官术网_书友最值得收藏!

3.2 數(shù)據(jù)類型

知識點(diǎn)講解:

Java中的數(shù)據(jù)類型可以分為簡單數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)類型兩種。簡單數(shù)據(jù)類型是Java的基礎(chǔ)類型,包括整數(shù)類型、浮點(diǎn)類型、字符類型和布爾類型,這些是本章將重點(diǎn)講解的內(nèi)容。復(fù)合數(shù)據(jù)類型則由簡單數(shù)據(jù)類型組成,是用戶根據(jù)自己的需要定義并實(shí)現(xiàn)其意圖的類型,包括類、接口、數(shù)組。當(dāng)然,為了便于讀者快速理解,也可以將Java中的數(shù)據(jù)類型分成更簡單明了的兩大類,即基本類型和引用類型。

3.2.1 為什么要使用數(shù)據(jù)類型

使用數(shù)據(jù)類型的根本原因是項(xiàng)目的需要。對程序員來講,如果一個變量可以是任何形式的值,那么對該變量的操作就很難定義了,而且也很容易出錯。通過引入數(shù)據(jù)類型,我們可以人為地限制變量的可操作范圍,從而降低操作難度、降低出錯率、提高計算機(jī)內(nèi)存的使用率。項(xiàng)目中勢必要處理整數(shù)、小數(shù)、英文字符、中文字符等元素,這些元素在計算機(jī)中都是用不同類型的數(shù)據(jù)表示的,每種類型的計算機(jī)都會分配指定大小的內(nèi)存來進(jìn)行處理。例如,遇到short類型,計算機(jī)會分配占2字節(jié)的內(nèi)存來處理;遇到int類型,會分配4字節(jié)的內(nèi)存來處理。如果不引入數(shù)據(jù)類型的概念,要處理整數(shù)和英文字符等不同類型的元素,計算機(jī)該怎么辦?計算機(jī)只能設(shè)置一塊固定大小的內(nèi)存來處理各種元素,而且假如設(shè)置的太小,例如2字節(jié),還可能會發(fā)生因?yàn)樘《荒芴幚淼那闆r。如果設(shè)置的太大,例如1000字節(jié),則可能會發(fā)生因?yàn)樘蠖^度消耗內(nèi)存的情況。

Java數(shù)據(jù)類型的具體分類如圖3-3所示。

圖3-3 Java數(shù)據(jù)類型的分類

注意:實(shí)際上,Java中還存在另外一種基本類型void,它也有對應(yīng)的包裝類java.lang.Void,不過我們無法直接對它進(jìn)行操作。有關(guān)包的知識,將在本書后面的內(nèi)容中進(jìn)行講解。

3.2.2 簡單數(shù)據(jù)類型的取值范圍

基本數(shù)據(jù)類型是本章的重點(diǎn),Java中的基本數(shù)據(jù)類型共有三大類,8個品種,分別是字符類型char,布爾類型boolean以及數(shù)值類型byte、short、int、long、float、double。數(shù)值類型又可以分為整數(shù)類型byte、short、int、long和浮點(diǎn)類型float、double。Java中的數(shù)值類型不存在無符號的情況,它們的取值范圍是固定的,不會隨著硬件環(huán)境或操作系統(tǒng)的改變而改變。

Java中的簡單數(shù)據(jù)類型是最簡單的,主要由byte、short、int、long、char、float、double和boolean組成。在Java語言中,這8種基本類型的具體取值范圍如下所示。

? byte:8位,1字節(jié),最大數(shù)據(jù)存儲量是255,數(shù)值范圍是-128~127。

? short:16位,2字節(jié),最大數(shù)據(jù)存儲量是65536,數(shù)值范圍是-32768~32767。

? int:32位,4字節(jié),最大數(shù)據(jù)存儲容量是232-1,數(shù)值范圍是-231~231-1。

? long:64位,8字節(jié),最大數(shù)據(jù)存儲容量是264-1,數(shù)值范圍是-263~263-1。

? float:32位,4字節(jié),數(shù)值范圍是3.4e-45~1.4e38,直接賦值時必須在數(shù)字后加上f或F。

? double:64位,8字節(jié),數(shù)值范圍在4.9e-324~1.8e308,賦值時可以加d或D,也可以不加。

? boolean:只有true和false兩個取值。

? char:16位,2字節(jié),存儲Unicode碼,用單引號賦值。

Java決定了每種簡單類型的大小,這些大小并不隨機(jī)器結(jié)構(gòu)的變化而變化,這種大小的不可更改正是Java程序具有很強(qiáng)移植能力的原因之一。

3.2.3 字符型

在Java程序中,存儲字符的數(shù)據(jù)類型是字符型,用char表示。字符型通常用于表示單個字符,字符常量必須使用單引號“'”括起來。Java語言使用16位的Unicode編碼集作為編碼方式,而Unicode被設(shè)計成支持世界上所有書面語言的字符,包括中文字符,所以Java程序支持各種語言的字符。

在Java程序中,字符型常量有如下3種表示形式。

? 直接通過單個字符來指定字符常量,例如’A' '9’和’0’等。

? 通過轉(zhuǎn)義字符表示特殊字符常量,例如’\n' '\f’等。

? 直接使用Unicode值來表示字符常量,格式是’\uXXXX',其中XXXX代表一個十六進(jìn)制整數(shù)。

實(shí)例3-4

輸出字符型變量的值

源碼路徑:daima\3\Zifu.java

實(shí)例文件Zifu.java的主要實(shí)現(xiàn)代碼如下所示。

①public class Zifu 
②{
③   public static void main(String args[])
④   {
⑤      char ch1='\u0001';         //賦值ch1
⑥      char ch2='\u0394';         //賦值ch2
⑦      char ch3='\uffff';         //賦值ch2
⑧      System.out.println(ch1);   //輸出ch1
⑨      System.out.println(ch2);   //輸出ch2
⑩      System.out.println(ch3);   //輸出ch2
?   }
? }

拓展范例及視頻二維碼

范例3-4-01:輸出文本字符

源碼路徑:演練范例\3-4-01\

范例3-4-02:自動類型轉(zhuǎn)換/強(qiáng)制類型轉(zhuǎn)換

源碼路徑:演練范例\3-4-02\

行①定義一個類,名為Zifu,這個文件的名字必須和類相同,即Zifu.java。

行②④??是大括號分隔符。

行⑤⑥⑦分別賦值給3個char類型的變量ch1、ch2和ch3。

行⑧⑨⑩分別使用println()函數(shù)輸出變量ch1、ch2和ch3的值。

執(zhí)行后的結(jié)果如圖3-4所示。

圖3-4 執(zhí)行結(jié)果

上述實(shí)例的執(zhí)行結(jié)果是一些圖形,為什么呢?這是使用Unicode碼表示的結(jié)果。Unicode定義的國際化字符集能表示到今天為止的所有字符集,如拉丁文、希臘語等幾十種語言,大部分字符我們是看不懂的,用戶不需要掌握。讀者請注意,在執(zhí)行結(jié)果處有一個問號,它有可能是真的問號,也有可能是不能顯示的符號。但是為了正常地輸出這些符號,該怎么處理?Java提供了轉(zhuǎn)義字符,以“\”開頭,十六進(jìn)制下以“\”和“U”字開頭,后面跟著十六進(jìn)制數(shù)。常用的轉(zhuǎn)義字符如表3-1所示。

表3-1 轉(zhuǎn)義字符

3.2.4 整型

整型(int)是有符號的32位整數(shù)。整型用在數(shù)組、控制語句等多個地方,Java系統(tǒng)會把byte和short自動提升為整型。

int是最常用的整數(shù)類型,通常情況下,Java整數(shù)常量默認(rèn)就是int類型。對于初學(xué)者來說,需要特別注意如下兩點(diǎn)。

(1)如果直接將一個較小的整數(shù)常量(在byte或short類型的數(shù)值范圍內(nèi))賦給一個byte或short變量,系統(tǒng)會自動把這個整數(shù)常量當(dāng)成byte或short類型來處理。

(2)使用一個巨大的整數(shù)常量(超出int類型的數(shù)值表示范圍)時,Java不會自動把這個整數(shù)常量當(dāng)成long類型來處理。如果希望Java系統(tǒng)把一個整數(shù)常量當(dāng)成long類型來處理,應(yīng)在這個整數(shù)常量的后面添加l或L作為后綴。通常推薦使用L,因?yàn)樽帜竘很容易跟數(shù)字1混淆。

實(shí)例3-5

通過整型計算正方形和三角形的面積

源碼路徑:daima\3\zheng.java

實(shí)例文件zheng.java的主要實(shí)現(xiàn)代碼如下所示。

            ①public static void main(String args[]){
            //開始計算正方形面積
            ②  int b=7;                //賦值
            ③  int L=b*4;              //賦值
            ④  int s=b*b;              //賦值
            ⑤  System.out.println("正方形的周長為"+L);
            //輸出周長
            ⑥  System.out.println("正方形的面積為"+s);
            //輸出面積
            ⑦  //開始計算三角形面積
            ⑧  int a3=5, b3=7;          //賦值
            ⑨  int s3=a3*b3/2;          //計算面積
            ⑩  System.out.println("三角形的面積為"+s3);     //輸出面積
            }

拓展范例及視頻二維碼

范例3-5-01:演示int類型的提升處理

源碼路徑:演練范例\3-5-01\

范例3-5-02:自動提升數(shù)據(jù)類型

源碼路徑:演練范例\3-5-02\

行①是Java程序的入口函數(shù)main()。

行②③④分別定義3個int類型的變量b、L和s。其中變量b的初始值是7,變量L的初始值是變量b的值乘以4,變量s的初始值是變量b的平方。

行⑤⑥分別使用println()函數(shù)輸出變量L和s的值。

行⑧分別定義int類型變量a3的初始值為5,定義int類型變量b3的初始值為7。

行⑨定義int類型變量s3的初始值為變量a3和b3的積,然后除以2。

行⑩使用println()函數(shù)輸出變量s3的值。

執(zhí)行后的結(jié)果如圖3-5所示。其實(shí)我們可以把一個較小的整數(shù)常量(在int類型的數(shù)值表示范圍以內(nèi))直接賦給一個long類型的變量,這并不因?yàn)镴ava會把這個較小的整數(shù)常量當(dāng)成long類型來處理。Java依然會把這個整數(shù)常量當(dāng)成int類型來處理,只是這個int類型變量的值會自動將類型轉(zhuǎn)換為long類型。

圖3-5 執(zhí)行結(jié)果

3.2.5 浮點(diǎn)型

整型數(shù)據(jù)在計算機(jī)中肯定是不夠用的,這時候就出現(xiàn)了浮點(diǎn)型數(shù)據(jù)。浮點(diǎn)型數(shù)據(jù)用來表示Java中的浮點(diǎn)數(shù),浮點(diǎn)型數(shù)據(jù)表示有小數(shù)部分的數(shù)字,總共有兩種類型:單精度浮點(diǎn)型(float)和雙精度浮點(diǎn)型(double),它們的取值范圍比整型大許多,下面對其進(jìn)行講解。

1.單精度浮點(diǎn)型—float

單精度浮點(diǎn)型是專指占用32位存儲空間的單精度數(shù)據(jù)類型,在編程過程中,當(dāng)需要小數(shù)部分且對精度要求不高時,一般使用單精度浮點(diǎn)型,這種數(shù)據(jù)類型很少用,不詳細(xì)講解。

2.雙精度浮點(diǎn)型—double

雙精度浮點(diǎn)型占用64位存儲空間,在計算中占有很大的比重,能夠保證數(shù)值的準(zhǔn)確性。

double類型代表雙精度浮點(diǎn)數(shù),float類型代表單精度浮點(diǎn)數(shù)。double類型的數(shù)值占8字節(jié),64位;float類型的數(shù)值占4字節(jié),32位。更詳細(xì)地說,Java語言的浮點(diǎn)數(shù)有兩種表示形式。

(1)十進(jìn)制形式:這種形式就是平常簡單的浮點(diǎn)數(shù),例如5.12、512.0、0.512。浮點(diǎn)數(shù)必須包含一個小數(shù)點(diǎn),否則會被當(dāng)成int類型處理。

(2)科學(xué)記數(shù)法形式:例如5.12e2(即5.12×102)或5.12E2(也是5.12×102)。必須指出的是,只有浮點(diǎn)類型的數(shù)值才可以使用科學(xué)記數(shù)形式表示。例如,51200是int類型的值,但512E2則是浮點(diǎn)型的值。

Java語言的浮點(diǎn)型默認(rèn)是double型,如果希望Java把一個浮點(diǎn)型數(shù)值當(dāng)成float型處理,應(yīng)該在這個浮點(diǎn)型數(shù)值的后面加上f或F。例如:“5.12”代表的是一個double型常量,它占用64位的內(nèi)存空間;5.12f或5.12F才表示一個float型常量,它占用32位的內(nèi)存空間。當(dāng)然,也可以在一個浮點(diǎn)數(shù)的后面添加d或D后綴,以強(qiáng)制指定double類型,但通常沒必要。

由于Java浮點(diǎn)數(shù)使用二進(jìn)制數(shù)據(jù)的科學(xué)記數(shù)法來表示浮點(diǎn)數(shù),因此可能不能精確表示一個浮點(diǎn)數(shù)。例如,我們把5.2345556f賦給一個float類型的變量,接著輸出這個變量時,會看到這個變量的值已經(jīng)發(fā)生改變。double類型的浮點(diǎn)數(shù)則比float類型的浮點(diǎn)數(shù)更加精確。即使浮點(diǎn)數(shù)的精度足夠高(小數(shù)點(diǎn)后的數(shù)字很多),也依然可能發(fā)生這種情況。如果開發(fā)者需要精確保存一個浮點(diǎn)數(shù),可以考慮使用BigDecimal類。

實(shí)例3-6

使用浮點(diǎn)型計算圓的面積

源碼路徑:daima\3\Syuan.java

實(shí)例文件Syuan.java的主要實(shí)現(xiàn)代碼如下所示。

        public class Syuan{
            public static void main(String args[]){
        ①        double r=45.0324;            //賦值
        ②        final double PI=3.1415926; //賦值
        ③        double area=PI*r*r;          //面積計算
        ④        System.out.println("圓的面積是: S="+area);
        //輸出面積
            }
        }

拓展范例及視頻二維碼

范例3-6-01:演示不同浮點(diǎn)型的用法

源碼路徑:演練范例\3-6-01\

范例3-6-02:實(shí)現(xiàn)自動類型轉(zhuǎn)換

源碼路徑:演練范例\3-6-02\

行①定義一個double類型的變量r,表示圓的半徑,設(shè)置初始值是45.0324。

行②定義一個double類型的變量PI,設(shè)置初始值是3.1415926。這里使用關(guān)鍵字final修飾變量PI,在Java程序中,我們用final修飾符來表示常量,變量一旦賦值后就無法改變。所以此處的PI為常量,值永遠(yuǎn)是3.1415926。

行③定義一個double類型的變量area,表示圓的面積,設(shè)置其值是變量(其實(shí)是常量)PI的值乘以變量r的平方。

行④使用println()函數(shù)輸出變量area的值。

執(zhí)行后的結(jié)果如圖3-6所示。

圖3-6 使用浮點(diǎn)型計算圓的面積

3.2.6 布爾型

布爾型是一種表示邏輯值的簡單類型,它的值只能是真或假這兩個值中的一個。它是所有諸如a<b這樣的關(guān)系運(yùn)算的返回類型。Java中的布爾型對應(yīng)只有一種——boolean類型,用于表示邏輯上的“真”或“假”。boolean類型的值只能是true或false,不能用0或非0來代表。布爾類型在if、for等控制語句的條件表達(dá)式中比較常見,在Java語言中使用boolean型變量的控制流程主要有下面幾種。

? if條件控制語句

? while循環(huán)控制語句

? do循環(huán)控制語句

? for循環(huán)控制語句

實(shí)例3-7

復(fù)制布爾型變量并輸出結(jié)果

源碼路徑:daima\3\Bugu.java

實(shí)例文件Bugu.java的主要實(shí)現(xiàn)代碼如下所示。

  public static void main(String args[]) {
  ①          boolean b;               //定義變量b
  ②          b = false;               //賦值
  ③          System.out.println("b is " + b);
  ④          b = true;                //賦值
  ⑤            System.out.println("b is " + b);
                //輸出b的值
                //布爾值可以控制if語句的運(yùn)行
  ⑥            if(b) System.out.println("This is executed.");
  ⑦                    b = false;     //賦值
                //布爾值可以控制if語句的運(yùn)行
  ⑧            if(b) System.out.println("This is not executed.");
  ⑨                    System.out.println("10 > 9 is " + (10 > 9));
  }

拓展范例及視頻二維碼

范例3-7-01:定義兩個布爾型變量并賦值

源碼路徑:演練范例\3-7-01\

范例3-7-02:實(shí)現(xiàn)強(qiáng)制類型轉(zhuǎn)換

源碼路徑:演練范例\3-7-02\

行①定義一個boolean類型的變量b。

行②設(shè)置變量b的初始值是false。

行③⑤使用println()函數(shù)輸出變量b的值。

行④重新設(shè)置變量b的值是true。

行⑥在Java程序中,布爾值可以控制if語句的運(yùn)行。因?yàn)楸拘兄凶兞縝的值是true,所以會運(yùn)行if(b)后面的輸出語句,在后面使用println()函數(shù)輸出文本“This is executed.”。

行⑦重新設(shè)置變量b的值是false。

在行⑧中,因?yàn)楸拘兄凶兞縝的值是false,所以不會運(yùn)行if(b)后面的println()輸出語句。

行⑨使用println()函數(shù)輸出“10 > 9”的運(yùn)算結(jié)果。

執(zhí)行后的結(jié)果如圖3-7所示。

圖3-7 使用布爾型變量

主站蜘蛛池模板: 广汉市| 西和县| 开封市| 阿荣旗| 龙海市| 肇庆市| 辽宁省| 始兴县| 定西市| 虹口区| 莱西市| 正定县| 克什克腾旗| 邛崃市| 大邑县| 桐乡市| 永定县| 商河县| 泽普县| 南川市| 微山县| 阜南县| 嫩江县| 昔阳县| 尉犁县| 涪陵区| 揭东县| 乾安县| 巴林右旗| 汉寿县| 四平市| 山西省| 合阳县| 集贤县| 红原县| 焉耆| 玛纳斯县| 彭阳县| 公安县| 和田市| 藁城市|