變量
變量是利用聲明的方式陶夜,將內(nèi)存中的某個(gè)塊保留下來(lái)以供程序使用凛驮。可以聲明為塊記載的數(shù)據(jù)類(lèi)型為整型条辟、字符型黔夭、浮點(diǎn)型或是其他數(shù)據(jù)類(lèi)型,作為變量的保存之用羽嫡。
Java 的數(shù)據(jù)類(lèi)型可分為原始數(shù)據(jù)類(lèi)型與引用數(shù)據(jù)類(lèi)型本姥。
原始數(shù)據(jù)類(lèi)型也稱(chēng)為基本數(shù)據(jù)類(lèi)型,它們包括了最基本的 boolean杭棵、 byte婚惫、 char、short、 int先舷、 long艰管、 float 與 double 等類(lèi)型圆裕。
另一種數(shù)據(jù)類(lèi)型為引用數(shù)據(jù)類(lèi)型娘赴,它是以一種特殊的方式指向變量的實(shí)體,這種機(jī)制類(lèi)似于 C / C++的指針舔糖。這類(lèi)的變量在聲明時(shí)是不會(huì)分配內(nèi)存的尔破,必須另外進(jìn)行開(kāi)辟內(nèi)存空間的操作街图,如字符串與數(shù)組均屬于這種數(shù)據(jù)類(lèi)型。
聲明一個(gè)變量時(shí)懒构,編譯程序會(huì)在內(nèi)存里開(kāi)辟一塊足以容納此變量的內(nèi)存空間給它餐济。不管變量的值如何改變,都永遠(yuǎn)使用相同的內(nèi)存空間胆剧。因此絮姆,善用變量將會(huì)是一種節(jié)省內(nèi)存的方式。
常量與變量
//聲明Demo2類(lèi)
public class Demo2
{
public static void main(String args[])
{
int num; //聲明一個(gè)整形變量num
num = 3; //將整形變量賦值為3
//在屏幕輸出變量,用“+”連接
System.out.println("這是數(shù)字"+num);
System.out.println("我有"+num+"本書(shū)秩霍!");
}
}
在上面代碼中篙悯,num為整形變量將常量3賦值給它。在程序進(jìn)行的過(guò)程中铃绒,可以為變量重新賦值鸽照,也可以使用已經(jīng)聲明過(guò)的變量。
數(shù)據(jù)類(lèi)型
Java 的變量類(lèi)型
在 Java 中規(guī)定了八種基本數(shù)據(jù)類(lèi)型變量來(lái)存儲(chǔ)整數(shù)颠悬、浮點(diǎn)數(shù)矮燎、字符和布爾值。如下圖所示:
接口就是抽象類(lèi)(abstract )赔癌,接口本身 也是一種抽象類(lèi)诞外,實(shí)現(xiàn)接口的類(lèi) 叫做實(shí)現(xiàn)類(lèi)
java的基本數(shù)據(jù)類(lèi)型:
整數(shù)類(lèi)型
Java 中,整數(shù)數(shù)據(jù)類(lèi)型可以分為 long灾票、 int峡谊、 short 及 byte 四種:
long 為 64 位,也就是8 個(gè)字節(jié)(bytes)刊苍,可表示范圍為-9223372036854775808 到9223372036854775807既们;
int 為 32 位,也就是 4 個(gè)字節(jié)班缰,表示范圍為-2147483648 到 2147483647贤壁;
若是數(shù)據(jù)值的范圍在-32768 到 32767 之間時(shí),可以聲明為 short(短整數(shù))類(lèi)型埠忘;
若是數(shù)據(jù)值更小脾拆,在-128 到 127 之間時(shí)馒索,可以聲明為 byte 類(lèi)型以節(jié)省內(nèi)存空間。
例子:
short num名船;//聲明num為短整型
Java 即會(huì)在可使用的內(nèi)存空間中绰上,尋找一個(gè)占有 2 個(gè)字節(jié)的塊供sum 變量使用,同時(shí)這個(gè)變量的范圍只能在-32768 到 32767 之間渠驼。
常量的數(shù)據(jù)類(lèi)型
public class Test
{
public static void main(String args[])
{
long num = 329852547554;
System.out.println(num);
}
}
執(zhí)行結(jié)果:
Test.java:5: error: integer number too large
long num = 329852547554;
^
1 error
Error: Could not find or load main class Test
Caused by: java.lang.ClassNotFoundException: Test
sandbox> exited with status 0
把整數(shù)常量看成是 int 類(lèi)型蜈块,但 329852547553 這個(gè)整數(shù)已超出了 int 類(lèi)型所能表示的范圍,因此雖然把 num 的類(lèi)型設(shè)為 long迷扇,但編譯時(shí)仍然會(huì)發(fā)生錯(cuò)誤百揭。
解決方法:只要在整數(shù)常量后面加上一個(gè)大寫(xiě)的“L”即可.
public class Test
{
public static void main(String args[])
{
long num = 329852547554L;
System.out.println(num);
}
}
執(zhí)行結(jié)果:329852547554
數(shù)據(jù)類(lèi)型的最大值與最小值
Java 提供了 long、 int蜓席、 short 及 byte 四種整數(shù)類(lèi)型的最大值器一、最小值的代碼。最大值的代碼是 MAX_VALUE厨内,最小值是 MIN_VALUE祈秕。
如果要取用某個(gè)類(lèi)型的最大值或最小值,只要在這些代碼之前雏胃,加上它們所屬的類(lèi)的全名即可请毛。
如果程序代碼里需要用到長(zhǎng)整數(shù)的最大值,如圖 所示的語(yǔ)法表示:
如果要使用某個(gè)類(lèi)型的代碼瞭亮,則必須先指定該類(lèi)型所在的類(lèi)庫(kù)以及該類(lèi)型所屬的類(lèi)方仿,但因 java.lang 這個(gè)類(lèi)庫(kù)屬于常用類(lèi)庫(kù),所以默認(rèn)的 Java 程序會(huì)將它加載街州,因此在實(shí)際的應(yīng)用上設(shè)計(jì)者可以將它省略兼丰。
Java 所提供的整數(shù)的最大值與最小值的標(biāo)識(shí)符及常量值,如下圖所示:
溢出的發(fā)生
當(dāng)整數(shù)的數(shù)據(jù)大小超出了可以表示的范圍唆缴,而程序中又沒(méi)有做數(shù)值范圍的檢查時(shí),這個(gè)整型變量所輸出的值將發(fā)生紊亂黍翎,且不是預(yù)期的運(yùn)行結(jié)果面徽。
// 整數(shù)值如果超出了自己所可以表示范圍的最大值,會(huì)出現(xiàn)溢出
public class Test
{
public static void main(String args[])
{
int x = java.lang.Integer.MAX_VALUE ; // 得到整型的最大值
System.out.println("x = "+x);
System.out.println("x+1 = "+(x+1));
System.out.println("x+2 = "+(x+2));
}
}
輸出結(jié)果:
x = 2147483647
x+1 = -2147483648
x+2 = -2147483647
當(dāng)最大值加上 1 時(shí)匣掸,結(jié)果反而變成表示范圍中最小的值趟紊;當(dāng)最大值加上 2 時(shí),結(jié)果變成表示范圍中次小的值碰酝,這就是數(shù)據(jù)類(lèi)型的溢出霎匈。
為了避免 int 類(lèi)型的溢出,可以在該表達(dá)式中的任一常量后加上大寫(xiě)的“L”送爸,或是在變量前面加上 long铛嘱,作為強(qiáng)制類(lèi)型的轉(zhuǎn)換暖释。
// 整數(shù)值如果超出了自己所可以表示范圍的最大值,會(huì)出現(xiàn)溢出
public class Test
{
public static void main(String args[])
{
int x = java.lang.Integer.MAX_VALUE ; // 得到整型的最大值
System.out.println("x = "+x);
System.out.println("x + 1 = "+(x+1));
System.out.println("x + 2 = "+(x+2L));
System.out.println("x + 3 = "+((long)x+3));
}
}
輸出結(jié)果:
x = 2147483647
x + 1 = -2147483648
x + 2 = 2147483649
x + 3 = 2147483650
程序說(shuō)明:
- int x = java.lang.Integer.MAX_VALUE ; 聲明 int 類(lèi)型的整數(shù)變量 x墨吓,并賦值為整數(shù)最大值球匕,即 2147483647。
- System.out.println("x = "+x); 輸出 x 的值帖烘,即: 2147483647亮曹。
- System.out.println("x + 1 = "+(x+1)); 輸出 x+1 的值,此時(shí)溢出發(fā)生秘症,運(yùn)行結(jié)果變成-2147483648照卦。
- System.out.println("x + 2 = "+(x+2L)); 輸出 x+2 的值,為了避免溢出發(fā)生乡摹,在表達(dá)式的常量部分 2 后加上 L役耕,執(zhí)行結(jié)果變成 2147483649。
- System.out.println("x + 3 = "+((long)x+3)); 輸出 x+3 的值趟卸,為了避免溢出發(fā)生蹄葱,在表達(dá)式的整數(shù)部分 x 之前加上 long,執(zhí)行結(jié)果變成 2147483650锄列。
處理 int 類(lèi)型的溢出图云,可以利用強(qiáng)制類(lèi)型轉(zhuǎn)換方式。但是對(duì)于 long 類(lèi)型的溢出邻邮,就沒(méi)有處理辦法了竣况,此時(shí)就需要在程序中加上變量值的界限檢查,在運(yùn)行時(shí)才不會(huì)發(fā)生錯(cuò)誤筒严。