“문자열 인수 []”란 무엇입니까? 기본 메소드 Java의 매개 변수


315

방금 Java로 프로그램을 작성하기 시작했습니다. 다음 Java 코드는 무엇을 의미합니까?

public static void main(String[] args)
  • 무엇입니까 String[] args?

  • 언제 사용 args합니까?

소스 코드 및 / 또는 예제는 추상 설명보다 선호

답변:


302

Java args에서는 제공된 명령 행 인수String 객체 있습니다.

즉, 프로그램을 실행하면 java MyProgram one two다음 args이 포함 ["one", "two"]됩니다.

의 내용을 출력하려면 다음 args과 같이 반복하십시오.

public class ArgumentExample {
    public static void main(String[] args) {
        for(int i = 0; i < args.length; i++) {
            System.out.println(args[i]);
        }
    }
}

51
주목할 점은 args반드시 이름을 지정할 필요는 없지만 args(원하는 이름을 지정할 수 있음) 관례를 따르는 것이 가장 좋습니다. 당신은 또한 String... args때때로 볼 수 있습니다 .
vikingsteve

68
args 인덱싱은 0에서 시작합니다. (프로그램 이름을 제공하는 C와 달리)
AdrieanKhisbe

1
@Daniel, argsOS에 관계없이 공백으로 구분되어 있습니까?
Pacerier

@Pacerier 죄송합니다. 너무 늦어서 소스가 없지만 강력하게 믿습니다. java (.exe)가 기본 쉘 / 터미널이 아닌 인수를 처리하는 것처럼 보입니다. -version예를 들어, java -versionand java.exe -version이지만 java.exe /version(main class를로드하려고 시도 하지 않음)를 생각해보십시오 .version. 누군가가 이것에 걸려 넘어지면 내 2 센트.
Luke

1
@Luke 적어도 Unix 시스템에서는 그렇지 않습니다. 쉘은 쉘의 규칙에 따라 이미 분할 된 프로그램에 인수를 전달합니다 (따옴표 / 이스케이프는 적절하게 제거됨). 프로그램 (이 경우 Java 인터프리터)이 원래의 분리되지 않은 명령 행에 액세스 할 수있는 방법이 없으며 사용자를 혼란스럽게하기 때문에 그렇게하지 않아야합니다.
regnarg

112

이것들은 Java의 명령 행 인수를위한 것입니다.

다시 말해, 달리면

자바 MyProgram 하나 둘

그런 다음 args포함합니다 :

[ "하나 둘" ]

public static void main(String [] args) {
    String one = args[0]; //=="one"
    String two = args[1]; //=="two"
}

그 이유는 특정 방식으로 실행하거나 필요한 정보를 제공하도록 응용 프로그램을 구성하기 때문입니다.


Java를 처음 사용하는 경우 공식 Oracle Java Tutorials를 읽으십시오 .


45

args호출시 Java 프로그램에 전달 된 명령 행 인수를 포함합니다. 예를 들어 프로그램을 다음과 같이 호출하면

$ java MyProg -f file.txt

그 후는 args문자열을 포함하는 배열 것 "-f""file.txt".


답변 해주셔서 감사합니다.
Chaklader Asfak Arefe

먼저 javac MyProg.java실행하고 실행하는 것보다 코드를 컴파일해야했습니다 java MyProg -f file.txt. 답변에 언급 된 곳이 없기 때문에 이에 대한 이유가 있습니까?
stanimirsp

@stanimirsp : .class먼저 Java 소스 코드를 파일 로 컴파일해야합니다 .
mipadi

19

다음 답변은 내 이해 및 일부 테스트를 기반으로합니다.

String [] 인수 란 무엇입니까?

답변->

String [] -> 아시다시피 이것은 간단한 String 배열입니다.

args- >는 배열의 이름입니다. 예를 들어, 컴파일러 및 실행 및 테스트에 문제가없는 것 (예 : ar, argument, param, parameter) 일 수 있습니다.

예)
1) 공공 정적 void main (String [] 인수)

2) 공공 정적 void main (String [] 매개 변수)

이 인수를 언제 사용 하시겠습니까?

Ans->

주요 기능은 개발자가 매우 지능적으로 설계했습니다. 실제 사고는 매우 깊습니다. 기본적으로 커맨드 라인 인수를 기반으로 C & C ++을 고려하여 개발되었지만 현재는 더 이상 사용하지 않습니다.

1- 사용자는 명령 행에서 모든 유형의 데이터를 입력 할 수 있습니다. 숫자 또는 문자열 일 수 있으며 컴파일러가 사용해야하는 데이터 유형은 무엇입니까? 2를 참조하십시오

Thing 2- String은 Java의 int, long, float, double, byte, shot, char와 같은 모든 기본 데이터 유형을 지원하는 데이터 유형입니다. 모든 기본 데이터 유형에서 쉽게 구문 분석 할 수 있습니다.

예를 들어 다음 프로그램은 컴파일 및 실행되며 테스트되었습니다.

입력이-> 1 인 경우

// one class needs to have a main() method
public class HelloWorld
{
  // arguments are passed using the text field below this editor
  public static void main(String[] parameter)
  {    
System.out.println(parameter[0] + parameter[1]); // Output is 11

//Comment out below code in case of String
    System.out.println(Integer.parseInt(parameter[0]) + Integer.parseInt(parameter[1])); //Output is 2
    System.out.println(Float.parseFloat(parameter[0]) + Float.parseFloat(parameter[1])); //Output is 2.0    
    System.out.println(Long.parseLong(parameter[0]) + Long.parseLong(parameter[1])); //Output is 2    
    System.out.println(Double.parseDouble(parameter[0]) + Double.parseDouble(parameter[1])); //Output is 2.0    

  }
}

13

OP조차도에 대해서만 이야기 String[] args하고 public static void main(String[] args)있습니다.

Public:는 이 메소드에 액세스 할 수있는 사용자를 정의 하는 액세스 수정 자 입니다. 공개는 모든 클래스에서이 메소드에 액세스 할 수 있음을 의미합니다 (다른 클래스가이 클래스에 액세스 할 수있는 경우).

Static: 클래스 관련 사항을 식별하는 키워드입니다. 이는 주어진 메소드 또는 변수가 인스턴스 관련이 아니라 클래스 관련임을 의미합니다. 클래스 인스턴스를 만들지 않고도 액세스 할 수 있습니다.

Void: 메소드의 리턴 유형을 정의하는 데 사용됩니다. 메소드가 리턴 할 수있는 것을 정의합니다. 무효는 메소드가 값을 반환하지 않음을 의미합니다.

main:는 메소드의 이름입니다. 이 메소드 이름은 특정 서명 만있는 애플리케이션의 시작점으로 JVM에서 검색합니다.

String[] args :는 기본 메소드의 매개 변수입니다.

JDK 소스 코드 (jdk-src \ j2se \ src \ share \ bin \ java.c)를 살펴 보는 경우 :

/* Get the application's main method */
mainID = (*env)->GetStaticMethodID(env, mainClass, "main",
                   "([Ljava/lang/String;)V");
...
{    /* Make sure the main method is public */
...
mods = (*env)->CallIntMethod(env, obj, mid);
if ((mods & 1) == 0) { /* if (!Modifier.isPublic(mods)) ... */
    message = "Main method not public.";
    messageDest = JNI_TRUE;
    goto leave;
...

java 의 시작 메소드 는 이름이 지정 main되어야하며 특정 서명이 있어야합니다.public static void main(String[] args)

코드는 또한 public static void main(String[] args)(jdk-src \ j2se \ src \ share \ bin \ java.c)의 코드를 다른 서명으로 변경하면 작동하지 않지만 다른 변경 가능한 문제가 발생할 수 있음을 알려줍니다. 자바 사양으로 인해

오프 토픽 : OP가이 질문을 한 지 7 년이 지났습니다. OP는 지금까지 자신의 질문에 대답 할 수 있다고 생각합니다.


12

String [] args Java로 문자열 배열을 선언하는 방법도 있습니다.

이 메소드 시그니처에서, args메소드가 호출 될 때 배열 이 값으로 채워집니다 (여기의 다른 예에서 보듯이). 그래도 배우고 있으므로이 args배열은 다음과 같이 메서드에서 직접 배열을 만든 것과 같습니다.

public void foo() {
    String [] args = new String[2];
    args[0] = "hello";
    args[1] = "every";

    System.out.println("Output: " + args[0] + args[1]);

    // etc... the usage of 'args' here and in the main method is identical
}

12

나는 헤어질 것이다

public static void main(String args[])

부분적으로.

"public" 은 어디서나 main ()을 호출 할 수 있음을 의미합니다.

"정적" 은 main ()이 특정 객체에 속하지 않음을 의미합니다

"void" 는 main ()이 값을 반환하지 않음을 의미

"main" 은 함수의 이름입니다. main ()은 프로그램의 시작이므로 특별합니다.

"문자열 []" 은 문자열 배열을 의미합니다.

"args" 는 String []의 이름입니다 (main ()의 본문에 있음). "args"는 특별하지 않다. 다른 이름을 지정할 수 있으며 프로그램은 동일하게 작동합니다.

  • String[] args공백으로 구분 된 문자열 모음으로 터미널의 프로그램에 입력 할 수 있습니다. 초보자는이 변수를 사용하지 않지만 여러 번 항상 사용할 수 있습니다.

9

코드를 완성하면 확장자가 .java 인 파일로 코드를 두 번 클릭하여 실행할 수 있지만 콘솔 (Mac의 경우 터미널, Windows의 경우 cmd.exe)을 통해 실행할 수 있습니다. 많은 것들. 한 번은 콘솔 메시지 (System.out.print 또는 System.out.println)가 두 번 클릭되는지 확인할 수 없다는 것입니다. 그들이 할 수있는 또 다른 일은 매개 변수를 지정하는 것이므로 일반적으로 줄을 사용합니다.

java -jar MyCode.jar

프로그램 폴더로 이동 한 후

cd C:My/Code/Location

창문이나

cd My/Code/Location

코드를 실행하려면 Mac에서 (mac는 덜 덜 거칠다는 점에 유의) 매개 변수를 지정하십시오.

java -jar MyCode.jar parameter1 parameter2

프로그램에서 사용할 수있는 args 배열에 저장된 이러한 매개 변수는 사용자가 사용할 파일 또는 프로그램의 메모리 용량과 같은 특수 매개 변수를 사용자가 제어 할 수 있도록하려는 것입니다. 배열을 사용하는 방법을 알고 싶다면이 사이트에서 주제를 찾거나 Google에서 검색하십시오. 여러 개의 매개 변수를 사용할 수 있습니다.


9

간단한 평신도의 언어로 설명하십시오.

주요 메소드는 JVM을 클래스 이름으로 지정할 때 몇 가지 인수를 제공 할 것으로 기대합니다. 즉, 파일 이름이 Try.java라고 가정하면 명령 프롬프트에서이를 실행하려면 "javac Try.java"를 작성하고 컴파일 한 다음 "java Try"를 실행해야합니다. 이제 단순히 "java Try"를 작성하는 대신 "java Try 1"을 작성한다고 가정하십시오. 여기에 인수 "1"을 전달했습니다. 코드에서 사용하지 않더라도 기본 방법으로 가져옵니다.

기본 메소드가 실제로 "1"인수를 사용했는지 여부를 확인하려는 경우. 기본 메소드 안에 간단히 다음을 입력하십시오.

for(int i = 0; i < args.length; i++) {
        System.out.println("Argument is: "+args[i]);
    }

7

나는 위의 답변으로 꽤 잘 설명되어 있다고 생각합니다. 이는 String args[]단순히 실행할 때 응용 프로그램에 전달할 수있는 문자열 인수의 배열입니다. 완료를 위해 main메소드에 전달 된 메소드 매개 변수를 String 유형의 변수 인수 (varargs) 로 정의하는 것도 유효 함을 추가 할 수 있습니다 .

public static void main (String... args)

즉, main메소드는 메소드 배열로 String 배열 ( String args[]) 또는 varargs ( String... args)를 승인해야합니다 . 그리고 그 이름을 가진 마술도 없습니다 args. 아래 예와 같이 글을 arguments쓰거나 freddiefujiwara표시 할 수도 있습니다 .

public static void main (String[] arguments)

public static void main (String[] freddiefujiwara)


6

콘솔에서 Java 클래스가 실행될 때 주요 메소드가 호출됩니다. 이를 위해서는이 주요 방법의 정의가 다음과 같아야합니다.

public static void main(String [])

이 문자열 배열을 args라고하는 사실은 표준 규칙이지만 반드시 필요한 것은 아닙니다. 프로그램을 호출하면 명령 행에서이 배열을 채 웁니다.

java MyClass a b c

이들은 일반적으로 프로그램의 옵션 (예 : 쓰거나 읽을 파일)을 정의하는 데 사용됩니다.


6

공공 정적 무효 메인 (문자열 인수 []) 인수 데이터 String 유형 콘솔 라인 인수의 배열이다. 이 배열에서는 아래와 같이 명령 행에서 다양한 문자열 인수를 호출하여 저장할 수 있습니다. java myProgram Shaan Royal 그런 다음 Shaan 및 Royal은 배열에 arg [0] = "Shaan"으로 저장됩니다. arg [1] = "로얄"; 명령 줄에서 호출하지 않으면 프로그램 내에서 수동으로이 작업을 수행 할 수 있습니다.


3

스타일 dataType[] arrayRefVar이 선호됩니다. 이 스타일 dataType arrayRefVar[]은 C / C ++ 언어에서 유래했으며 C / C ++ 프로그래머를 수용하기 위해 Java로 채택되었습니다.


1

String[] args매개 변수는 OS에서 명령 행을 통해 애플리케이션을 실행할 때 매개 변수로 전달 된 문자열 배열입니다.

따라서 myApp.jarJava 애플리케이션을 컴파일하고 패키지했다고 가정하십시오 . 물론 OS에서 앱을 두 번 클릭하여 실행할 수 있지만 다음과 같은 명령 줄 방식으로 실행할 수도 있습니다 (예 : Linux의 경우).

user@computer:~$ java -jar myApp.jar

응용 프로그램을 호출하면 다음과 같은 일부 매개 변수를 전달합니다.

user@computer:~$ java -jar myApp.jar update notify

java -jar명령은 문자열을 전달합니다 update그리고 notify당신에 public static void main()방법.

그런 다음 다음과 같은 작업을 수행 할 수 있습니다.

System.out.println(args[0]); //Which will print 'update'
System.out.println(args[1]); //Which will print 'notify'

0

이전의 모든 의견 외에도.

public static void main(String[] args) 

로 쓸 수 있습니다

 public static void main(String...arg)

또는

 public static void main(String...strings)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.