學習第十天

2021-10-02 00:10:45 字數 2882 閱讀 7557

一:

介面:jdk1.8及之後新增了2中可以定義存在方法體的方法:

預設方法 default關鍵字修飾的方法

使用:通過實現類物件使用

靜態方法

使用:通過介面名去呼叫

二:單例模式: 保證類只能存在乙個例項

餓漢式 : 先建立物件,然後需要的人要這個物件,保證永遠使用的都是這個建立好的物件–>執行緒安全的,效率相對較低

類第一次載入完成之後就建立物件

懶漢式 : 當呼叫功能要物件的時候才會建立這個物件 --執行緒不安全,效率相對較高

實現單例的類依舊可以正常定義其他內容,但是控制構造器,新增實現方式3步,保證這個類可以實現單例

但是單例的類中定義的成員內容,在獲取到該類物件後依舊可以正常使用

單例的實現方式:

1.構造器私有化

2.提供乙個私有的靜態的該類的引用

3.公共的訪問方式(提供乙個物件)

餓漢式1.私有構造器

2.提供乙個私有的靜態的該類的引用

3.共公的訪問方式 ->提供乙個當前型別的物件

返回值 : 要 引數:不要

懶漢式1.私有構造器

2.提供乙個私有的靜態的該類的引用

3.共公的靜態的訪問方式 ->提供乙個當前型別的物件

返回值 : 要 引數:不要

保證懶漢式的執行緒安全問題: 給方法上一把鎖,把方法中的**範圍鎖住 synchronized,可以控制多個任務排隊執行

三:靜態**模式:

1.真實角色

2.**角色

步驟:1.真實角色和**角色實現相同的介面(定義共同目標|行為)

2.**角色持有真實角色的引用

3.**行為

增強**程式的擴充套件性,便於後期維護,解耦

四:內部類:類中定義類(理解)

需求場景:當乙個類中的成員,又是另外乙個具體的事物,這個事物就可以定義為內部類

內部類的分類:

成員內部類

私有內部類

靜態內部類

區域性內部類

匿名內部類(***)

成員內部類

當內部類作為外部類的成員位置,這就是乙個成員內部類

具有成員的特點,可以使用成員修飾符修飾 ,也有類的特點,可以繼承,可以實現

在內部類中可以直接使用外部類中的內容包括私有的

外部類中可以通過內部類物件使用內部類中的成員

成員內部類中不可以定義靜態的內容,除非靜態的常量

如何在其他類中使用成員內部類的中的內容:

成員內部類的物件要通過外部類物件建立

innerdemo01 inner=new innerdemo01();

innerdemo01.inner in=inner.new inner();

私有內部類

在外部類中可以通過內部類的物件使用它的成員,包括私有的內容

私有內部類只能在當前的外部類中使用,其他類中無法使用

靜態內部類中可以定義靜態的內容

在外部類中使用靜態內部類中的內容,可以通過物件用其成員,通過類名用其靜態內容

靜態內部類中通過外部類的物件用其成員內容,直接使用其靜態內容,因為靜態內部類中靜態環境

其他類中如何使用靜態內部類中的內容:

通過外部類找靜態內部類,通過類名使用其靜態內容

system.out.println(outer01.inner.haha);

通過外部類找到靜態內部類,通過靜態內部類的物件使用其成員

outer.inner i = new outer.inner();

system.out.println(new outer.inner().hehe);

區域性內部類:

1.可以在當前定義的方法中通過區域性內部類的物件使用其成員

2.其他類中不可以使用區域性內部類中的內容,區域性的內容不可以被外部呼叫

3.如果在區域性內部類中使用到了當前所在方法的引數,這個引數預設被final關鍵字修飾

匿名內部類:

內部類有類體,沒有名字,這個類體我們稱它為乙個匿名內部類

簡化類的結構

當乙個類沒有自己本身的作用,只是想要使用一下類體的某個內容,並且也不會重複大量使用這個類,可以定義為乙個匿名內部類,只在當前使用

五:jdk1.8推出的新特性->lambda表示式

作用: 可以簡化匿名內部類的使用

前提:函式式介面

函式式介面: 抽象方法只有乙個的介面(介面中必須要重寫的方法只有乙個)

檢查函式式介面: @functionalinte***ce

語法:()->{}

(): 重寫的抽象方法的引數列表

->: 箭頭符號,lambda符號,箭頭函式,具有上下文推到的作用

{}: 重寫的方法的方法體

//匿名內部類的寫法

/smoke s=new smoke()

};/

//lambda寫法1:

/*smoke s=()->;*/

//lambda寫法2: 當方法體語句只有一句的時候,前後的{}可以省略

//smoke s=()->system.out.println("邊吸菸一遍吐星星煙圈...");

//lambda寫法3: 如果方法有引數,引數的資料型別可以省略

//smoke s=(a,b)->system.out.println("邊吸菸一遍吐星星煙圈..."+a);

//lambda寫法4: 如果方法有引數,引數的個數只有乙個,前後的()也可以省略

//smoke s= a ->system.out.println("邊吸菸一遍吐星星煙圈..."+a);

//lambda寫法5: 如果方法有返回值型別,並且方法體只有乙個return語句的時候,前後的{}+return關鍵字可以一起省略

/*smoke s= a ->;*/

smoke s= a ->「你好就好」;

python學習第十天

class student count 0 def init self,name,age,address self.name name self.age age self.address address student.count 1 k print k w open a.txt w encodin...

菜鳥學習第十天

1.字串最大的特點 一旦初始化就不可以改變。不可改變的字串內容而不是指向字串的引用 2.string s abc 其中s是乙個類型別變數,abc 是乙個物件。3.string s1 abc 和string s2 new string abc s1 s2 和s1.equals s2 比較的是他們在記憶...

python學習第十天

這兩個習題主要是複習各種符號,並且強調編寫長 時要寫一段執行一段修改一段 主要是學習對列表的進一步操作 ten things stuff ten things.split 定義乙個字串變數 用split 函式以空格為分隔標誌分隔字串使之成為列表 more stuff day night song f...