Java學(xué)習(xí)筆記(一)
依據(jù)《寫給大忙人看的Java核心技術(shù)》所記筆記
【美】Cay S.Horstmann 著
楊謙 王巍 高偉斌 謝志強(qiáng) 譯
轉(zhuǎn)載請(qǐng)注明出處,勿用于商業(yè)用途
第一章 基本的編程結(jié)構(gòu)
一、第一個(gè)程序
在Java中,所有代碼都必須在類中定義
main方法是程序運(yùn)行時(shí)調(diào)用的第一個(gè)方法,它被聲明為靜態(tài)的,表面該方法不是依賴于對(duì)象運(yùn)行的。
包(package)是一組相關(guān)類的集合,每個(gè)類都放入一個(gè)包中
-
三種注釋方法:
//我是行注釋 /* 我是多行注釋 */ /** 我是文檔注釋 */ javac 命令將Java源代碼編譯為中間代碼,也稱字節(jié)碼,并將它們保存到類文件中(即.class文件)
System.out是對(duì)象,是PrintStream的實(shí)例
使用點(diǎn)符號(hào)調(diào)用對(duì)象上的實(shí)例方法
字符串是String類的實(shí)例,可以調(diào)用length方法返回字符串的長(zhǎng)度,即:
"Hello World".length()-
Random類的對(duì)象可以產(chǎn)生隨機(jī)數(shù),可以使用new操作符構(gòu)建一個(gè)Random對(duì)象
new Random();類名之后是構(gòu)造函數(shù)的參數(shù)列表
Random.nextInt()方法可以提供一個(gè)整數(shù),Random類聲明在java.util包中,使用需導(dǎo)入,即:
import java.util.Random
二、基本類型
-
整型(沒(méi)有小數(shù),允許為負(fù))
int(4字節(jié))long(8字節(jié))short(2字節(jié))byte(1字節(jié))
如果long類型還不夠用時(shí),使用BigInteger類
使用long類型時(shí)帶上L后綴,byte和short型采用強(qiáng)制轉(zhuǎn)換
十六進(jìn)制使用0x前綴,二進(jìn)制使用0b前綴,八進(jìn)制使用0前綴
可以給數(shù)字添加下劃線方便閱讀,Java編譯器會(huì)自動(dòng)刪除它們。如:1_000_000表示100萬(wàn)
-
浮點(diǎn)類型
float(4字節(jié)) double(8字節(jié))
float類型有F后綴,沒(méi)有F默認(rèn)為double類型,也可使用D作為Double類型后綴
十六進(jìn)制指數(shù)使用p
-
Double.POSITIVE_INFINITY代表正無(wú)窮Double.NEGATIVE_INFINITY代表負(fù)無(wú)窮Double.NaN代表“非數(shù)值”,如0.0/0.0或負(fù)數(shù)平方根 -
所有的“非數(shù)值”都彼此不同,不能使用
x==Double.NaN檢查可以調(diào)用
Double.isNaN和Double.isInfinite進(jìn)行檢查,Double.isFinite可以檢查既不是無(wú)窮也不是NaN 浮點(diǎn)數(shù)不適合金融計(jì)算,因?yàn)榇嬖谡`差,若要準(zhǔn)確無(wú)誤差的數(shù)學(xué)計(jì)算可以使用
BigDecimal類布爾型
有兩種數(shù)值,false和true,Java中布爾類型不是數(shù)字類型,與0和1沒(méi)有關(guān)系
三、變量
Java是強(qiáng)類型語(yǔ)言,變量值只能是某個(gè)具體類型的值
-
Java對(duì)字母大小寫敏感
變量和方法的名稱以小寫字母開始,類的名稱的第一個(gè)字母大寫
駝峰式大小寫:當(dāng)名稱由多個(gè)單詞組成時(shí),單詞首字母大寫,如:countOfInvalidInputs
在使用變量前必須初始化變量
-
允許在方法中的任何地方聲明變量,盡可能晚地聲明變量,剛好在首次需要變量的前一刻聲明
變量聲明在它的初始值剛有了的那一刻
-
final關(guān)鍵字表示一個(gè)值,一旦賦值后就不能改變了(常量)
常量的名稱使用大寫字母,如:
final int DAYS_PER_WEEK=7;可以在方法外,使用static關(guān)鍵字聲明常量,如:
public static final int DAYS=7; 在類內(nèi)部可以直接使用常量,在其他類中使用需要在前面加上類名
System類中聲明了一個(gè)常量:
public static final PrintStream out;-
延遲final變量的初始化也可以,只要在首次使用前只初始化一次就好。
final變量一旦被賦值,就是最終的值,永遠(yuǎn)無(wú)法改變
四、算術(shù)操作
-
基本運(yùn)算
- /操作符,如兩個(gè)操作數(shù)都是整型,代表整除;如有小數(shù)會(huì)產(chǎn)生小數(shù)
- 整數(shù)除以零會(huì)導(dǎo)致異常,如果沒(méi)有捕獲異常,程序會(huì)終止
- 浮點(diǎn)數(shù)除以零會(huì)產(chǎn)生無(wú)限值或NaN,不會(huì)導(dǎo)致異常
- 當(dāng)n為奇數(shù)時(shí),若n為正,n%2的結(jié)果為1,若n為負(fù),n%2的結(jié)果為-1
-
數(shù)學(xué)方法
- 靜態(tài)方法不用在對(duì)象上調(diào)用,如靜態(tài)常量一樣,只需要在前面加上靜態(tài)常量的類名即可
-
Math.pow(x,y)產(chǎn)生x的y次方,Math.sqrt(x)計(jì)算x的平方根 - 計(jì)算兩個(gè)值哪個(gè)小或大,
Math.min和Math.max -
Math類提供三角函數(shù)和對(duì)數(shù)方法,以及常量Math.PI和Math.E
-
數(shù)字類型轉(zhuǎn)換
- 合法轉(zhuǎn)換
- byte-->short\int\long\double
- short\char-->int\long\double
- int-->long\double
- 合法但損失信息
- int-->float
- long-->float\double
- 合法轉(zhuǎn)換
-
大數(shù)
java.math中的BigInteger和BigDecimal類可實(shí)現(xiàn)任意精度計(jì)算Java不允許對(duì)象使用操作符,操作大數(shù)時(shí)必須使用方法調(diào)用
五、字符串
-
字符串連接
使用操作符+可以將兩個(gè)字符串連接起來(lái),將一個(gè)字符串和另外一個(gè)值連接起來(lái)時(shí)轉(zhuǎn)換為字符串
-
子字符串
要將字符串分開,使用substring方法
substring方法的第一個(gè)參數(shù)是提取子字符串中的起始位置,第二個(gè)參數(shù)是子字符串不包含的終止位置
split方法分割由字符串分割的所有字符串
分隔符也可以是正則表達(dá)式
-
字符串比較
檢查字符串是否相等,使用equals方法
string變量可以是null,表明該變量根本沒(méi)有引用任何對(duì)象
在null上調(diào)用任何方法都會(huì)導(dǎo)致空指針異常
不考慮大小寫比較兩個(gè)字符串,可使用
equalsIgnorelase() -
數(shù)字字符串轉(zhuǎn)換
整數(shù)轉(zhuǎn)換為字符串可調(diào)用靜態(tài)的
Integer.toString()字符串轉(zhuǎn)整數(shù),使用
Integer.parseInt()對(duì)于浮點(diǎn)數(shù),使用
Double.toString和Double.parseDouble -
String類API
在Java中,String類是不變的(immutable),即任何String方法不能修改自己的字符串
六、輸入與輸出
-
讀取輸入
要讀取字符串和數(shù)字,構(gòu)造一個(gè)依附到
System.in的ScannerScanner in = new Scanner(System.in);Scanner對(duì)象的nextLine方法從輸入讀取一行nextInt()讀取整數(shù),nextDouble()讀取浮點(diǎn)數(shù)Scanner類位于java.util包中
-
格式化輸出
print方法不會(huì)在輸出中新起一行,常用來(lái)提示輸入
使用printf和%來(lái)格式化輸出
使用
String.format方法創(chuàng)建不打印輸出的格式化字符串
七、控制流
-
分支:
if、else、else if、switch case
-
循環(huán)
while、do while、for
-
跳出循環(huán)
break、continue
break+標(biāo)簽可以跳出多個(gè)循環(huán)
局部變量作用域
八、數(shù)組和數(shù)組列表
-
使用數(shù)組
新建數(shù)組:
int[] nums數(shù)組初始化:
nums =new int[10];或nums = int[] {1,2,3,4};y -
構(gòu)造數(shù)組
也可以直接構(gòu)造數(shù)組:
int [] nums = {1,2,3,4};數(shù)組長(zhǎng)度為0和空指針null不同
-
數(shù)組列表
構(gòu)造數(shù)組時(shí),必須指定長(zhǎng)度,一旦構(gòu)造好,數(shù)組的長(zhǎng)度不能再變
使用java.util包中的ArrayList類來(lái)管理數(shù)組
? 聲明變量:
ArrayList<String> friends =new ArrayList<>();聲明之后結(jié)果為一個(gè)大小為0的數(shù)組列表,可以用add方法給末尾加元素
訪問(wèn)元素要使用get方法,不能用[]直接訪問(wèn)
size方法可返回當(dāng)前列表大小
-
基本類型包裝類
泛型類不能使用基本類型作為類型參數(shù),可以使用包裝類
每一種基本類型都有對(duì)應(yīng)的包裝類
Integer、Byte、Short、Long、Character、Float、Double和Boolean==和!=操作符比較引用對(duì)象而不是對(duì)象的內(nèi)容
-
增強(qiáng)的for循環(huán)
for(int n:numbers){}其中的n不是索引值,而是被賦值為numbers[0]、numbers[1]等
-
數(shù)組與數(shù)組列表的復(fù)制
數(shù)組直接等于的復(fù)制是引用直接指向同一個(gè)數(shù)組
若真正復(fù)制數(shù)組需要使用靜態(tài)方法
Array.copyOfint[] copiedPrimes = Arrays.copyOf(primes,primes.length);該方法構(gòu)造一個(gè)期望長(zhǎng)度的新數(shù)組,并將原數(shù)組的元素復(fù)制進(jìn)去
-
數(shù)組算法
Arrays(數(shù)組)類 Collections(集合)類
對(duì)數(shù)組或數(shù)組列表排序,使用sort方法
Arrays.sort(names)、Collections.sort(friends)toString()產(chǎn)生一個(gè)數(shù)組的字符串表示 -
命令行參數(shù)
當(dāng)用命令行執(zhí)行程序時(shí),命令行中的指定參數(shù)就賦值給main函數(shù)中的args
-
多維數(shù)組
Java中的多維數(shù)組是通過(guò)數(shù)組的數(shù)組來(lái)實(shí)現(xiàn)
int[][] square =new int[4][4];
九、功能分解
靜態(tài)方法,即static修飾的方法可在main中直接調(diào)用
變長(zhǎng)參數(shù)必須是方法中的最后一個(gè)參數(shù),用修飾符... 修飾
public static double max(double first,double ... rest);
?