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