2012-11-06 46 views

回答

6

否 - 入口點始終是標頭爲public static void main(String[] args)的方法(即JVM調用此特定方法)。你當然可以定義一個方法

public static void main(Animals[] args) {...} 

但它不會在運行程序時直接執行。


EDIT:所述main方法具體有一個字符串數組參數的原因是因爲該數組將包含command-line arguments在程序運行時。直觀地說,這些應該是字符串(例如肯定不是Animal)。

+0

爲什麼Java主要必須有字符串?爲什麼不使用其他類型的對象? –

+0

@davidblaine請參閱我上面的編輯 – arshajii

2

因爲當你從命令行輸入時,你輸入的是字符串,而不是一個複雜的類型。

所以它是有意義的參數是指向字符串的指針(引用)數組,包括或不是(取決於語言)參數的數量。在Java中,這是不需要的,因爲你可以使用length

不知道爲什麼你要嗎?..

+0

這只是一個隨機的想法。 –

1

spec說,它只能處理字符串數組。

+0

但我想知道他們爲什麼這樣做? –

1

沒有任何東西阻止你擁有一個公共靜態void main,它採用String之外的參數類型。問題在於JVM需要簡單的規則來識別和調用方法。它有一系列的字符串,例如從命令行,可以傳遞給程序。在開始運行程序之前,JVM如何將它轉換爲Animal或其他類型的數組?

下面是一個採用不同參數類型的主例程,以及程序本身處理從JVM所具有的字符串數組中生成Animal數組的過程。當然,給第二個主要方法一個更有意義的名字真的會更好。

import java.util.Arrays; 

    public class Bad { 

    public static void main(String[] args) { 
     Animal[] animals = new Animal[args.length]; 
     for (int i = 0; i < args.length; i++) { 
     animals[i] = new Animal(args[i]); 
     } 
     main(animals); 
    } 

    public static void main(Animal[] args) { 
     System.out.println(Arrays.asList(args)); 
    } 

    } 

    class Animal { 
    String species; 

    public Animal(String species) { 
     this.species = species; 
    } 

    public String toString() { 
     return "Animal: " + species; 
    } 
    }