前提・実現したいこと
クラスとメンバーがメモリ上でどうなっているかを理解する
該当のソースコード
java
1class AA{ 2 private int i; 3 4 public void AA(){ 5 i = 1; 6 } 7 8 public void hello(){ 9 System.out.println("Hello"); 10 } 11} 12 13class Test{ 14 public static void main(String[] args){ 15 AA aa = new AA(); 16 17 aa.hello(); 18 } 19}
質問
1.AAクラスをインスタンス化する時、つまりメモリ上にインスタンス'aa'を生成する時に、メモリ上のインスタンス'aa'は変数とメソッドとコンストラクタ分のデータを含むのでしょうか?変数だけでしょうか?
2.上記の変数だけの場合は、メソッドやコンストラクタはクラスのメモリ上に存在するのでしょうか?それとも発想自体が間違っているのでしょうか?
わかりにくい質問かもしれませんがお答えいただけると幸いです。
どのような理由があって、それを気にする必要があるのでしょうか?
(何か実際の問題と結びついて気にする必要があるなら、その問題についても明記してください)
昨日、"アップキャストによる参照型変数の変化がわからない" で質問したときに、メソッドがどのように呼び出されるのかが気になって質問させていただきました。また、"hoshi-takanori"さんのアンサーからさらなる疑問が出てきたので勝手ながら追加で質問させていただきます。もしよろしければご回答をよろしくお願いします。
----質問----
1. "hoshi-takanori"さんが仰っているようにインスタンス自体に、変数情報に加えて"どのクラスに属するか”という情報も入っているのでしょうか?
2.インスタンスにはメソッドの情報が入っていないならば、"a.getID()" という文は 参照型変数"a"の型を見てそのクラスのメソッド"getID()"を実行する(つまり、コンピュータがメソッドを参照するとき、参照型変数の指し示す先のインスタンスを参考にメソッドを探すのでなく、参照型変数そのものの型を参考にするということ)と思ったのですが、この認識は正しいでしょうか?
回答2件
あなたの回答
tips
プレビュー