JAVA初心者。C言語を経験し、現在、
JAVA言語の記述方法を色々と試している所です。
(環境:Java SDK)

さて。まず、以下の様なclassを宣言しました。
class Girl
{
Stringname ;
doublehight;
doubleweight;

Girl()
{
hight = 173.0 ;
weight = 56.0 ;
}
}
また、(同ファイル)別のクラスで
class Sample15/* 例1 */
{
Girlaiko ;
aiko = new Girl() ;
}
としました所、「<identifier> がありません」というエラーメッセージが出ました。
しかし、以下の様な記述にすると……
class Sample15/* 例2 */
{
Girlaiko = new Girl() ;
}
何故か? エラーが出ません。しかし、
class Sample15/* 例3 */
{
static void main(String[] args)
{
Girlaiko ;
aiko = new Girl() ;
}
}
とmain関数の中で/*例1*/のように記述すると、コンパイルが通りました。
これはどういう理由からなのでしょうか?
(C言語等の経験からすると、なんだか釈然としません)

以上、よろしくお願いします。

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

A 回答 (3件)

> 例1と例2は{}の中を「1行で書くか?2行で書くか?」


> の「書式の違い」だけだ、と思うのですが。
「『書式の違い』だけ」ではありません。
例1はaikoという名前のGirl型フィールドを定義し、その後でaikoに生成したGirlインスタンスの代入という処理を行おうとしています。しかし、例1の箇所では定義はできても処理は行えないためコンパイルエラーとなります。
その一方、例2はaikoという名前のGirl型フィールドを、Girl型インスタンスを生成して初期値とすることを含めて定義しています。実際にGirlインスタンスが生成されるのはSample15インスタンスを生成するときです。
    • good
    • 0
この回答へのお礼

(1)「定義はしているが、メソッド内では無いので、代入処理は行えない」
(2)「初期値することを含めて、定義している」
こんな感じの理解でいいのでしょうか?

ありがとうございました。

お礼日時:2011/04/26 22:36

「<identifier> がありません」というエラーメッセージが出ました。


と書かれていますが, エラーメッセージには「どの行の」「どの辺に」エラーがあったのかを示すマーカもついているはずです.

エラーは何行目のどの辺に出ていますか? それは本当にこの質問に挙げているところですか?
    • good
    • 0
この回答へのお礼

その辺は何度も確認しました。
「<identifier> がありません、のエラーメッセージに惑わされたようです。
ありがとうございました。

お礼日時:2011/04/26 22:39

C言語の学習経験がおありということですので、C言語の場合で以下の2つのコードの記述が可能かを考えてみてください。

そうすれば例1のケースがエラーになっても不思議ではないことに納得がいくと思います。

(1)
int g_value;
g_value = 42;
/* int g_value = 42; は問題ない */

(2)
struct Sample15C
{
int value;
value = 42;
};
    • good
    • 0
この回答へのお礼

ありがとうございます。

Tabが全部、消えてしまって、非常に見ずらいですね。
まず、書き直してみます。

例1:
class Sample15/* × */
{
Girl aiko ;
aiko = new Girl() ;
}
例2:
class Sample15/* ○ */
{
Girl aiko = new Girl() ;
}

例1と例2は{}の中を「1行で書くか?2行で書くか?」
の「書式の違い」だけだ、と思うのですが。

しかし、それで結果が変わってしまうのは、
struct Sample15
{
int i ;
i = 0 ;
}
がNGなのに、
struct Sample15
{
int i = 0 ;
}
なら、コンパイルを通ってしまうような「文法的な矛盾」を感じるのですが。

お礼日時:2011/04/26 04:19

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


人気Q&Aランキング

おすすめ情報