Javaに関する質問です。Eclipseで出てくるエラーの理由について知りたいです。
今、2つのクラスがあります。
ClassEra.java
https://gist.github.com/AuroraNorthernQuarter/855c9dd731f8a00ac505ef11344596f2
Jidai.java
https://gist.github.com/AuroraNorthernQuarter/da1420345ca34e896b2b41147dbee16a
このうち「Jidai.java」の方は、Eclipse上で下記のようなエラーが出てきました。
6行目:static ClassEra[] data = { …(1)
→The field data cannot be declared static in a non-static inner type,unless initialized with a constant expression
21行目:public static void main(String[] args) { …(2)
→メソッドmainはstaticとして宣言できません。staticメソッドは、staticまたはトップ・レベル型においてのみ宣言できます
33行目:catch(IOException e) { ……(3)
→IOExceptionを型に解決できません
42行目:public static void main(String[] args) { …(4)
→メソッドbinarySearchはstaticとして宣言できません。staticメソッドは、staticまたはトップ・レベル型においてのみ宣言できます
(1)?(4)のエラーの理由と、どう書き換えたらエラーが生じなくなるか、お教えいただけないでしょうか。
よろしくお願い致します。
>6行目: static ClassEra[] data = { …(1)
inner クラス(Jidai クラスの内側で宣言されてる ClassBinarySearch クラスのようなやつ)は、外側のクラスのインスタンスがあって、なんぼみたいな動きをします。
この ClassEra は、親の Jidai の static なメンバにしておいた方が、悩むことが少なくなります。
>21行目: public static void main(String[] args) { …(2)
こちらも、エラーになってる理由は、(1) と同じようなもので。
Jidai クラスのメソッドにしてください。
>33行目: catch(IOException e) { ……(3)
java.io.IOException を、import してください。
>42行目: public static void main(String[] args) { …(4)
(2) と同じ理由です。
static じゃないメソッドにして、Jidai クラスのメソッドで ClassBinarySearch のインスタンスを作って呼び出すか、static にしたいなら、Jidai クラスのメソッドにしてください。
質問で提示されたソースの範囲なら、Jidai クラスにはメソッドもメンバもないので、ClassBinarySearch を innerクラスにしない、という方が素直かもしれません。