static の問題4
以下のようなコードがあります。(開始から終了までの部分)
//開始
class Test{
public static void main( String args[ ] ){
StaticTest st = new StaticTest();
st.method1();
st.method2();
StaticTest.method1();
StaticTest.method2();
}
}
class StaticTest{
public void method1( ){ System.out.println( "method1" ); }
public static void method2( ){ System.out.println( "method2" );}
}
//終了
このコードをコンパイルするとコンパイルエラーとなりますが、1文を
削除することで正常にコンパイルできるようになります。
どの文を削除すれば良いか選択肢から選んでください。
a. st.method1();
b. st.method2();
c. StaticTest.method1();
d. StaticTest.method2();
前の問題
解答・解説
次の問題
c. StaticTest.method1();
static の問題4(解説)
今回はクラスメソッドとインスタンスメソッドについての問題です。
static をつけて宣言されたメソッドはクラスメソッドとなります。
この問題の StaticTest クラスの場合 method2 がクラスメソッドに該当します。
クラスメソッドは、クラスが一つだけ保持します。
逆に static をつけずに宣言されたメソッドはインスタンスメソッドとなります。
この問題の StaticTest クラスの場合 method1 がインスタンスメソッドに該当します。
インスタンスメソッドは、生成されたインスタンスが個々に保持します。
今回のコードでどこに問題があるのか、それぞれ選択肢に該当するコードを検討してみましょう。
基本的には、クラスフィールド・インスタンスフィールドと考え方は同じです。
まずは、
st.method1();
についてです。
インスタンスからインスタンスメソッドにアクセスしていますが、これは特に問題ありません。
次に
st.method2();
についてですが、インスタンスからクラスメソッドにアクセスしても特に問題はありません。
なぜならインスタンスは自分が所属するクラスを必ず一つに特定することができるからです。
インスタンスは必ず一つのクラスから生成されるのだから当たり前ですね。
そのため、インスタンスからクラスメソッドにアクセスするという方法が可能なのです。
この考え方は、インスタンスからクラスフィールドにアクセスする場合と全く同じです。
1問目
と
2問目
も参考にして下さいね。
続いて、コンパイルエラーの原因となった
StaticTest.method1();
についてです。
この文ではクラスからインスタンスメソッドにアクセスしようとしています。
しかし Java ではこのようなアクセス方法は認められていません。
理由は、クラス名からではインスタンスを特定できない可能性があるからです。
一つのクラスから生成されるインスタンスは一つであるとは限りません。
複数生成されるかも知れませんし、一つも生成されないかも知れないのです。
こうした場合、クラス名からではどのインスタンスにアクセスすれば良いのか判別できなくなってしまいます。
このような事態が発生するのを防ぐために、 Java では
クラス名からインスタンスメソッドへアクセスすることを禁止しているのです。
そして、もしこのような記述をした場合にはコンパイルエラーとすることになっています。
この問題でも StaticTest.method1( ) という記述は、クラスからインスタンスメソッドへと
アクセスしようとしています。
しかし、このような記述は Java では禁止されているためコンパイルエラーとなります。
これにより解答は c となります。
ちなみに最後の選択肢の
StaticTest.method2();
というクラスからクラスメソッドにアクセスする方法は全く問題ありません。
※注意事項※
ここで使用されている図は、説明を分かりやすくする為に示したものですが、実際メモリ上の
イメージなどを表現しているわけではありません。
あくまでクラスとインスタンスの関係を説明するために、便宜的に利用しているものであることをご理解下さい。
関連ページ:SJC-P対策Java用語集・static
前の問題
この問題
次の問題
|
SJC-P対策問題集
Java認定試験( SJC-P/310-035 )対策のメルマガ問題集も好評発刊中!
もちろん無料です。
またバックナンバーも見やすくしてオンライン問題集として随時アップしていきます。
受験しない人でも Java の基礎知識を学習するのに最適です。
SJC-P対策参考書
現在、Java認定試験(SJC-P/310-035)対策の参考書は本当にたくさん出版されてます。
ここでは、その中から厳選した本当に役立つ参考書を紹介します。
無駄な出費を抑えるためにも、ぜひ参考にして下さい。
SJC-P対策Java用語集
Java認定試験( SJC-P/310-035 )合格のために必要な Java の用語を集めました。
試験対策にはもちろん、試験以外で Java を学習する際にもご活用下さい。
更新履歴
このサイトの最新情報はここで確認できます。
また、今までこのサイトがどのような軌跡を辿ってきたのかも知ることができます。
Javaを始める人へ
これからJavaを始めようとしているあなたへ。
Javaの勉強を始めるにはどうしたら良いのかを説明しています。
また、初心者に役立つ情報を提供していきます。
Java認定資格の概要
Java認定資格にはどのようなものがあるのか。
資格取得のためにはどのような知識が必要なのか。
その他、資格を取得することのメリットなど、Java認定資格の概要を説明します。
LINK
Javaの勉強に役立つリンク。
その他のプログラミングに関するリンク。
ソフトウェアに関するリンクなど、管理人の主観で集めたリンク集です。
相互リンクも常時募集中!
詳細は以下のページで確認して下さい。
このサイトについて
このサイト「1発合格★Java認定試験!」についての説明です。
サイトで掲載しているソースコードや問題や免責事項などについて説明しています。
初めての人は一度のぞいてみて下さい。
ちょっとひと息
仕事や試験勉強に疲れたら、ここでちょっと一息つきませんか。
一生懸命に打ち込むのも良いけど、たまには何も考えずにゆっくり休むのも良いものです。
たまにはのんびり脳みそをリフレッシュしましょう。
|