java面向对象:关键字 —(16)
static:靜態(tài)的
1.可以用來(lái)修飾的結(jié)構(gòu):主要用來(lái)修飾類的內(nèi)部結(jié)構(gòu)
屬性、方法、代碼塊、內(nèi)部類
2.static修飾屬性:靜態(tài)變量(或類變量)
2.1 屬性,是否使用static修飾,又分為:靜態(tài)屬性 vs 非靜態(tài)屬性(實(shí)例變量)- 實(shí)例變量:我們創(chuàng)建了類的多個(gè)對(duì)象,每個(gè)對(duì)象都獨(dú)立的擁一套類中的非靜態(tài)屬性。當(dāng)修改其中一個(gè)對(duì)象中的非靜態(tài)屬性時(shí),不會(huì)導(dǎo)致其他對(duì)象中同樣的屬性值的修改。
- 靜態(tài)變量:我們創(chuàng)建了類的多個(gè)對(duì)象,多個(gè)對(duì)象共享同一個(gè)靜態(tài)變量。當(dāng)通過(guò)某一個(gè)對(duì)象修改靜態(tài)變量時(shí),會(huì)導(dǎo)致其他對(duì)象調(diào)用此靜態(tài)變量時(shí),是修改過(guò)了的。
- 2.2 static修飾屬性的其他說(shuō)明:
- ① 靜態(tài)變量隨著類的加載而加載。可以通過(guò)"類.靜態(tài)變量"的方式進(jìn)行調(diào)用
- ② 靜態(tài)變量的加載要早于對(duì)象的創(chuàng)建。
- ③ 由于類只會(huì)加載一次,則靜態(tài)變量在內(nèi)存中也只會(huì)存在一份:存在方法區(qū)的靜態(tài)域中。
- ④ 類變量 實(shí)例變量
- 類 yes no
- 對(duì)象 yes yes
- 2.3 靜態(tài)屬性舉例:System.out; Math.PI;
3.靜態(tài)變量?jī)?nèi)存解析:
4.static修飾方法:靜態(tài)方法、類方法
① 隨著類的加載而加載,可以通過(guò)"類.靜態(tài)方法"的方式進(jìn)行調(diào)用
② 靜態(tài)方法 非靜態(tài)方法
- 類 yes no
- 對(duì)象 yes yes
③ 靜態(tài)方法中,只能調(diào)用靜態(tài)的方法或?qū)傩?br /> 非靜態(tài)方法中,既可以調(diào)用非靜態(tài)的方法或?qū)傩?#xff0c;也可以調(diào)用靜態(tài)的方法或?qū)傩?/p>
5. static的注意點(diǎn):
5.1 在靜態(tài)的方法內(nèi),不能使用this關(guān)鍵字、super關(guān)鍵字
5.2 關(guān)于靜態(tài)屬性和靜態(tài)方法的使用,大家都從生命周期的角度去理解。
6.如何判定屬性和方法應(yīng)該使用static關(guān)鍵字:
6.1 關(guān)于屬性
屬性是可以被多個(gè)對(duì)象所共享的,不會(huì)隨著對(duì)象的不同而不同的。
類中的常量也常常聲明為static
6.2 關(guān)于方法
操作靜態(tài)屬性的方法,通常設(shè)置為static的
工具類中的方法,習(xí)慣上聲明為static的。 比如:Math、Arrays、Collections
7.使用舉例:
舉例一:Arrays、Math、Collections等工具類
舉例二:單例模式
舉例三:
class Circle{
// id = init++;
// total++;
this.radius = radius;
}
1.設(shè)計(jì)模式的說(shuō)明
1.1 理解
設(shè)計(jì)模式是在大量的實(shí)踐中總結(jié)和理論化之后優(yōu)的代碼結(jié)構(gòu)、編程風(fēng)格、以及解決問(wèn)題的思考方式。
1.2 常用設(shè)計(jì)模式 — 23種經(jīng)典的設(shè)計(jì)模式 GOF
創(chuàng)建型模式,共5種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
結(jié)構(gòu)型模式,共7種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
行為型模式,共11種:策略模式、模板方法模式、觀察者模式、迭代器模式、責(zé)任鏈模式、命令模式、備忘錄模式、狀態(tài)模式、訪問(wèn)者模式、中介者模式、解釋器模式。
2.單例模式
2.1 要解決的問(wèn)題:
所謂類的單例設(shè)計(jì)模式,就是采取一定的方法保證在整個(gè)的軟件系統(tǒng)中,對(duì)某個(gè)類只能存在一個(gè)對(duì)象實(shí)例。
2.2 具體代碼的實(shí)現(xiàn):
餓漢式1:
class Bank{
}
餓漢式2:使用了靜態(tài)代碼塊
class Order{
}
//3.聲明public、static的返回當(dāng)前類對(duì)象的方法 public static Order getInstance(){return instance; }}
懶漢式:
class Order{
//1.私化類的構(gòu)造器
private Order(){ }
//2.聲明當(dāng)前類對(duì)象,沒(méi)初始化
//4.此對(duì)象也必須聲明為static的
private static Order instance = null;
}
2.3 兩種方式的對(duì)比:
- 餓漢式:
- 壞處:對(duì)象加載時(shí)間過(guò)長(zhǎng)。
- 好處:餓漢式是線程安全的
- 懶漢式:好處:延遲對(duì)象的創(chuàng)建。
- 目前的寫(xiě)法壞處:線程不安全。--->到多線程內(nèi)容時(shí),再修改
main()方法作為程序的入口
main()方法也是一個(gè)普通的靜態(tài)方法
main()方法可以作為我們與控制臺(tái)交互的方式。(之前:使用Scanner)
如何將控制臺(tái)獲取的數(shù)據(jù)傳給形參:String[] args?
運(yùn)行時(shí):java 類名 “Tom” “Jerry” “123” “true”
sysout(args[0]);//“Tom”
sysout(args[3]);//“true” -->Boolean.parseBoolean(args[3]);
sysout(args[4]);//報(bào)異常
小結(jié):一葉知秋
public static void main(String[] args){//方法體}
權(quán)限修飾符:private 缺省 protected pubilc ---->封裝性
修飾符:static \ final \ abstract \native 可以用來(lái)修飾方法
返回值類型: 無(wú)返回值 / 有返回值 -->return
方法名:需要滿足標(biāo)識(shí)符命名的規(guī)則、規(guī)范;“見(jiàn)名知意”
形參列表:重載 vs 重寫(xiě);參數(shù)的值傳遞機(jī)制;體現(xiàn)對(duì)象的多態(tài)性
方法體:來(lái)體現(xiàn)方法的功能
main(){
Person p = new Man();
p.eat();
//p.earnMoney();
Man man = new Man();
man.eat();
man.earnMoney();
}
總結(jié)
以上是生活随笔為你收集整理的java面向对象:关键字 —(16)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java面向对象的特征三:多态性 —(1
- 下一篇: java面向对象:关键字 —(17)