1

「OCP Java SE 6 Programmer Practice Exams (Exam 310-065)」Assessment test 2 の問題。

与えられた:

public class WeatherTest {
static Weather w;

public static void main(String[] args) {
    System.out.print(w.RAINY.count + " " + w.Sunny.count + " ");
}

enum Weather {
    RAINY, Sunny;
    int count = 0;

    Weather() {
        System.out.print("c ");
        count++;
    }
}
}

結果は?

A. c 1 c 1

B. c 1 c 2

C. cc 1 1

D.cc 1 2

E.cc 2 2

F. コンパイルが失敗します。

G. 実行時に例外がスローされます。

本に書かれている答えはC.

しかし、このコードを実行しようとすると、「静的フィールド WeatherTest.Weather.RAINY は静的な方法でアクセスする必要があります」というコンパイル エラーが発生します。

どちらが正しいと予想されますが、インターネット上で誰も文句を言っていないので、何か不足しているのではないかと思いますか? Javaのバージョンとか関係あるの?

4

2 に答える 2

2

ここc c 1 1でテストできるように、本は正しく、正解は Cです。

このエラーは、警告からプロモートされた IDE によって生成されます。すべてのコードを正しくコピーして貼り付けたと仮定します。その試験の準備には IDE を使用せず、最も単純なテキスト エディタとjavac.

Java のバージョンとは関係ありません。Java SE 6 以降のすべてのバージョンで同じように機能します。

最後になりましたが、そのようなコードは絶対に書かないでください。これはただの試験ホクスポクス...

于 2015-05-06T16:53:46.723 に答える
1

コードがコンパイルされ、回答 C が返されます。

起こっていることは、混乱を招くため、クラスのインスタンスの静的メンバーにアクセスしてはならないという警告が IDE から発行されていることだけです。実際には静的であるのに、インスタンス フィールドのw.RAINYように見せます。RAINYこの場合w、実際にはnull. 静的メンバーにアクセスする通常の方法は、 を使用することClassName.memberです。ここに書くべきWeather.RAINYです。

于 2015-05-06T17:06:36.473 に答える