• ベストアンサー

ソースの実行の順番

現在sjc-pの勉強を行っています。 JAVAがはじめてなので、以下の点でつまずいています。 すみませんが、アドバイスをお願いします。 以下のソースコードはどのような順番で処理されているのでしょうか? mainメソッドの実行の後は、newによってデフォルトコントラクタが呼び出された後、out.method()が呼ばれると思うのですが、これはどこを指しているのでしょうか? 基礎的な事で申し訳ないのですが、実行順番を下のソースコードを使用して解説して頂ければ助かります。 また、classに付与できるアクセス修飾子などが色々な状況において変化するので、理解できません。わかりやすい表になっているサイトなどはないでしょうか? よろしくお願いします。 class outerclass{ public void method(){ final int data1 = 100; final int data2 = 20; class innerclass{ void in_method(){ System.out.println(data1); System.out.println(data2); } } innerclass in = new innerclass(); in.in_method(); } } class test{ public static void main(String[] args){ outerclass out =new outerclass(); out.method(); } }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

回答します。 1 :class outerclass{ 2 : public void method(){ 3 : final int data1 = 100; 4 : final int data2 = 20; 5 : class innerclass{ 6 : void in_method(){ 7 : System.out.println(data1); 8 : System.out.println(data2); 9 : 10: } 11: } 12: innerclass in = new innerclass(); 13: in.in_method(); 14: } 15:} 16:class test{ 17: public static void main(String[] args){ 18: outerclass out =new outerclass(); 19: out.method(); 20: } 21:} 解説しやすいよう、行番号を振りました。 まず19にてよりouterclassのmethod()メソッドを呼び出します。 すると2のmethod()が呼び出されます。 次に12によりinnerclassのインスタンスが作成され、13でin_method()が呼び出されています。 すると、7,8と処理をします。 多分混乱していると思われる部分は5~11のinnerclassの部分かと思われますが、これはouterclass内部で定義されている単なる変数と同等に見たほうが理解しやすいかと思われます。 innerclassのブロック(5~11)は宣言・定義ですので、method()で実処理が行われるのは12のinnerclassをnewする部分からになります。 アクセスレベルの説明なら以下のサイトが参考になるでしょう。 http://www.javaroad.jp/java_class7.htm

arima8874
質問者

補足

ご回答ありがとうございます。 現在どういった動作をするか色々検証しているところです。 また、解せないところで3、4行目のfinalの記述を変更するとコンパイルエラーとなってしまうのはなぜなのでしょうか? すみませんが、再度アドバイスお願いいたします。

その他の回答 (2)

回答No.3

>また、解せないところで3、4行目のfinalの記述を変更すると >コンパイルエラーとなってしまうのはなぜなのでしょうか? ↑についてはこちら↓が参考になるかと。 http://oshiete1.goo.ne.jp/qa2494789.html

回答No.2

実行順序がよくわからなければ、 ところどころに System.out.println("1"); System.out.println("2"); などと入れておけば、どの順番に呼ばれたかわかりますよ。

関連するQ&A

専門家に質問してみよう