最近接觸OOP面向對象,學習了OOP、this、super、package、extends還有override,整體來說如果不清楚內存的流程的話,對這些知識會很混淆,在老師的幫助下,花了一張圖,能清楚的標示出代碼在內存中的流程
內存大致分為四個區域:1、靜態數據區 2、棧 3、堆 4、靜態數據區
編碼,編譯,調用運行,加載Jvm就不細說了,大家應該都清楚。
代碼首先在靜態代碼段開辟空間並命名,然後方法並在棧內存中開辟空間,在對內存中開辟空間,將對應的類復制到堆內存中,賦值並進行構造函數的代碼運算,最後將堆內存中對象的地址復制給對應的類的變量。
具體舉例代碼:
public class OOP_05{ public static void main(String[] args){ Animal a = new Animal(10); m_1(a); System.out.println( "main----->" + a.age ); System.out.println( a ); } public static void m_1(Animal a){ a.age++; System.out.println( "m_1 --->" + a.age ); } } class Animal{ //Field int age; //Constructor Animal(int _age){ age = _age; } }
搞清流程時,必須先清楚類的組成有什麼:大致分為九類,1、入口方法 2、靜態變量 3、靜態方法 4、成員變量 5、成員方法 6、構造方法 7、靜態代碼段 8、成員代碼段 9、抽象方法
要知道內存中數據不能跨域訪問,否則會報錯,靜態方法不能調用非靜態方法
調用方法必須先開辟棧幀