Javaプログラミングの勉強をはじめたばかりですが、本を見てもいまいちよくわかりません。多分、わからないのはpublic sta…の部分を理解できていないからだと思います。public static void main(String args[])の意味がよくわかりません。public staticはどういう意味なんでしょうか?それとString args[]の部分がなぜ必要なのかがよくわかりません。どなたか教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

argsという名前は文法上の決め事ではなく、「定番」な名前に過ぎません。


ですから、args以外でもコンパイルできて、実行できます。

static とか String args[] をなくした場合、文法上の問題は無いので、コンパイルは出来ます。でも実行できなかったんですよね。それは、Javaのプログラムを実行するときの入り口の形が変わってしまったからです。Javaのプログラムを実行するときに、入り口として、

クラスの外部から呼び出すことが出来る(public)。
クラスのオブジェクトに作用するものではない(static)。
復帰値がない(void)。
mainという名前である。
Stringの配列を引数とする
ようなメソッドを探します。

改造後のmainメソッドは、staticでなくStringの配列を引数としていない為に、入り口としての体を成さなくなったのです。期待した形の入り口が見つからないために、プログラムは実行できなくなります。
    • good
    • 0

>本にはargsという配列で統一しているのですか?


引数を英語では「argument」と書きます。
ここから「arg」という名前がついています。C言語でも多く見られる表現です。
また、最後の「s」は配列だから複数形の「s」です。
配列にならなければ「arg」、配列になれば「args」ですね。

>コンパイルは成功しますが実行できません。これはなぜでしょうか?
Javaのプログラムは「void main(String[])」から実行が開始されます。
>void main(){
とした場合は、引数の型が「(String[])」と「()」で異なるために別のメソッドとて識別されます。
したがって「void main(String[])」型で定義されたメソッドがない場合は実行の開始が出来ません。
    • good
    • 0

public static void main(String args[]) という宣言は、次のことを表しています。



このメソッドは、クラスの外部から呼び出すことが出来る(public)。
このメソッドは、クラスのオブジェクトに作用するものではない(static)。
このメソッドは、復帰値がない(void)。
このメソッドは、mainという名前である。
このメソッドは、Stringの配列を引数とし、その配列にargsという名前を付ける。

publicの部分は、publicの他に、package public(同じパッケージ内からは呼び出せるが他のパッケージからは呼び出せない)、protected(このクラス自身かその派生クラスから呼び出せる)、private(このクラスだけから呼び出せる)というバリエーションがあります。

その他の詳細は、勉強が進んだときにまたどうぞ(ってことで良い?)

この回答への補足

argsは配列の名前ということは別の名称を使っても問題ないんですよね。
ためしに別名でコンパイルし実行することができました。でも、なぜJavaの
本にはargsという配列で統一しているのですか?
それから、staticやString args[]を抜かして下のようなコードでコンパイル
したところコンパイルは成功しますが実行できません。これはなぜでしょうか?

class abc{
void main(){
int x = 50;
System.out.println(x);
}
}

補足日時:2001/03/23 02:01
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QInteger.parseInt()について public static void main(String[] args) { int a =

初歩的な質問だと思うのですが、、、

public class TestTree {

public static void main(String[] args) {

int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);

GreatTree myTree = new GreatTree(a, b);
myTree.makeTree();
myTree.makeGround();
}

}

というプログラムについて、Integer.parseInt()はどういう意味を持つのかがわかりません。ただ適当につけた名前だとは思えないです。教えてもらえたら幸いです。お願いします。

Aベストアンサー

> argsで入力されたものは例え数字でも文字列として扱われているから、それをintにしている。ということですよね?

引数として (String[] args) と設定されていますので、
おっしゃるとおり 引数 args[]配列に入っているものは、文字列です。

ポイントは、 「String[]」でしょうか。。

Qpublic static void main (String args[])

基本すぎて申し訳ありませんが、
public static void main (String args[])とはどういう意味を持っていますか?
教えてください。。

Aベストアンサー

staticとかの意味はNo1の方の説明以外にありません。

mainは最初に実行されるメソッドという説明がされますので、「クラスを実行する時の引数とは?」と引っかかっているのかもしれませんね。
これはコマンドライン引数と呼ばれます。

たとえば、次のプログラム

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

これを
>java ArgsTest abcde fghij(エンター)
として実行するとabcdeとfghijが引数となります。

ちなみに、mainはpublicでstaticなメソッドなので、
public class ArgsTest2{
  public static void main(String args[]){
    tamesi();
  }
  void tamesi(){
    String[] test = {"abcde","fghij"};
    ArgsTest.main(test);
  }
}
のように、外部のクラスからクラス名.mainで呼び出せます。(この2つのプログラムは、私が悩んだ時に試しにつくったものです)

ちなみにargsはarguments(=引数)の略で、mainの引数として、よく使われます。
argvのほうはargument valueの略です。C言語を使っていた人の中にはargvを使う人がいるかもしれません。

staticとかの意味はNo1の方の説明以外にありません。

mainは最初に実行されるメソッドという説明がされますので、「クラスを実行する時の引数とは?」と引っかかっているのかもしれませんね。
これはコマンドライン引数と呼ばれます。

たとえば、次のプログラム

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

...続きを読む

QJAVAの質問です。 ( String args[] )それとも(String[] args) ?

MAINのこの引数ですが、
どちらが正しいのでしょうか?

また、そもそも この[]はなぜ必要なのでしょうか?
配列を意味していますか?

Aベストアンサー

mainに関してだけは (String[] args) が正しい・・・と思いましたが
( String args[] ) でコンパイルも実行も両方通ったのでどちらも正しいようです

配列を意味しています
例えば
String[] hai={"どちらも","正しい","とは","知らなかった"};
String hai[]={"どちらも","正しい","とは","知らなかった"};
ではどちらも配列を宣言した上でhai[0],hai[1],hai[2],hai[3]に文字列を代入しています。

String[] hai=new String[3];
String hai[]=new String[3];
で配列領域を確保してから
hai[0]="どちらも正しい";
のように代入してゆく方法もあります


main(String[] args) のString配列argsの中にはコマンドプロンプトでの実行時にプログラム名の後ろにスペースで分けて入力した文字列が[0]から順に代入されます

実行時に例えばHello.javaを実行するため

java Hello と入力して実行した時はargsには何も入っていませんが

java Hello nyuuryoku shita と入力して実行した時には

Hello.javaが実行された時mainメソッドの中で
args[0]には nyuuryoku が
args[1]には shita が代入された状態になっています

実行と同時に入力した値をプログラム内で使いたい時に用いる変数です

mainに関してだけは (String[] args) が正しい・・・と思いましたが
( String args[] ) でコンパイルも実行も両方通ったのでどちらも正しいようです

配列を意味しています
例えば
String[] hai={"どちらも","正しい","とは","知らなかった"};
String hai[]={"どちらも","正しい","とは","知らなかった"};
ではどちらも配列を宣言した上でhai[0],hai[1],hai[2],hai[3]に文字列を代入しています。

String[] hai=new String[3];
String hai[]=new String[3];
で配列領域を確保してから
hai[0]="どちらも正しい";...続きを読む

Qpublic static void main(String args

public static void main(String args[]) {

public static void main(String[] args) {
は何が違います?

Aベストアンサー

何も違いません。

javaでは配列を宣言する時に、型の後ろに[]をつけても
変数名の後ろに[]を付けてもどちらでもいいことになっています。

Q「String arr[]」 と「String[] arr」の違いは?

「String[] arr」の方が良い理由も教えてください。

Aベストアンサー

String arr[]
はStringクラスの変数がいっぱい
という解釈ね。

String[] arr
はString[] の変数arrを意味するわ。

内部的な処理は同じだけど見た目が違うの。
Javaでは配列も一つのオブジェクトとして扱っているため
String[]クラスのインスタンスであるarrという表現の方がJavaっぽい
という回答になるかな。

蛇足だけど
表現を統一しておけば何かと便利よね。


人気Q&Aランキング

おすすめ情報