? ? ??
目錄
1、對象和類
2、類之間的關(guān)系
3、引用
4、對象的創(chuàng)建和使用
5、構(gòu)造函數(shù)/構(gòu)造方法
6、內(nèi)存解析
? ? ? ?在這篇文章中,我們將學(xué)習(xí)面向?qū)ο蟮乃枷?,并學(xué)習(xí)如何使用面向?qū)ο笏枷刖幊?。在學(xué)習(xí)面向?qū)ο缶幊讨埃覀兿攘私庖幌戮幊陶Z言的發(fā)展:機器語言,匯編語言,高級語言,面向?qū)ο蟮恼Z言。
????????機器語言:直接由計算機指令組成,指令,數(shù)據(jù),地址,都用0或1的符號串組成,可以由計算機直接執(zhí)行;
????????匯編語言:用容易理解和記憶的符號表示指令,數(shù)據(jù),寄存器,抽象層次低,程序員不易理解。
? ? ? ? 高級語言:屏蔽了機器細節(jié),提高了語言的抽象層次,更接近于人類語言。60年代出現(xiàn)的結(jié)構(gòu)化編程語言,提出了結(jié)構(gòu)化數(shù)據(jù)和語句,數(shù)據(jù)和過程抽象等概念。
? ? ? ? 面向?qū)ο笳Z言:與以往的語言的不同點是,它的出發(fā)點是能更加客觀的描述問題域中客觀存在的事物。
? ? ? ? 編程語言朝著人類更能理解的方向發(fā)展。
????????提到面向?qū)ο?,大家都會想到面向過程開發(fā),那么這兩者的區(qū)別是什么呢?主要區(qū)別在于:
????????面向過程關(guān)注怎么做,做多少事。
????????面向?qū)ο箨P(guān)注誰去做,多少人去做。
? ? ? ? 面向?qū)ο缶幊?,以下概念必須要掌握?/p>
1、對象和類
1)對象用于計算機語言中對問題域中事物的描述。對象通過“屬性”和“方法”來分別對應(yīng)事務(wù)的靜態(tài)和動態(tài)屬性。
2)類是對同一類型事物的抽象,類中定義了這類對象具備的動態(tài)和靜態(tài)屬性。
3)類可以看做是一類對象的模板,對象是一個類具體的實現(xiàn),Instance。
2、類之間的關(guān)系
關(guān)系 | |
關(guān)聯(lián) | 最弱的關(guān)系,所有的關(guān)系都是關(guān)聯(lián)關(guān)系 |
聚合 | 整體到部分。又分為聚集,組合。 聚集:雁群和大雁的關(guān)系;組合:身體和頭的關(guān)系 |
繼承 | 從一般到特殊。XX is a XX? |
多態(tài) | |
實現(xiàn) |
了解完上述內(nèi)容后,用面向?qū)ο蟮乃枷肴绾畏治鰡栴}呢?
- 這個問題應(yīng)該有哪些類,哪些對象;
- 每個類和對象應(yīng)該具備哪些屬性和方法;
- 類和類之間的關(guān)系是怎樣的。
3、引用
Java語言中,除基本類型之外的類型都稱之為引用類型。Java中的對象通過引用對其操作。
String s; // 1.聲明String類型變量s
s = new String("hello world!"); // 2.給s賦值"hello world!"
如以上代碼:
執(zhí)行第1句時,聲明String類型的引用變量s;
執(zhí)行第2句時,通過new語句創(chuàng)建一個String類型的對象,用s指向它,以后通過s完成對這個對象的操作。
從內(nèi)存的角度看這兩步:
執(zhí)行第1句時,在棧中分配一塊空間,保存對象的地址,此時存的地址是null。
執(zhí)行第2句時,在堆中分配一塊空間,保存對象,此時s存的地址是堆內(nèi)存的地址。
?那如何在內(nèi)存中區(qū)分類和對象呢?
類是靜態(tài)的的概念,每個類只有一份,保存在代碼區(qū);
對象是運行過程中new出來的,保存在堆中,類中的成員變量在不同對象中有不同的值(除靜態(tài)變量),對象在沒有引用時會被回收掉。
4、對象的創(chuàng)建和使用
1)必須使用new創(chuàng)建對象;
2)執(zhí)行對象.成員變量來引用成員變量;
3)執(zhí)行對象.方法(實參列表)來引用方法;
4)同一個類的每個對象的成員變量有不同的存儲空間;
5)同一個類的每個對象共享該類的方法。
非靜態(tài)的方法,是針對每個對象調(diào)用。
5、構(gòu)造函數(shù)/構(gòu)造方法
說到對象的創(chuàng)建,必須要說一下對象的構(gòu)造函數(shù)。
1)使用new() + 構(gòu)造函數(shù)的方法創(chuàng)建一個對象;
2)構(gòu)造函數(shù)是定義在Java類的,一個用來初始化對象的成員變量函數(shù);
3)構(gòu)造函數(shù)名和類名相同,沒有返回值;
4)沒有指定構(gòu)造函數(shù)時,編譯器為每個類自動添加一個無參構(gòu)造函數(shù),如:
類名(){};
6、內(nèi)存解析
Java在函數(shù)調(diào)用中傳遞參數(shù)時,遵循值傳遞的原則:基本類型傳遞數(shù)據(jù)值本身。引用類型,傳遞對象的引用,而不是對象本身。
public class MemoryAnalysis {
public static void main(String[] args) {
Point p1 = new Point(1, 1, 1); // 1
Point p2 = new Point(2, 2, 2); // 2
double distance = p2.getDistance(p1); // 3
System.out.println(distance); // 4
p1.setX(5); // 5
System.out.println(p1.getDistance(new Point(3, 3, 3))); // 6
}
}
class Point {
double x, y, z;
Point(double _x, double _y, double _z) {
x = _x;
y = _y;
z = _z;
}
public void setX(double x) {
this.x = x;
}
double getDistance(Point p) {
return (x - p.x) * (x - p.x) + (y - p.y) * (y - p.y) + (z - p.z) * (z - p.z);
}
}
Point p1 = new Point(1, 1, 1); // 1
Point p2 = new Point(2, 2, 2); // 2
double distance = p2.getDistance(p1); // 3
?
?第4步執(zhí)行結(jié)束后,棧中變量的空間被釋放
System.out.println(distance); // 4
p1.setX(5); // 5
System.out.println(p1.getDistance(new Point(3, 3, 3))); // 6
?從圖中我們可以看出,在方法傳參,參數(shù)是引用類型時,在棧中創(chuàng)建一個變量指向參數(shù)的引用地址,而不是生成一個新的對象。
方法執(zhí)行結(jié)束后,棧空間的變量全部被釋放,堆空間的對象等垃圾回收時被釋放
我們在分析的時候,可能會遇到復(fù)雜表達式,這時候有個原則:從里到外分析;
形參,實參在棧中都會占用一塊空間,方法的返回值也會存在一塊臨時區(qū)域(棧)中,方法執(zhí)行結(jié)束后,臨時區(qū)域(棧)的空間自動釋放;
?
7.方法重載
是指一個類中可以定義方法名相同,參數(shù)列表不同的多個方法。在實際使用時根據(jù)不同的參數(shù)列表選擇方法。
普通方式的重載已經(jīng)老生常談了,這里我們重點看下構(gòu)造函數(shù)的重載?
class Point {
private double x;
private double y;
Point() {}
Point(int x1, int y1) {
this.x = x1;
this.y = y1;
}
public double getX() {return x;}
public double getY() {return y;}
public void setX(double x) {this.x = x;}
public void setY(double y) {this.y = y;}
}
接下來我們舉個例子,從內(nèi)存的角度解析程序執(zhí)行過程
因為內(nèi)存解析篇幅較長,我們單獨拿出來講解。請親愛的讀者朋友移步:
[Java基礎(chǔ)]面向?qū)ο?內(nèi)存解析_小王師傅66的博客-CSDN博客文章來源:http://www.zghlxwxcb.cn/news/detail-477545.html
?所以上面就是面向?qū)ο笾?,關(guān)于對象和類,類之間的關(guān)系,引用,對象的創(chuàng)建和使用,構(gòu)造函數(shù),內(nèi)存解析的全部內(nèi)容。文章來源地址http://www.zghlxwxcb.cn/news/detail-477545.html
到了這里,關(guān)于[Java基礎(chǔ)]面向?qū)ο蟮奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!