《疯狂Java讲义》8
目錄
?
與用戶互動(dòng)
1、 運(yùn)行Java程序的參數(shù)
2. 使用Scanner獲取鍵盤輸入
系統(tǒng)相關(guān)
1.System類
2.RunTime類
BigDecimal類
與用戶互動(dòng)
1、 運(yùn)行Java程序的參數(shù)
?Java程序的入口——main()方法的方法簽名:?
public static void main(String[] args)????{ }
下面詳解為什么用這個(gè)方法簽名:
-
public修飾符:因?yàn)镴ava類由JVM(java虛擬機(jī))調(diào)用,為了讓JVM可以自由調(diào)用這個(gè)main()方法,所以用public進(jìn)行修飾。
-
static修飾符:JVM調(diào)用這個(gè)方法時(shí),不會(huì)先創(chuàng)建該主類的對象,然后通過對象調(diào)用這個(gè)主方法,JVM直接通過調(diào)用這個(gè)類來調(diào)用這個(gè)主方法(之前說道過,static修飾的方法是類方法,可以通過類或者對象進(jìn)行調(diào)用)。
-
void:JVM調(diào)用主方法,主方法的返回值要返回給JVM,但是這沒有任何意義,所以就不要返回值就好了。
-
String[] args:字符數(shù)組形參。根據(jù)方法調(diào)用原則,誰調(diào)用了方法,誰就提供形參的值,也就是說,JVM調(diào)用了主方法,所以由它為形參賦值。
但是JVM怎么知道如何為這個(gè)數(shù)組賦值?
看下面代碼:
?
結(jié)果如下:
?
????這是是意料之中的結(jié)果,因?yàn)闆]有給數(shù)組賦什么值,長度當(dāng)然為0;
????但是如果運(yùn)行Java程序時(shí)(控制臺運(yùn)行)在類名后面緊跟一個(gè)或者多個(gè)字符串(多個(gè)字符之間通過空格分開),JVM就會(huì)把這些字符串依次賦值給args數(shù)組元素。
????如果某參數(shù)本身包含了空格,則應(yīng)該將參數(shù)用雙引號(“”)括起來,否則java會(huì)把這個(gè)空格單座參數(shù)分隔符,而不是參數(shù)本身。
?????是不是很神奇,沒想到一個(gè)以為是套路的東西含義這么深刻。
2. 使用Scanner獲取鍵盤輸入
(1)Scanner主要提供了兩個(gè)方法來掃描輸入:
????1)hasNextXXX():是否還有下一個(gè)輸入項(xiàng),其中XXX可以是int,long等代表基本數(shù)據(jù)類型的字符串;如果只是判斷是否包含下一個(gè)字符串,則直接使用hasNext()。
????2)nextXXX():獲取下一個(gè)輸入項(xiàng)。
?
代碼如下:
結(jié)果如下:
????這里需要了解一下,Scanner默認(rèn)的是通過空白(空格,Tab空白,回車)作為分隔符,如果不想將空白作為分隔符,例如想輸入一行數(shù)據(jù),無論有沒有空格,都看作一個(gè)輸入項(xiàng),如果是這種需求,可以把Scanner的分隔符設(shè)置成只回車。??為Scanner設(shè)置分隔符使用useDelimiter(String pattern)方法即可。該方法的參數(shù)應(yīng)該是一個(gè)正則表達(dá)式。(后文會(huì)介紹)
看一下栗子:
結(jié)果為:
????可以看到這次在一行輸入三個(gè)數(shù)據(jù),空白是沒有分界符的作用的。
????實(shí)際上,Scanner提供了兩個(gè)簡單的方法進(jìn)行逐行讀取:
1)boolean hasNextLine():返回輸入源中是否還有下一行;
2)String nextLine():返回輸入源中下一行的字符串。
下面演示個(gè)用Scanner獲取輸入源中整型的輸入項(xiàng):
結(jié)果為:
????可以看到的是,它將數(shù)字(整數(shù)或者浮點(diǎn)數(shù)均變成了浮點(diǎn)數(shù)進(jìn)行輸出),但是第二個(gè)輸入數(shù)據(jù),因?yàn)檩斎肓俗址?#xff0c;不是數(shù)字,所以沒有輸出結(jié)果,此時(shí),Scanner的讀取操作被阻塞。這也是其不如上一個(gè)程序所在,適應(yīng)性不強(qiáng)。
????Scanner不僅能夠讀取用戶的鍵盤輸入,還能對文件進(jìn)行讀入。
舉個(gè)栗子:
?
這個(gè)大體上寫法類似于上面的,要注意兩點(diǎn),一個(gè)是文件的載入的寫法,一個(gè)是上面的異常處理(這個(gè)程序會(huì)自動(dòng)提示生成)。
?
系統(tǒng)相關(guān)
????Java程序在不同操作系統(tǒng)上運(yùn)行時(shí),可能需要取得平臺相關(guān)的屬性,或者調(diào)用平臺命令來完成特定的功能。Java提供了System類和Runtime類與程序的運(yùn)行平臺進(jìn)行交互。
1.System類
????System類作為當(dāng)前運(yùn)行平臺時(shí),程序不能創(chuàng)建System類的對象,System類提供了一些類變量和類方法,允許直接通過System類來調(diào)用這些類變量和類方法。
????System類提供了代表標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出的類變量,并提供了一些靜態(tài)方法用于訪問環(huán)境變量、系統(tǒng)屬性的方法,還提供了加載文件和動(dòng)態(tài)鏈接庫的方法(這個(gè)我不清楚,了解一下而已)。System類還有兩個(gè)獲取當(dāng)前系統(tǒng)時(shí)間的方法,currentTimeMillis()和nanoTime(),它們都返回一個(gè)long型整數(shù),這里必須指出的是,這兩個(gè)方法返回的時(shí)間粒度取決于底層操作系統(tǒng),可能所在的操作系統(tǒng)根本不支持以毫秒和納秒作為計(jì)時(shí)單位。
2.RunTime類
????Runtime類代表Java程序的運(yùn)行環(huán)境時(shí),每個(gè)Java程序都有一個(gè)與之對應(yīng)的Runtime實(shí)例,應(yīng)用程序通過該對象與其運(yùn)行時(shí)環(huán)境相連。應(yīng)用程序不能創(chuàng)建自己的Runtime實(shí)例,但可以通過getRuntime()方法獲取
與之關(guān)聯(lián)的Runtime對象Runtime作為運(yùn)行環(huán)境時(shí),可以訪問JVM的相關(guān)信息,
如處理器數(shù)量,內(nèi)存信息等。
舉個(gè)栗子:
?
結(jié)果如下:
????此外,Runtime類還有一個(gè)功能:直接單獨(dú)啟動(dòng)一個(gè)進(jìn)程來運(yùn)行操作系統(tǒng)的命令:
????感覺好厲害的樣子哦!
BigDecimal類
1.?為了能精確表示、計(jì)算浮點(diǎn)數(shù),Java提供了BigDecimal類,該類提供了大量的構(gòu)造器用于創(chuàng)建BigDecimal 對象,包括把所有的基本數(shù)值型變量轉(zhuǎn)換成一個(gè)BigDecimal對象,也包括利用數(shù)字字符串、數(shù)字字符數(shù)組來創(chuàng)建BigDecimal對象。
2.?在BigDecimal類的構(gòu)造器中,BigDecimal(double val)構(gòu)造器有一定的不可預(yù)知性,當(dāng)程序使用new BigDecimal(0.1)來創(chuàng)建一個(gè)BigDecimal對象時(shí),它的值并不是0.1,它實(shí)際上等于一個(gè)近似0.1的數(shù),因?yàn)?.1無法準(zhǔn)確表示為double浮點(diǎn)數(shù)。但是使用BigDecimal(String val)構(gòu)造器的結(jié)果是可預(yù)知的,因此通常優(yōu)先使用基于String的構(gòu)造器。如果必須使用double浮點(diǎn)數(shù)作為BigDecimal 構(gòu)造器的參數(shù)時(shí),通過BigDecimal.valueOf(double value)靜態(tài)方法來創(chuàng)建BigDecimal對象。
END
總結(jié)
以上是生活随笔為你收集整理的《疯狂Java讲义》8的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《疯狂Java讲义》7
- 下一篇: 《疯狂Java讲义》9