1.數(shù)據(jù)抽象
- ** 數(shù)據(jù)類型:**值+值上的操作
Java編程的基礎(chǔ):主要是使用class關(guān)鍵字構(gòu)造被稱為引用類型的數(shù)據(jù)類型。
抽象數(shù)據(jù)類型:能夠?qū)κ褂谜唠[藏數(shù)據(jù)表示的數(shù)據(jù)類型铲觉,關(guān)鍵字private限制逼蒙,支持封裝从绘。 -
抽象數(shù)據(jù)類型VS靜態(tài)方法庫:
同:java類實現(xiàn),接受參數(shù)是牢,可能返回指定類型值僵井。
異:抽象數(shù)據(jù)類型中可能含有多個和類名相同的且沒有返回值的構(gòu)造函數(shù),實例方法不需要static關(guān)鍵字驳棱。
2.對象
-
對象:是能夠承載數(shù)據(jù)類型的值的實體驹沿。
狀態(tài)——實例屬性的值。
標(biāo)識——能夠?qū)⒁粋€對象區(qū)別于另一個對象蹈胡,可以認(rèn)為是它在內(nèi)存中的位置渊季。
行為——數(shù)據(jù)類型的操作。
引用是訪問對象的一種方式罚渐,Java使用術(shù)語引用類型以示和原始數(shù)據(jù)類型(變量和值相關(guān)聯(lián))的區(qū)別却汉。可以理解為引用就是內(nèi)存中的地址荷并。 -
創(chuàng)建對象
創(chuàng)建對象:new 類名(參數(shù))
①為新的對象分配內(nèi)存空間
②調(diào)用構(gòu)造函數(shù)初始化對象中的值
③等式左邊創(chuàng)建了Counter的引用變量
④“=”操作符使對象引用指向剛創(chuàng)建的對象合砂。注意是指向,不是賦值源织。
變量關(guān)聯(lián):指向?qū)ο蟮囊敏嫖保菙?shù)據(jù)類型的值本身。
Counter heads=new Counter("heads");
Counter tails=new Counter("tails");
image.png
-
調(diào)用實例方法
關(guān)鍵:方法每次觸發(fā)都和一個對象相關(guān)谈息。
靜態(tài)方法調(diào)用是通過類名缘屹,而實例方法調(diào)用是通過對象名。靜態(tài)方法是實現(xiàn)某個函數(shù)侠仇,實例方法是數(shù)據(jù)類型的操作轻姿。 -
賦值語句
使用引用類型的賦值語句將會創(chuàng)建該引用的一個副本犁珠,而不是創(chuàng)建新的對象。
別名:兩個變量指向同一個對象互亮。
Counter c1 = new Counter("ones");
c1.increment();
Counter c2 = c1;
c2.increment();
StdOut.println(c1);
-
對象作為參數(shù)犁享??豹休?
《thinking in Java》:When you’re passing primitives into a method炊昆,you get a distinct copy of the primitive. When you’re passing a reference into a method, you get a copy of the reference.
傳遞的是參數(shù)的副本: 基本類型傳遞的是值的副本、對象傳遞的是引用的副本威根。 我們無法改變參數(shù)本身的值窑眯。
if we pass a reference to an object of type Counter, the method cannot change the original reference (make it point to a different Counter), but it can change the value of the object.
http://www.cnblogs.com/maying3010/p/5837227.html - 將對象作為返回值?医窿?磅甩?
-
數(shù)組也是對象
在java中所有非原始數(shù)據(jù)類型都是對象(int、double姥卢、boolean卷要、char),也就是說數(shù)組也是對象独榴。和其他對象一樣僧叉,當(dāng)我們將數(shù)組傳遞給一個方法或講一個數(shù)組變量放在賦值語句的右側(cè)時,我們都是在創(chuàng)建該數(shù)組引用的一個副本棺榔,而非數(shù)組的副本瓶堕。 -
對象的數(shù)組
①調(diào)用數(shù)組的構(gòu)造函數(shù)創(chuàng)建數(shù)組
②為每個數(shù)組元素調(diào)用它的構(gòu)造函數(shù)創(chuàng)建相應(yīng)的對象。
對象數(shù)組:由對象的引用組成的數(shù)組症歇,而非對象本身郎笆。 -
字符串
java中的String值是一串可以由索引訪問的char值。
//i從0開始索引
String()
int length()
int charAt(int i)
int indexOf(String p) //frst occurrence of p (-1 if none)
int indexOf(String p, int i) //frst occurrence of p afer i (-1 if none)
String concat(String t)
String substring(int i, int j) //[i,j)
String[] split(String delim)
int compareTo(String t)
boolean equals(String t)
int hashCode()
注意:String可以不使用構(gòu)造函數(shù)來創(chuàng)建并初始化:String s=“hello”
3.數(shù)據(jù)類型的設(shè)計
-
**抽象數(shù)據(jù)類型的實現(xiàn) **
①實例變量:需要通過對象名訪問忘晤。
②構(gòu)造函數(shù):沒有返回值宛蚓,初始化實例變量,名稱總是和類名相同设塔。
③實例方法:不需要static凄吏、可以訪問實例變量。
API:實現(xiàn)調(diào)用和實現(xiàn)的分離闰蛔,以實現(xiàn)模塊化編程痕钢。 -
接口繼承
接口繼承可以使我們的程序能夠調(diào)用接口中的方法操作接口的任意類型的對象。
public interface Datable
{
int month();
int day();
int year();
}
//and then referred to the interface in our implementation code
public class Date implements Datable
{
// implementation code (same as before)
}
-
實現(xiàn)繼承
subclassing:定義一個子類繼承父類的所有實例和方法序六。子類繼承會破會封裝任连。
①父類的任何改動都會影響它的所有子類
②子類代碼可以訪問所有實例變量,可能會扭曲父類代碼的意圖难咕。 -
等價性
①兩個引用變量a==b是判斷兩個引用是否指向同一個對象课梳。
②通常是要判斷對象的值是否相同距辆。 -
內(nèi)存管理
通過記錄孤兒對象并將它們的內(nèi)存釋放余佃,這種回收內(nèi)存的方式叫做垃圾回收暮刃。 -
不可變性
對象創(chuàng)建后對象的實例值無法被改變,使用關(guān)鍵字final修飾爆土。final只能用來保證原始數(shù)據(jù)類型的實例變量的不可變性椭懊,無法用于引用類型的變量。
public class Vector
{
private final double[] coords;
public Vector(double[] a)
{ coords = a; }
...
}
double[] a = { 3.0, 4.0 };
Vector vector = new Vector(a);
a[0] = 0.0; // Bypasses the public API.
實例變量coords[ ]是private final的步势,但是Vector是可變的氧猬,因為用例擁有指向數(shù)據(jù)的一個引用,可以通過a[i]改變vector中的值坏瘩。
- ** 棄用的方法**
不再被支持但為了保持兼容性而留在API中的方法叫做棄用的方法盅抚。