溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java中main()方法的使用方法

發(fā)布時(shí)間:2020-10-10 17:12:57 來源:億速云 閱讀:146 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹了Java中main()方法的使用方法,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

Java程序的入口---main()方法的簽名為:public static void main(String[] args) {...} ,其中,

? public修飾符:Java類由JVM調(diào)用,為了讓JVM可以自由調(diào)用這個(gè)main()方法,所以使用public修飾符把這個(gè)方法暴露出來。

? static修飾符:JVM調(diào)用這個(gè)主方法時(shí),不會(huì)先創(chuàng)建該主類的對(duì)象,然后通過對(duì)象來調(diào)用該主方法。JVM直接通過該類來調(diào)用主方法,因此使用static修飾該主方法。

? void返回值:因?yàn)橹鞣椒ū籎VM調(diào)用,該方法的返回值將返回給JVM,這沒有任何意義,因此main()方法沒有返回值。

上面方法中還包括一個(gè)字符串?dāng)?shù)組形參String[] args,根據(jù)方法調(diào)用的規(guī)則:誰(shuí)調(diào)用方法,誰(shuí)負(fù)責(zé)為形參賦值。也就是說,main()方法由JVM調(diào)用,即args形參應(yīng)該由JVM負(fù)責(zé)賦值。但JVM怎么知道為args數(shù)組賦值呢?先看下面程序:

public class ArgsTest{
  public static void main(String[] args){
    //輸出args數(shù)組的長(zhǎng)度
    System.out.println(args.length);
    //遍歷args數(shù)組的每一個(gè)元素
    for(String arg : args){
      System.out.println(arg);
    }
  }
}

上面程序是最簡(jiǎn)單的“hello world”程序,只是這個(gè)程序增加了輸出args數(shù)組的長(zhǎng)度,遍歷arg數(shù)組元素的代碼。使用java ArgsTest命令運(yùn)行上面的程序,看到程序僅僅輸出一個(gè)0,這表明args數(shù)值是一個(gè)長(zhǎng)度為0的數(shù)組,這是合理的,因?yàn)橛?jì)算機(jī)是沒有思考能力的,它只能忠誠(chéng)地執(zhí)行用戶交給它的任務(wù),既然程序沒有給args數(shù)組設(shè)定參數(shù)值,那么JVM就不知道args數(shù)組的元素,所以JVM將args數(shù)組設(shè)置為一個(gè)長(zhǎng)度為0的數(shù)組。

改為一下命令運(yùn)行上面的程序:

java ArgsTest Java Spring

打印結(jié)果為:

2
Java
Spring

可以得出,如果運(yùn)行java程序時(shí)在類名后面緊跟一個(gè)或多個(gè)字符串(多個(gè)字符串以空格隔開),JVM就會(huì)把這些字符串一次賦值給args數(shù)組元素。運(yùn)行Java程序時(shí)的參數(shù)與args數(shù)組之間的關(guān)系為:第一個(gè)參數(shù)對(duì)應(yīng)第一個(gè)數(shù)組元素,第二個(gè)參數(shù)對(duì)應(yīng)第二個(gè)數(shù)組元素,... ,以此類推。

如果某參數(shù)本身包含了空格,則應(yīng)該將該參數(shù)用雙引號(hào)""括起來,否則JVM會(huì)把這個(gè)空格當(dāng)成參數(shù)分隔符,而不是當(dāng)成參數(shù)本身。例如,采用如下命令來運(yùn)行上面的程序:

java ArgsTest "Java Spring"

看到args的長(zhǎng)度是1,只有一個(gè)數(shù)組元素,其值是Java Spring。

問題:如何實(shí)現(xiàn)在main()方法執(zhí)行之前輸出"hello world"?

眾所周知,在Java語(yǔ)言中,main()方法是程序的入口方法,在程序運(yùn)行時(shí),最先加載的就是main()方法,但這是否意味著main()方法就是程序運(yùn)行時(shí)第一個(gè)被執(zhí)行的模塊呢?

答案是否定的。在Java語(yǔ)言中,由于靜態(tài)塊在類被加載時(shí)就會(huì)被調(diào)用,因此可以在main()方法執(zhí)行前,利用靜態(tài)塊實(shí)現(xiàn)輸出“hello world”的功能,示例如下:

public class Test{
  static{
    System.out.println("hello world");
  }
  public static void main(String[] args){
    System.out.println("hello my world");
  }
}

程序運(yùn)行結(jié)果為:

hello world
hello my world

由于靜態(tài)代碼塊不管順序如何,都會(huì)在main()方法執(zhí)行之前執(zhí)行,因此,以下代碼會(huì)與上面的代碼有同樣的輸出結(jié)果:

public class Test{
  public static void main(String[] args){
    System.out.println("hello my world");    
    static{
      System.out.println("hello world");
    }
  }
}

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享Java中main()方法的使用方法內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細(xì)的解決方法等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI