java核心卷之介面學習筆記

2021-06-25 23:07:45 字數 2643 閱讀 7478

——每天的寥寥幾筆,堅持下去,將會是乙份沉甸甸的積累。

今天的筆記是有關核心一的介面部分(作為個人筆記,就僅把我認為重要的記錄了下來,一些較基礎的就跳過不寫了)。

1.例項域與類域的概念。例項域就是要new出來物件後物件所擁有的資料域,而類域則是類所有,編譯時就已經屬於類了。

介面不能含有例項域,也不能實現方法,僅能含有static final的資料域和未實現的public方法。

2.clone之深淺複製

所謂淺複製,就是說複製完的那個物件和原物件擁有一樣的引用,乙個物件的資料段變了,另乙個跟著一起變。

person a = new person("wangwu");

person copy = a;

copy.setname("zhangsan");//此時a.getname="zhangsan"

所謂深複製,就是複製完兩個物件各歸各的,資料互不影響。

為此,設計者還為我們提供了乙個介面cloneable。只要implements該介面,並恰當的覆寫從object那裡繼承來的clone方法,就能通過呼叫clone方法實現深複製。這裡要強調下,clone方法是覆寫父類object的方法,而不是實現介面的方法,因為cloneable介面裡面並沒有clone方法,這裡implements這個介面僅僅是為了做個標記,表明類設計者要進行轉殖處理。

上面我著重加粗了「恰當的覆寫「,因為這裡有陷阱,必須要小心。

首先明確,什麼是複製拷貝。就是將乙個物件中的所有資料都複製另乙個物件中,同時要滿足深複製。這裡就會有兩種情況:

一:如果物件中的資料域都是數值或基本資料型別,這樣的拷貝不會出錯。

二:如果物件中的資料域含有物件的引用(包含string型別),那麼要小心了,拷貝的結果會使複製出來的物件和原物件中的物件引用都會指向同乙個區域,也就違背了深複製的原則。所以,需要單獨拿出來處理。

public person clone()

3.內部類之區域性、匿名、靜態內部類

內部類:定義在類中的類。

最重要的乙個需要理解的點:

1.編譯時,內部類會被特殊對待,假設類a中有一內部類b,那麼編譯完成會生成乙個a.class和乙個a$b.class(內部類專屬位元組碼),可以看出,結果都是class檔案,因此,虛擬機器完全不用管該class檔案是內部類還是外部類,按照自己的規則處理class檔案即可,這樣的設計方法是低耦合的,高效的。

2.不過,編譯完生成a$b的class檔案會被新增乙個建構函式,引數就是外部類的this引用,這樣的話,內部類就可以通過this物件直接對外部類的資料進行操作,實現了兩個類之間的互動。後面提到的靜態內部類,就是把this給拋掉了,因為人家沒想著要訪問外部類的資料。

****後加的兩點,比較重要,不要忽視******

3.而外部類a.class還會生成多個靜態方法,返回值為外部類的例項域,而方法引數為外部類例項物件,這樣內部類就能呼叫這個靜態方法,通過該方法的返回值直接訪問外部類的私有資料,而不用通過公有的getter方法。

4.區域性內部類不能用public,private訪問說明符修飾,因為它的作用域限定在了宣告這個類的區域性塊中。

區域性內部類:

1.定義在方法體或**塊中

2.對外部世界完全隱藏,同時也能訪問外部類,並且,還能訪問final型別的區域性變數,因為編譯階段會在該局部類中生成相關建構函式和對應區域性變數的拷貝,該建構函式可以給該拷貝變數賦值。

public void start(boolean beep)

} actionlistener listener = new timeprinter();

}

class talkingclock$timeprinter

匿名內部類:

person p1 = new person("ace");//a person object
person p2 = new person("ace")
拓展技巧:雙括號初始化

arraylistf = new arraylist();

f.add("a");

f.add("b");

invite(f);

//兩種方式是等價的,但下面的方法更簡潔,因為使用了匿名列表

invite(new arraylist()

});

靜態內部類:

當僅僅為了隱藏某一內部類,同時內部類也不需要訪問外部類(用不到外部類的this物件)時,可以將內部類宣告成靜態的,這樣可以實現完全的隱藏。

我cao,又這麼晚了。學生黨夠拼,也該睡了。。後面再完善吧。

Java核心技術卷之位操作

處理整型型別時,可以對組成整型數值的各個位完成操作。位運算子包括 and or xor not 這些運算子按位模式處理 基本用法 public static void main string args 26的二進位制表示為11010,與1000進行 操作,第四位為1,其餘為零,轉化為十進位制是8 當...

Java學習筆記 介面

package cn.itcast.demo01 public abstract 返回值型別 方法名稱 引數 固定關鍵字 public inte ce myinte ceabstract package cn.itcast.demo01 public class myinte ceabstracti...

java學習之介面

inte ce 成員常量 public static final 成員函式 public abstract介面是不可以建立物件的,因為有抽象方法。子類對介面中的抽象方法全部實現後,子類才能夠例項化,否者子類是乙個抽象類。介面是對外暴露的規則 介面是程式的功能擴充套件 介面可以用來多實現 類與介面之間...