Java類庫 與使用者互動,java類庫互動
6.1.1 運行Java程式的參數
Java程式的入口:main()方法的方法簽名:
public static void main(String []args)
- public:為了讓java類可以由JVM自由調用這個main()方法,所以使用public修飾符把這個方法暴露出來。
- static:JVM調用這個主方法時,不會先建立該主類的對象,然後通過對象來調用該主方法,JVM直接通過該類來調用主方法
- void: 因為主方法被JVM調用,該方法的傳回值將返回JVM,這沒有任何意義。
方法調用的規則:誰調用方法,誰負責為形參賦值。
ArgsTest.java
package code;public class ArgsTest{ public static void main(String [] args){ System.out.println(args.length); for(String arg :args){ System.out.println(arg); } }}
0
如果改為如下命令來運行上面的程式,
I:\>java code.ArgsTest java String
如果運行Java程式時在類名後緊跟一個或多個字串(以空格分開),JVM就會把這些字串依次賦給args數組元素。
I:\>java code.ArgsTest "java String"
6.1.2 使用Scanner 擷取鍵盤輸入
使用Scanner可以擷取使用者的鍵盤輸入,Scanner是一個基於Regex的文本掃描器,它可以從檔案,輸入資料流,字串中解釋出基本類型值和字串值。
- hasNextXxx():是否還有下一個輸入項,Xxx可以是Int、Long等代表基礎資料型別 (Elementary Data Type)的字串,如果只是判斷是否包含下一個字串,則直接使用hasNext();
- nextXxx() :擷取下一個輸入項
在預設情況下,Scanner使用空白(包括空格、Tab空白、斷行符號)作為多個輸入項之間的分隔字元。
package code;import java.util.*;public class ScannerKeyBoardTest{ public static void main(String []args){ Scanner scanner = new Scanner(System.in); scanner.useDelimiter("\n"); while(scanner.hasNext()) System.out.println("鍵盤輸入的內容是:" + scanner.next()); } }
Scanner的讀取操作可能被阻塞來等待資訊的輸入 ,如果輸入源沒有結束,Scanner又讀不到更多的輸入項時,兩個方法都會阻塞
為Scanner設定分隔字元使用useDelimiter(String pattern)方法即可
package code;import java.util.*;public class ScannerLongTest{ public static void main(String [] args){ Scanner scanner = new Scanner(System.in); while(scanner.hasNextLong()) System.out.println("鍵盤輸入的內容是:" +scanner.nextLong()); }}
上面程式不如ScannerKeyBoardTest程式適應性強,因為ScannerLongTest程式要求鍵盤輸入必須是整數,否則程式將會退出
而且Scanner還能從檔案輸入,
package code;import java.io.*;import java.util.*;public class ScannerFileTest{ public static void main(String []args)throws Exception{ Scanner scanner = new Scanner(new File("ScannerFileTest.java")); System.out.println("檔案內容如下"); while(scanner.hasNextLine()){ System.out.println(scanner.nextLine()); } }}
檔案內容如下
package code;
import java.io.*;
import java.util.*;
public class ScannerFileTest{
public static void main(String []args)throws Exception{
Scanner scanner = new Scanner(new File(“ScannerFileTest.java”));
System.out.println(“檔案內容如下”);
while(scanner.hasNextLine()){
System.out.println(scanner.nextLine());
}
}
}
上面程式涉及檔案輸入,可能引發檔案IO異常,所以要聲明throws Exception表明main方法不處理任何異常。