1注釋?zhuān)腥N:
// 最常用的注釋
/* 較長(zhǎng)的注釋*/
/** 自動(dòng)生成的文檔注釋*/
2數(shù)據(jù)類(lèi)型:
java有8種原始類(lèi)型,其中4種整型,2種浮點(diǎn)型,char型,boolean型。所有數(shù)值類(lèi)型都是有符號(hào)的.char沒(méi)有符號(hào),但書(shū)中沒(méi)有提到boolean型是否有符號(hào)。
java并非完全面向?qū)ο?,這8種類(lèi)型就是非面向?qū)ο蟮?,這是因?yàn)檫@8種類(lèi)型很常用,為了提高程序效率而引用,它們不像java中的其它對(duì)象一樣是分配在堆中的,而是存儲(chǔ)在堆棧中。
注意,類(lèi)型決定的是行為,而不是存儲(chǔ)大小,事實(shí)上byte和short的存儲(chǔ)都是32位的。不過(guò),數(shù)組中的類(lèi)型是例外,byte型的數(shù)組保證每個(gè)數(shù)組元素只占一個(gè)字節(jié)。
java為了實(shí)現(xiàn)跨平臺(tái),在不同處理器下得到可重現(xiàn)的結(jié)果,所以嚴(yán)格定義數(shù)據(jù)類(lèi)型的長(zhǎng)度,如:在任何平臺(tái)下long總是64位。但這樣嚴(yán)格指定會(huì)損失性能,還有計(jì)算的精度(現(xiàn)在很多平臺(tái)的long是80位的)。在這種情況下,5.0提供了Strictfp修飾詞來(lái)修飾類(lèi)和方法。被在修飾的類(lèi)或方法進(jìn)行的計(jì)算會(huì)嚴(yán)格指定數(shù)據(jù)類(lèi)型,否則會(huì)根據(jù)平臺(tái)處理器的不同而進(jìn)行計(jì)算。這算是一種折衷吧。
另外,在5.0中char不再使用Unicode編碼,而使用UTF-16。當(dāng)然,UTF-16兼容Unicode。所以這不會(huì)對(duì)我們的編程產(chǎn)生什么太直觀的影響(我是這么認(rèn)為的)。
我覺(jué)得需要注意的一點(diǎn)是:float不適合金融計(jì)算,如:2.0 - 1.1得到的結(jié)果是0.8999999999999999..因?yàn)閒loat型在系統(tǒng)中是二進(jìn)制表示的,就像十進(jìn)行中1/3除不盡一樣,二進(jìn)制中的1/10是除不盡的。
其它的沒(méi)什么好說(shuō)的了,下面符兩張表:
Table 3-1. Java Integer Types
Type Storage Requirement Range (Inclusive)
Int 4 bytes –2,147,483,648 to 2,147,483, 647 (just over 2 billion)
Short 2 bytes –32,768 to 32,767
Long 8 bytes –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
Byte 1 byte –128 to 127
Table 3-2. Floating-Point Types
Type Storage Requirement Range
float 4 bytes approximately ±3.40282347E+38F (6–7 significant decimal digits)
double 8 bytes approximately ±1.79769313486231570E+308 (15 significant decimal digits)
3操作符:
想一個(gè)問(wèn)題,整數(shù)/0會(huì)得到什么,浮點(diǎn)數(shù)/0又會(huì)得到什么?前一個(gè)答案是異常,后一個(gè)答案是無(wú)窮或NaN.浮點(diǎn)型中定義了正無(wú)窮,負(fù)無(wú)窮,和NaN(not a number)三個(gè)常量.記住,在和他們進(jìn)行比較的時(shí)候不能用“==”,有專(zhuān)門(mén)的方法isNaN()等。
java里面沒(méi)有什么奇特的操作符,大家都應(yīng)該認(rèn)識(shí)。需要注意的我想就是計(jì)算時(shí)數(shù)據(jù)類(lèi)型間的轉(zhuǎn)換問(wèn)題
如上圖,實(shí)線的轉(zhuǎn)換不會(huì)丟失數(shù)據(jù),虛線的轉(zhuǎn)換可能會(huì)丟失數(shù)據(jù),沿實(shí)線反向轉(zhuǎn)換也是可能會(huì)數(shù)據(jù)。
需要注意操作時(shí)會(huì)自動(dòng)轉(zhuǎn)換,原則是:
有double類(lèi)型的,都轉(zhuǎn)換為double類(lèi)型;
有float類(lèi)型的,都轉(zhuǎn)換為float類(lèi)型;
有l(wèi)ong類(lèi)型的,都轉(zhuǎn)換為long類(lèi)型;
否則,兩個(gè)操作數(shù)都轉(zhuǎn)換為int類(lèi)型。
例如,兩個(gè)byte進(jìn)行操作,得到是操作結(jié)果是int類(lèi)型的,這點(diǎn)一定要注意。
強(qiáng)制轉(zhuǎn)換:
意味著可能會(huì)丟失數(shù)據(jù).關(guān)鍵是強(qiáng)制轉(zhuǎn)換后的結(jié)果:浮點(diǎn)向整形轉(zhuǎn)換是截取轉(zhuǎn)換,既去掉小數(shù)點(diǎn);大類(lèi)型向小類(lèi)型轉(zhuǎn)換,是取模轉(zhuǎn)換,既對(duì)小類(lèi)型的值域取模。
4 Sting:
String在java中不是一個(gè)原始類(lèi)型,而是一個(gè)類(lèi)。每個(gè)字符串都是這個(gè)類(lèi)的一個(gè)實(shí)例。
我覺(jué)得對(duì)于String,應(yīng)該注意的一點(diǎn)是:String是不可變的。你可以進(jìn)行“+”或substring操作,但最終的結(jié)果是產(chǎn)生一個(gè)新的String對(duì)象,而以前的那個(gè)還在。這應(yīng)該是個(gè)考點(diǎn)吧,很多題都和這個(gè)相關(guān)。對(duì)比一個(gè)StringBuffer,后者提供了很多對(duì)操作其值的方法。操作結(jié)果都體現(xiàn)在它自己身上,不會(huì)產(chǎn)生另一個(gè)StringBuffer對(duì)象。
由于上述原因,請(qǐng)注意比較兩個(gè)字符串是否相等時(shí),不要使用“==”,而要使用equle()方法?!?=”只能判斷兩個(gè)字符串是否存儲(chǔ)在同一個(gè)地方.
String a = "abc";
if(a=="abc"){//很可能返回true}
if(a.substring(0,1)=="a"){//很可能返回false}
上述的判斷都不能確定。
5 輸入/輸出
在這里討論的輸入輸出,僅僅是討論簡(jiǎn)單的對(duì)輸入的讀取和輸出的格式化。
// 最常用的注釋
/* 較長(zhǎng)的注釋*/
/** 自動(dòng)生成的文檔注釋*/
2數(shù)據(jù)類(lèi)型:
java有8種原始類(lèi)型,其中4種整型,2種浮點(diǎn)型,char型,boolean型。所有數(shù)值類(lèi)型都是有符號(hào)的.char沒(méi)有符號(hào),但書(shū)中沒(méi)有提到boolean型是否有符號(hào)。
java并非完全面向?qū)ο?,這8種類(lèi)型就是非面向?qū)ο蟮?,這是因?yàn)檫@8種類(lèi)型很常用,為了提高程序效率而引用,它們不像java中的其它對(duì)象一樣是分配在堆中的,而是存儲(chǔ)在堆棧中。
注意,類(lèi)型決定的是行為,而不是存儲(chǔ)大小,事實(shí)上byte和short的存儲(chǔ)都是32位的。不過(guò),數(shù)組中的類(lèi)型是例外,byte型的數(shù)組保證每個(gè)數(shù)組元素只占一個(gè)字節(jié)。
java為了實(shí)現(xiàn)跨平臺(tái),在不同處理器下得到可重現(xiàn)的結(jié)果,所以嚴(yán)格定義數(shù)據(jù)類(lèi)型的長(zhǎng)度,如:在任何平臺(tái)下long總是64位。但這樣嚴(yán)格指定會(huì)損失性能,還有計(jì)算的精度(現(xiàn)在很多平臺(tái)的long是80位的)。在這種情況下,5.0提供了Strictfp修飾詞來(lái)修飾類(lèi)和方法。被在修飾的類(lèi)或方法進(jìn)行的計(jì)算會(huì)嚴(yán)格指定數(shù)據(jù)類(lèi)型,否則會(huì)根據(jù)平臺(tái)處理器的不同而進(jìn)行計(jì)算。這算是一種折衷吧。
另外,在5.0中char不再使用Unicode編碼,而使用UTF-16。當(dāng)然,UTF-16兼容Unicode。所以這不會(huì)對(duì)我們的編程產(chǎn)生什么太直觀的影響(我是這么認(rèn)為的)。
我覺(jué)得需要注意的一點(diǎn)是:float不適合金融計(jì)算,如:2.0 - 1.1得到的結(jié)果是0.8999999999999999..因?yàn)閒loat型在系統(tǒng)中是二進(jìn)制表示的,就像十進(jìn)行中1/3除不盡一樣,二進(jìn)制中的1/10是除不盡的。
其它的沒(méi)什么好說(shuō)的了,下面符兩張表:
Table 3-1. Java Integer Types
Type Storage Requirement Range (Inclusive)
Int 4 bytes –2,147,483,648 to 2,147,483, 647 (just over 2 billion)
Short 2 bytes –32,768 to 32,767
Long 8 bytes –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
Byte 1 byte –128 to 127
Table 3-2. Floating-Point Types
Type Storage Requirement Range
float 4 bytes approximately ±3.40282347E+38F (6–7 significant decimal digits)
double 8 bytes approximately ±1.79769313486231570E+308 (15 significant decimal digits)
3操作符:
想一個(gè)問(wèn)題,整數(shù)/0會(huì)得到什么,浮點(diǎn)數(shù)/0又會(huì)得到什么?前一個(gè)答案是異常,后一個(gè)答案是無(wú)窮或NaN.浮點(diǎn)型中定義了正無(wú)窮,負(fù)無(wú)窮,和NaN(not a number)三個(gè)常量.記住,在和他們進(jìn)行比較的時(shí)候不能用“==”,有專(zhuān)門(mén)的方法isNaN()等。
java里面沒(méi)有什么奇特的操作符,大家都應(yīng)該認(rèn)識(shí)。需要注意的我想就是計(jì)算時(shí)數(shù)據(jù)類(lèi)型間的轉(zhuǎn)換問(wèn)題
如上圖,實(shí)線的轉(zhuǎn)換不會(huì)丟失數(shù)據(jù),虛線的轉(zhuǎn)換可能會(huì)丟失數(shù)據(jù),沿實(shí)線反向轉(zhuǎn)換也是可能會(huì)數(shù)據(jù)。
需要注意操作時(shí)會(huì)自動(dòng)轉(zhuǎn)換,原則是:
有double類(lèi)型的,都轉(zhuǎn)換為double類(lèi)型;
有float類(lèi)型的,都轉(zhuǎn)換為float類(lèi)型;
有l(wèi)ong類(lèi)型的,都轉(zhuǎn)換為long類(lèi)型;
否則,兩個(gè)操作數(shù)都轉(zhuǎn)換為int類(lèi)型。
例如,兩個(gè)byte進(jìn)行操作,得到是操作結(jié)果是int類(lèi)型的,這點(diǎn)一定要注意。
強(qiáng)制轉(zhuǎn)換:
意味著可能會(huì)丟失數(shù)據(jù).關(guān)鍵是強(qiáng)制轉(zhuǎn)換后的結(jié)果:浮點(diǎn)向整形轉(zhuǎn)換是截取轉(zhuǎn)換,既去掉小數(shù)點(diǎn);大類(lèi)型向小類(lèi)型轉(zhuǎn)換,是取模轉(zhuǎn)換,既對(duì)小類(lèi)型的值域取模。
4 Sting:
String在java中不是一個(gè)原始類(lèi)型,而是一個(gè)類(lèi)。每個(gè)字符串都是這個(gè)類(lèi)的一個(gè)實(shí)例。
我覺(jué)得對(duì)于String,應(yīng)該注意的一點(diǎn)是:String是不可變的。你可以進(jìn)行“+”或substring操作,但最終的結(jié)果是產(chǎn)生一個(gè)新的String對(duì)象,而以前的那個(gè)還在。這應(yīng)該是個(gè)考點(diǎn)吧,很多題都和這個(gè)相關(guān)。對(duì)比一個(gè)StringBuffer,后者提供了很多對(duì)操作其值的方法。操作結(jié)果都體現(xiàn)在它自己身上,不會(huì)產(chǎn)生另一個(gè)StringBuffer對(duì)象。
由于上述原因,請(qǐng)注意比較兩個(gè)字符串是否相等時(shí),不要使用“==”,而要使用equle()方法?!?=”只能判斷兩個(gè)字符串是否存儲(chǔ)在同一個(gè)地方.
String a = "abc";
if(a=="abc"){//很可能返回true}
if(a.substring(0,1)=="a"){//很可能返回false}
上述的判斷都不能確定。
5 輸入/輸出
在這里討論的輸入輸出,僅僅是討論簡(jiǎn)單的對(duì)輸入的讀取和輸出的格式化。