2012-11-06 2 views

답변

6

아니요 - 진입 점은 항상 헤더가 public static void main(String[] args) 인 메소드입니다 (즉, JVM이이 특정 메소드를 호출 함). 당신은 확실히 방법을 정의 할 수 있습니다.

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

그러나이 프로그램을 실행할 때 직접 실행되지는 않습니다.


EDIT : 프로그램이 실행될 때,이 배열은 command-line arguments 포함될 때문에 main 방법은 구체적으로는 문자열 배열 인수를 가지는 이유이다. 직관적으로 문자열은 문자열이어야합니다 (예 : Animal).

+0

왜 자바 메인에는 문자열이 있어야합니까? 다른 유형의 객체는 왜 없습니까? –

+0

@ davidblaine 위의 편집을 참조하십시오. – arshajii

2

명령 줄에서 입력 할 때 복잡한 형식이 아닌 문자열을 입력하기 때문에.

따라서 인수가 문자열의 포인터 (참조) 배열 (언어에 따라 다름)의 인수 개수를 나타내는 것이 좋습니다. 자바에서는 length을 사용할 수 있기 때문에 이것이 필요하지 않습니다.

당신이 원하는 것 이유는 확실하지? ..

+0

그것은 단지 임의적 인 생각이었습니다. –

1

spec은 단지 문자열의 배열을 처리 할 수 ​​있다고 말한다.

+0

하지만 그 이유를 알고 싶습니까? –

1

String이 아닌 매개 변수 유형을 사용하는 public static void main을 갖는 것을 막을 수있는 방법은 없습니다. 문제는 JVM이 메소드를 식별하고 호출하기위한 간단한 규칙을 필요로한다는 것입니다. 문자열 배열을 가지고 있습니다. 명령 줄에서 프로그램에 전달할 수 있습니다. JVM은 프로그램 실행을 시작하기 전에 어떻게 그것을 Animal 또는 다른 유형의 배열로 변환할까요?

다음은 다른 매개 변수 유형을 사용하는 main과 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; 
    } 
    } 
관련 문제