1.運(yùn)行java程序的參數(shù)
main方法的方法簽名public static void main(String[] args){...}
- public修飾符:Java類由JVM調(diào)用,public暴露這個方法
- static修飾符:JVM調(diào)用主方法時兼搏,不會先創(chuàng)建對象再調(diào)用,而是直接通過該類調(diào)用主方法件相,所以用static修飾
- void返回值:主方法被JVM調(diào)用,返回值將返回給JVM让虐,沒有任何意義
- String[] args形參:運(yùn)行Java程序時在類名后緊跟一個或多個字符串,JVM會把字符串依次賦值給args數(shù)組元素
eg: java ArgsTest Java Spring
2.Scanner獲取鍵盤輸入
Scanner是一個基于正則表達(dá)式的文本掃描器,它可以從文件漱受,輸入流昂羡,字符串中解析出基本類型和字符串值虐先。Scanner類提供了多個構(gòu)造器,不同的構(gòu)造器可以接收文件,輸入流甸赃,字符串作為數(shù)據(jù)源埠对,用于從文件貌笨,輸入流锥惋,字符串中解析數(shù)據(jù)
2.1 主要提供兩個方法:
- hasNextXxx():是否還有下一個輸入項(xiàng)膀跌,其中Xxx可以是Int,Long等代表基本數(shù)據(jù)類型的字符串丛忆,如果只是判斷是否包含下一個字符串熄诡,則直接使用hasNext()
- nextXxx():獲取下一個輸入項(xiàng)
默認(rèn)情況下,Scanner使用空白(空格,Tab空白惫周,回車)作為多個輸入項(xiàng)之間的分隔符
import java.util.*;
public class ScannerTest {
public static void main(String[] args){
//System.in代表標(biāo)準(zhǔn)輸入,就是鍵盤輸入
Scanner sc = new Scanner(System.in);
//增加下面一行將只把回車作為分隔符
//sc.useDelimiter("\n")
//判斷是否還有下一個輸入項(xiàng)
while (sc.hasNext()){
System.out.println("鍵盤輸入的內(nèi)容是:"+ sc.next());
}
}
}
2.2 Scanner也提供了兩個簡單的方法來逐行讀取
- boolean hasNextLine():返回輸入源中是否還有下一行
- String nextLine():返回輸入源中下一行的字符串
2.3 Scanner還可以讀取文件輸入,需要在創(chuàng)建Scanner對象時傳入一個File對象作為參數(shù)
import java.io.*;
import java.util.*;
public class ScannerFileTest {
public static void main(String[] args)throws Exception{
//System.in代表標(biāo)準(zhǔn)輸入,就是鍵盤輸入
Scanner sc = new Scanner(new File("ScannerFileTest.java"));
//增加下面一行將只把回車作為分隔符
//sc.useDelimiter("\n")
//判斷是否還有下一個輸入項(xiàng)
while (sc.hasNextLine()){
System.out.println("鍵盤輸入的內(nèi)容是:"+ sc.nextLine());
}
}
}
3.System類
System類代表當(dāng)前Java程序的運(yùn)行平臺氯迂,程序不能創(chuàng)建System類的對象
System類提供了代表標(biāo)準(zhǔn)輸入言缤,標(biāo)準(zhǔn)輸出和錯誤輸出的類變量禁灼,并提供了一些靜態(tài)方法用于訪問環(huán)境變量,系統(tǒng)屬性的方法僻孝,還提供了加載文件和動態(tài)鏈接庫的方法
3.1通過System類來訪問操作的環(huán)境變量和系統(tǒng)屬性
import java.io.FileOutputStream;
import java.util.Map;
import java.util.Properties;
public class SystemTest {
public static void main(String[] args)throws Exception{
//獲取系統(tǒng)所有的環(huán)境變量
Map<String,String> env = System.getenv();
for(String name : env.keySet()){
System.out.println(name + "--->" + env.get(name));
}
//獲取指定環(huán)境變量的值
System.out.println(System.getenv("JAVA_HOME"));
//獲取所有的系統(tǒng)屬性
Properties props = System.getProperties();
//將所有的系統(tǒng)屬性保存到Prop.txt文件中
props.store(new FileOutputStream("prop.txt"),"System Properties");
//輸出指定的系統(tǒng)屬性
System.out.println(System.getProperty("os.name"));
}
}
3.2獲取系統(tǒng)當(dāng)前時間
currentTimeMillis()和nanoTime()守谓,都返回一個long型整數(shù)
3.3其他
- System類的in,out悴务,err分別代表系統(tǒng)的標(biāo)準(zhǔn)輸入(通常是鍵盤)譬猫,標(biāo)準(zhǔn)輸出(通常是顯示器)和錯誤輸出流,并提供了setIn(),setOut(),setErr()來改變系統(tǒng)的標(biāo)準(zhǔn)輸入染服,標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤輸出流
4.Runtime類
Runtime類代表Java程序的運(yùn)行時環(huán)境叨恨,每個Java程序都有一個與之對應(yīng)的Runtime實(shí)例。應(yīng)用程序不能創(chuàng)建自己的Runtime實(shí)例痒钝,但是可以通過getRuntime()方法獲取與之關(guān)聯(lián)的Runtime對象
4.1訪問JVM相關(guān)信息,如處理器數(shù)量蚕甥,內(nèi)存信息等
public class RuntimeTest {
public static void main(String[] args){
//獲取Java程序關(guān)聯(lián)的運(yùn)行時對象
Runtime rt = Runtime.getRuntime();
System.out.println("處理器數(shù)量:" + rt.availableProcessors());
System.out.println("空閑內(nèi)存數(shù):" + rt.freeMemory());
System.out.println("總內(nèi)存數(shù):" + rt.totalMemory());
System.out.println("可用最大內(nèi)存數(shù):" + rt.maxMemory());
}
}
4.2單獨(dú)啟動一個進(jìn)程來運(yùn)行操作系統(tǒng)的命令
public class ExecTest {
public static void main(String[] args)throws Exception{
Runtime rt = Runtime.getRuntime();
//運(yùn)行記事本程序
rt.exec("notepad.exe");
}
}
5.Object類
Object類是所有類栋荸,數(shù)組,枚舉類的父類爱沟,Java允許把任何類型的對象賦給Object類型的變量
- boolean equals(Object obj):判斷指定對象與該對象是否相等
- protected void finalize():系統(tǒng)沒有引用變量引用該對象時匆背,垃圾回收器調(diào)用此方法來清理該對象資源
- Class<?>getClass():返回該對象的運(yùn)行時類
- int hashCode():返回該對象的hashCode值
- String toString():返回該對象的字符串表示
- 此外還有wait(),notify(),notifyAll()幾個方法,用于控制線程暫停和運(yùn)行
5.1 clone()方法
用于幫助其他對象實(shí)現(xiàn)“自我克隆”钝尸,由于Object類提供的clone()方法使用了protected修飾搂根,該方法只能被子類重寫或者調(diào)用
class Address{
String detail;
public Address(String detail){
this.detail = detail;
}
}
//實(shí)現(xiàn)CLoneable接口
class User implements Cloneable{
int age;
Address address;
public User(int age){
this.age = age;
address = new Address("廣州天河");
}
//通過調(diào)用super.clone()來實(shí)現(xiàn)clone()方法
public User clone()throws CloneNotSupportedException{
return (User)super.clone();
}
}
public class CloneTest {
public static void main(String[] args)throws CloneNotSupportedException{
User u1 = new User(29);
User u2 = u1.clone();
System.out.println(u1 == u2);
System.out.println(u1.address == u2.address);
}
}
6.Objects類(Java 7)
java 7新增的Objects工具類
- 不能確定引用變量是否為null時奶浦,調(diào)用toString()可能會造成報錯,但是如果用Objects類的toString(Object o)方法隙咸,在o為null時成洗,會返回"null"字符串
7.String,StringBuffer和StringBuilder
- String類是不可變類瓶殃,一旦一個String對象被創(chuàng)建以后,包含在這個對象中的字符序列是不可改變的基矮,直到對象被銷毀
- StringBuffer對象代表字符序列可變的字符串,生成以后可以通過提供的方法進(jìn)行變換家浇,最后用toString()轉(zhuǎn)換成String對象
- StringBuilder類碴裙,與StringBuffer不同的是,StringBuffer是線程安全的舔株,StringBuilder沒有實(shí)現(xiàn)線程安全功能,性能略高惭等。通常優(yōu)先考慮使用StringBuilder類
7.1 String類
- String():創(chuàng)建一個包含0個字符串序列的String對象(并不是返回null)
- String(byte[] bytes,Charset charset):使用指定的字符集將指定的byte[]數(shù)組解碼成一個新的String對象
- String(byte[] bytes,int offset,int length):使用平臺默認(rèn)字符集將指定的byte[]數(shù)組從offset開始娃肿,長度為length的子數(shù)組解碼成一個新的String對象
- char charAt(int index):獲取字符串中指定位置的字符
- int compareTo(String anotherString):比較兩個字符串的大小,相等返回0料扰,不相等從頭開始比較,長度不等返回長度差嫂伞,或者返回第一個不相等的字符差
- String concat(String str):講該對象與str連在一起
- boolean contentEquals(StringBuffer sb):將該String對象與StringBuffer對象sb進(jìn)行比較,相同返回true
- static String copyValueOf(char[] data):將字符數(shù)組連綴成字符串
- int indexOf(int ch):找出ch字符在該字符中第一次出現(xiàn)的位置
- int lastIndexOf(int ch):找出ch字符在該字符串中最后一次出現(xiàn)的位置
- String replace(char oldChar,char newChar):替換字符串
- String substring(int beginIndex,int endIndex):截取字符串
- char[] toCharArray()將該String對象轉(zhuǎn)換成char數(shù)組
- String toLowerCase():轉(zhuǎn)小寫
- String toUpperCase():轉(zhuǎn)大寫
7.2 StringBuilder,StringBuffer類
- length屬性:長度,可以改變,通過length(),setLength(int len)
- append(),insert(),replace(),delete(),reverse()
8.Math類
- 無法定義實(shí)例對象,Math提供了靜態(tài)方法帖努,還有PI和E
- 更多用法使用時查API文檔就行了
9.ThreadLocalRandom和Random(Java 7)
ThreadLocalRandom類是Java 7新增的一個類,它是Random的增強(qiáng)版污桦,在并發(fā)訪問的環(huán)境下匙监,使用ThreadLocalRandom來代替Random可以減少多線程資源競爭
- 這兩個類都比Math的random()方法提供了更多的方式來生成各種偽隨機(jī)數(shù)
10.BigDecimal類
為了解決精度丟失(各種計算的時候精度丟失真的是一個很蛋疼的問題)
- 創(chuàng)建BigDecimal對象時,不要直接使用double亭姥,應(yīng)該使用String對象