クラスファイルはロード後、staticな部分とそれ以外に分離され、それぞれ異なるメモリ領域に保存されます。
staticで修飾されたメンバはstatic領域に配置され、それ以外の定義はmetaspace領域(nativeメモリ)に配置されます。
- インスタンスが生成される時には、metaspace領域にあるクラス定義に従ってヒープ領域にインスタンスの領域が確保される
- staticなフィールドはインスタンスを作らなくても使える
- staticなフィールドにアクセスするには「class名.フィールド名」と記述する。もしくはインスタンスを生成してその参照を使ってアクセスする。
- staticなメンバはインスタンスがなくても使えるのに対し、staticではないメンバはインスタンスがないと使えない。よって、staticなメソッドからstaticではないメンバにアクセスすることはできない
- 逆にstaticではないメソッドからstaticなメンバにアクセスすることは可能
#参考文献
徹底攻略Java SE11 Silver問題集