面向?qū)ο?面向過程
弊端不能知道是哪個主體干了些什么事情

static void buy() {
System.out.println("拿錢買菜");
}
static void doFood() {
System.out.println("做飯");
}
public static void main(String[] args) {
buy();
doFood();
}
面向?qū)ο笏枷?/strong>

面向?qū)ο蟮哪康?
1.將復(fù)雜的事情簡單化
2.面向?qū)ο髮⒁郧暗倪^程中的執(zhí)行者變成了指揮官
3.面向?qū)ο筮@種思想是符合現(xiàn)在人們思考習(xí)慣的一種思想
面向?qū)ο蟮娜筇匦?/strong>
封裝/繼承/多態(tài)


類
把具有相同"特性"和"行為"的多個對象的抽象就是類.
找多個對象共同的狀態(tài)和行為
用來描述事物
具體 某個事物
如下面每一個狗都是一個對象,它們都是狗類

對象和類的區(qū)別,對象是具體到一個人,類是人的集群

類的實例化(描述一個人)
把類具體到某一個對象上面,該對象有具體的什么狀態(tài)特征和什么行為

實例化對象

對象的一些狀態(tài)特征 用 成員變量來表示
對象的行為 用 方法表示
類的創(chuàng)建通常是開一個文件

類的實例化

對象的創(chuàng)建
在程序中,必須先有類,再有對象(先得有模板,再有根據(jù)模板制造出來的個體)
創(chuàng)建對象: 類 對象名 = new 類名()
Person zz = new Person();
賦值:描述狀態(tài)具體的值(定義類時是什么類型,賦值是要賦值什么類型)
賦值:對象.變量名=值
zz.age = 18;
zz.name = "我豬";
zz.height = 1.65;
取值:變量=對象名.變量名
String name= zz.name;
System.out.println(name);
對象調(diào)用方法:對象名.方法名([實參])
zz.sing("每一明天也是你");
JVM的內(nèi)存劃分
JVM將內(nèi)存主要劃分為:方法區(qū) 棧 本地方法棧 堆 程序計數(shù)器

方法區(qū)存:又叫靜態(tài)區(qū),存放所有的class和static變量;方法分區(qū)中包含的都是在程序中永遠(yuǎn)的唯一元素
虛擬機(jī)棧:執(zhí)行引擎每調(diào)用一個函數(shù)是,就為這個函數(shù)創(chuàng)建一個棧幀,并加入虛擬機(jī)棧.換個角度理解,每個函數(shù)從調(diào)用到執(zhí)行結(jié)束,其實是對應(yīng)一個棧幀的入棧和出棧
本地方法區(qū):本地方法棧與虛擬機(jī)棧所發(fā)揮的作用很相似,他們的區(qū)別在于虛擬機(jī)棧為Java代碼方法服務(wù),而本地方法棧是為Native方法服務(wù)
堆:被所有線程共享的一塊區(qū)域,在虛擬機(jī)啟動是創(chuàng)建,所有的對象實例及數(shù)組都在堆上分配(使用new關(guān)鍵字,表示在堆中開辟一塊新的存儲空間)
程序計數(shù)器:每個線程的有個計數(shù)器幾率當(dāng)前執(zhí)行到哪個指令.可以把它看成是當(dāng)前限倉呢過所執(zhí)行的字節(jié)碼的行號指示器.
棧是一種數(shù)據(jù)結(jié)構(gòu)
特點:先進(jìn)后出(FILO)
例如:先穿襪子再穿鞋子,先脫鞋子再脫襪子
入棧:把元素放到棧里
棧頂:棧中的第一個元素
棧底:棧中的最后一個元素
出棧:把元素從棧中移除

static void sum(int a, int b) {
System.out.println(a + b);
}
public static void main(String[] args) {
int x = 10;//main方法率先入棧
sum(10,20);//sum方法進(jìn)棧
}
sum方法先出棧,main方法后出棧
執(zhí)行完一個方法,它的棧幀就會出棧

堆的數(shù)組初始化與GC
1.int[] ages 聲明了一個int類型的數(shù)組ages
2.new int[] {10,20,30,40}; 在堆當(dāng)中初始化數(shù)組
3.把初始化的地址賦值給了ages
int[] ages=new int[] {10,20,30};
System.out.println(ages);//[I@7852e922 打印出來的是一個內(nèi)存地址
4.在堆中初始化了一個新的數(shù)組,把數(shù)組的地址重新賦值給了ages
ages=new int[] {40,50,60};

GC:垃圾回收機(jī)制
Java是自動回收機(jī)制:
程序員不需要再動手控制內(nèi)存的釋放
當(dāng)JVM發(fā)現(xiàn)內(nèi)存資源緊張的時候,會自動的清理無用的對象

對象堆的內(nèi)存分析

NullPointerException 報錯,空指針

基本數(shù)據(jù)類型在堆中的初始值

基本數(shù)據(jù)類型在棧里面不初始化是不能使用的
基本數(shù)據(jù)類型與引用數(shù)據(jù)類型

引用數(shù)據(jù)類型,在棧中存放的是一個堆中地址,地址像一條指針一樣指向堆中的詳細(xì)信息
堆中存放的是詳細(xì)信息
基本數(shù)據(jù)類型:值傳遞
基本數(shù)據(jù)類型它是屬于值傳遞(傳遞 的是一個具體值)
(函數(shù)/方法中的數(shù)據(jù))直接存放在棧中

引用數(shù)據(jù)類型地址傳遞
// 功能:交換一個數(shù)組的第一個元素和第二個元素
static void swap(int[] nums) {
// 1.把數(shù)組的第0個位置取出來,放到一個臨時的變量當(dāng)中 10
int temp = nums[0];
// 2.把第1個位置的值取出來,賦值給第0個位置
nums[0] = nums[1];
// 3.把臨時變量的值賦值給第1個位置
nums[1] = temp;
System.out.println("nums={"+nums[0]+","+nums[1]+"};");
}
public static void main(String[] args) {
// {10,20} {20,10}
int[] nums = new int[] { 10, 20 };
swap(nums);
}

【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 從三月份找實習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
- 下午接了你放學(xué)回家,依舊是你寫作業(yè),媽媽做飯,我們在規(guī)定的時間內(nèi)完成了全部作業(yè),媽媽表揚(yáng)了你。接下來媽媽開...
- 自從日更以來,逐漸發(fā)現(xiàn)自己每天寫的,連流水賬都算不上,壓根不成文啊~~ 然而,還是要硬著頭皮繼續(xù)更,不是么? 每天...