1. 面向對象和面向過程
面向過程
以事務為核心的編程思想,分析出解決問題的步驟,然后用程序按照順序去實現它,面向過程適合簡單的、不需要協作的事務。
面向對象
兩者關系
都是解決問題的思維方式,都是代碼組織的方式。兩者相輔相成,宏觀面向對象,微觀處理還是面向過程。
什么是對象
內存中是一堆代碼塊,表示一些相關聯的數據
對象和類
類可以看做是對象的模板/抽象。
public class SxStudent {
//屬性定義
int id;
String name;
int age;
//定義方法
void study(){
System.out.println("Study..");
}
public static void main(String[] args){
SxStudent stu = new SxStudent();
stu.study();
}
}
面向對象的內存分析
Java虛擬機內存可以分為三個區域:
- 棧stack
- 堆heap
- 方法區method area
棧
1.描述的是方法執行的內存模型,每個方法被調用都會創建一個棧幀(存儲局部變量、操作數、方法出口等)
2.JVM會為每個線程創建一個棧,用于存放該線程執行方法的信息(實際參數、局部變量等)
3.棧屬于線程私有,不能實現線程間的共享
4.棧的存儲特性是“先進后出,后進先出”(子彈夾)
5.棧是由系統自動分配,速度快。棧是一個連續的內存空間。
堆
1.用于存儲創建好的對象和數組
2.JVM只有一個堆,被所有線程共享
3.是一個不連續的內存空間,分配靈活,速度慢
方法區
1.JVM只有一個方法區,被所有線程共享
2.方法區實際也是堆,只是用于存儲類、常量相關的信息
3.用來存放程序中永遠是不變或唯一的內容