1.數(shù)據(jù)抽象
- ** 數(shù)據(jù)類(lèi)型:**值+值上的操作
Java編程的基礎(chǔ):主要是使用class關(guān)鍵字構(gòu)造被稱(chēng)為引用類(lèi)型的數(shù)據(jù)類(lèi)型。
抽象數(shù)據(jù)類(lèi)型:能夠?qū)κ褂谜唠[藏?cái)?shù)據(jù)表示的數(shù)據(jù)類(lèi)型,關(guān)鍵字private限制,支持封裝。 -
抽象數(shù)據(jù)類(lèi)型VS靜態(tài)方法庫(kù):
同:java類(lèi)實(shí)現(xiàn),接受參數(shù),可能返回指定類(lèi)型值。
異:抽象數(shù)據(jù)類(lèi)型中可能含有多個(gè)和類(lèi)名相同的且沒(méi)有返回值的構(gòu)造函數(shù),實(shí)例方法不需要static關(guān)鍵字。
2.對(duì)象
-
對(duì)象:是能夠承載數(shù)據(jù)類(lèi)型的值的實(shí)體。
狀態(tài)——實(shí)例屬性的值。
標(biāo)識(shí)——能夠?qū)⒁粋€(gè)對(duì)象區(qū)別于另一個(gè)對(duì)象,可以認(rèn)為是它在內(nèi)存中的位置。
行為——數(shù)據(jù)類(lèi)型的操作。
引用是訪問(wèn)對(duì)象的一種方式,Java使用術(shù)語(yǔ)引用類(lèi)型以示和原始數(shù)據(jù)類(lèi)型(變量和值相關(guān)聯(lián))的區(qū)別??梢岳斫鉃橐镁褪莾?nèi)存中的地址。 -
創(chuàng)建對(duì)象
創(chuàng)建對(duì)象:new 類(lèi)名(參數(shù))
①為新的對(duì)象分配內(nèi)存空間
②調(diào)用構(gòu)造函數(shù)初始化對(duì)象中的值
③等式左邊創(chuàng)建了Counter的引用變量
④“=”操作符使對(duì)象引用指向剛創(chuàng)建的對(duì)象。注意是指向,不是賦值。
變量關(guān)聯(lián):指向?qū)ο蟮囊?,而非?shù)據(jù)類(lèi)型的值本身。
Counter heads=new Counter("heads");
Counter tails=new Counter("tails");

image.png
-
調(diào)用實(shí)例方法
關(guān)鍵:方法每次觸發(fā)都和一個(gè)對(duì)象相關(guān)。
靜態(tài)方法調(diào)用是通過(guò)類(lèi)名,而實(shí)例方法調(diào)用是通過(guò)對(duì)象名。靜態(tài)方法是實(shí)現(xiàn)某個(gè)函數(shù),實(shí)例方法是數(shù)據(jù)類(lèi)型的操作。 -
賦值語(yǔ)句
使用引用類(lèi)型的賦值語(yǔ)句將會(huì)創(chuàng)建該引用的一個(gè)副本,而不是創(chuàng)建新的對(duì)象。
別名:兩個(gè)變量指向同一個(gè)對(duì)象。
Counter c1 = new Counter("ones");
c1.increment();
Counter c2 = c1;
c2.increment();
StdOut.println(c1);

-
對(duì)象作為參數(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ù)的副本: 基本類(lèi)型傳遞的是值的副本、對(duì)象傳遞的是引用的副本。 我們無(wú)法改變參數(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 - 將對(duì)象作為返回值???
-
數(shù)組也是對(duì)象
在java中所有非原始數(shù)據(jù)類(lèi)型都是對(duì)象(int、double、boolean、char),也就是說(shuō)數(shù)組也是對(duì)象。和其他對(duì)象一樣,當(dāng)我們將數(shù)組傳遞給一個(gè)方法或講一個(gè)數(shù)組變量放在賦值語(yǔ)句的右側(cè)時(shí),我們都是在創(chuàng)建該數(shù)組引用的一個(gè)副本,而非數(shù)組的副本。 -
對(duì)象的數(shù)組
①調(diào)用數(shù)組的構(gòu)造函數(shù)創(chuàng)建數(shù)組
②為每個(gè)數(shù)組元素調(diào)用它的構(gòu)造函數(shù)創(chuàng)建相應(yīng)的對(duì)象。
對(duì)象數(shù)組:由對(duì)象的引用組成的數(shù)組,而非對(duì)象本身。 -
字符串
java中的String值是一串可以由索引訪問(wèn)的char值。
//i從0開(kāi)始索引
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ù)來(lái)創(chuàng)建并初始化:String s=“hello”
3.數(shù)據(jù)類(lèi)型的設(shè)計(jì)
-
**抽象數(shù)據(jù)類(lèi)型的實(shí)現(xiàn) **
①實(shí)例變量:需要通過(guò)對(duì)象名訪問(wèn)。
②構(gòu)造函數(shù):沒(méi)有返回值,初始化實(shí)例變量,名稱(chēng)總是和類(lèi)名相同。
③實(shí)例方法:不需要static、可以訪問(wèn)實(shí)例變量。
API:實(shí)現(xiàn)調(diào)用和實(shí)現(xiàn)的分離,以實(shí)現(xiàn)模塊化編程。 -
接口繼承
接口繼承可以使我們的程序能夠調(diào)用接口中的方法操作接口的任意類(lèi)型的對(duì)象。
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)
}
-
實(shí)現(xiàn)繼承
subclassing:定義一個(gè)子類(lèi)繼承父類(lèi)的所有實(shí)例和方法。子類(lèi)繼承會(huì)破會(huì)封裝。
①父類(lèi)的任何改動(dòng)都會(huì)影響它的所有子類(lèi)
②子類(lèi)代碼可以訪問(wèn)所有實(shí)例變量,可能會(huì)扭曲父類(lèi)代碼的意圖。 -
等價(jià)性
①兩個(gè)引用變量a==b是判斷兩個(gè)引用是否指向同一個(gè)對(duì)象。
②通常是要判斷對(duì)象的值是否相同。 -
內(nèi)存管理
通過(guò)記錄孤兒對(duì)象并將它們的內(nèi)存釋放,這種回收內(nèi)存的方式叫做垃圾回收。 -
不可變性
對(duì)象創(chuàng)建后對(duì)象的實(shí)例值無(wú)法被改變,使用關(guān)鍵字final修飾。final只能用來(lái)保證原始數(shù)據(jù)類(lèi)型的實(shí)例變量的不可變性,無(wú)法用于引用類(lèi)型的變量。
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.
實(shí)例變量coords[ ]是private final的,但是Vector是可變的,因?yàn)橛美龘碛兄赶驍?shù)據(jù)的一個(gè)引用,可以通過(guò)a[i]改變vector中的值。
- ** 棄用的方法**
不再被支持但為了保持兼容性而留在API中的方法叫做棄用的方法。

