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