大家都知道,JAVA語言運(yùn)行程序的入口方法叫做main,這個(gè)方法有一個(gè)參數(shù),這就表示說,我們要運(yùn)行主方法,就必須給main方法傳遞一個(gè)參數(shù)。但是,大家似乎對這個(gè)參數(shù)向來都是視而不見,從來都沒給主方法傳遞過參數(shù)。main作為Java程序運(yùn)行的第一個(gè)方法,我們應(yīng)該從哪里給這個(gè)方法傳遞參數(shù)呢?今天我們就用一篇短文來聊聊這個(gè)話題。
如何給main方法傳遞參數(shù)
大家請看下面這段代碼

這是一段誰都能看懂的代碼。通過代碼我們可以看到,main方法的參數(shù)是一個(gè)字符串?dāng)?shù)組,既然是一個(gè)字符串?dāng)?shù)組,就會(huì)包含多個(gè)字符串。那么,我們通過怎樣的方法能把多個(gè)字符串?dāng)?shù)組傳遞給main方法呢?很簡單,我們在運(yùn)行Java程序的時(shí)候,在java命令后面寫上main方法所在的類名,在類名后面加空格,空格后面再寫上多個(gè)字符串,每個(gè)字符串之間也以空格隔開,就能把這些字符串傳遞給main方法。當(dāng)然,這些字符串會(huì)被組織成一個(gè)字符串?dāng)?shù)組傳遞到main方法當(dāng)中,見下圖

我們可以看到,在類名A的后面是一個(gè)空格,空格后面有兩個(gè)字符串,分別是“Hello”和“World”,這兩個(gè)字符串之間也用空格隔開,它們就是程序員傳遞給main方法的參數(shù),這兩個(gè)字符串會(huì)被虛擬機(jī)組織成一個(gè)字符串?dāng)?shù)組。main方法中打印參數(shù)數(shù)組中下標(biāo)為0那個(gè)的元素,所以輸出結(jié)果就是“Hello”
參數(shù)字符串中包含空格如何處理
我們給main方法傳遞參數(shù)的時(shí)候,各個(gè)字符串之間是以空格隔開的,如果某個(gè)字符串中本身就包含空格,那么原本是一個(gè)整體的字符串就會(huì)被分割成兩個(gè),此事如何是好?在這種情況下,我們?yōu)榱俗尠崭竦淖址惶摂M機(jī)當(dāng)作是一個(gè)整體,可以給字符串的兩端加上引號,見下圖

這一次我們給main方法傳遞了兩個(gè)字符串作為參數(shù),其中第一個(gè)參數(shù)是“Hello World”,這個(gè)字符串中有一個(gè)空格,但是我們在字符串兩端加了引號,虛擬機(jī)就會(huì)把引號當(dāng)中的空格看作是字符串中的一個(gè)普通字符,而不是把它當(dāng)作分隔字符串的分隔符,所以運(yùn)行結(jié)果就是“Hello World”。
參數(shù)字符串中包含引號如何處理
為了讓包含空格的字符串被虛擬機(jī)當(dāng)作整體看待,我們把這個(gè)字符串的兩端加上了空格,但是這又會(huì)引發(fā)一個(gè)問題,那就是:如果參數(shù)字符串中又包含引號該怎么辦呢?此時(shí)我們就需要用轉(zhuǎn)義字符的形式書寫參數(shù)字符串中的引號,見下圖

把字符串中的引號以轉(zhuǎn)義字符的形式書寫,就能正確的把包含引號的字符串當(dāng)作參數(shù)傳遞給main方法。
未傳遞參數(shù)的情況下打印參數(shù)數(shù)組元素情況如何
如果我們沒有給main方法傳遞參數(shù),就直接打印參數(shù)數(shù)組args當(dāng)中的元素,會(huì)怎么樣?很多人認(rèn)為此時(shí)程序運(yùn)行會(huì)拋出空指針異常。其實(shí)不然,虛擬機(jī)會(huì)創(chuàng)建一個(gè)長度為0的字符串?dāng)?shù)組傳遞到main方法中,我們訪問這個(gè)長度為0的數(shù)組,拋出的是數(shù)組越界異常,而非空指針異常。不要忘記,Java語言的數(shù)組長度是允許為0的哦!

看短文,漲姿勢,如想系統(tǒng)學(xué)習(xí)Java編程,點(diǎn)擊下方的“了解更多”即可,不讓你進(jìn)去,用QQ登錄就可以啦!有問題也可以加入我的QQ群一起討論!