版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、1、課程名稱:static關(guān)鍵字 2、知識點2.1、上次課程的主要知識點1、String類特點:· 字符串的內(nèi)容一旦聲明則不可改變,改變的是內(nèi)存地址的指向;· String類對象有兩種實例化方式:|- 直接賦值:開辟一塊堆內(nèi)存空間,并且可以自動入池;|- 構(gòu)造方法實例化:開辟兩塊堆內(nèi)存空間,不會自動入池,可以利用intern()手工入池;· 開發(fā)的使用:直接賦值使用、一般不會頻繁改變、比較使用equals()。2、String類的方法;3、this關(guān)鍵字:· 明確的表示本類中的屬性,利用“this.屬性”操作;· 明確調(diào)用本類的方法:|- 利用
2、“this.方法()”調(diào)用本類方法;|- 利用“this()”調(diào)用本類構(gòu)造,但是要求必須放在構(gòu)造方法的第一行;· 表示當(dāng)前對象:當(dāng)前正在調(diào)用類中方法的對象。2.2、本次預(yù)計講解的知識點static關(guān)鍵字定義屬性以及定義方法的操作。3、具體內(nèi)容()static是Java中定義的一個關(guān)鍵字,主要是描述全局的概念,所以利用static關(guān)鍵字可以定義屬性、定義方法。但是在90%的情況下,我們的開發(fā)代碼很少會去直接編寫static。3.1、利用static定義屬性現(xiàn)在假設(shè)定義一個只描述中國人的類,那么在這個類里面肯定要包含有姓名、年齡、國家,所以按照之前所學(xué)習(xí)的概念來進行設(shè)計,就可以得出如下的
3、結(jié)果:class Person private String name ;private int age ;String country = "中華人民共和國" ;/ 此屬性暫時不封裝public Person(String name,int age) = name ;this.age = age ;public String getInfo() return "姓名:" + + ",年齡:" + this.age + ",國家:" + this.country ;publi
4、c class TestDemo public static void main(String args) Person perA = new Person("張三",10) ;Person perB = new Person("李四",20) ;Person perC = new Person("王五",10) ;System.out.println(perA.getInfo() ;System.out.println(perB.getInfo() ;System.out.println(perC.getInfo() ;但是對于以上
5、的程序的內(nèi)存關(guān)系中就會發(fā)現(xiàn)問題所在了。如果說現(xiàn)在玩穿越了,中國退回到了唐朝,中國14億人口,14億對象,14億對象修改一個屬性。這樣的話對于整個代碼的維護實在是太可怕,而造成這種問題的根源在于:類中的普通屬性是每一個對象都獨自擁有的,但是這樣的設(shè)計明顯不符合于當(dāng)前的環(huán)境,所以最好的做法是將國家的屬性設(shè)置為公共屬性。所有的對象都可以共享此屬性,如果要想實現(xiàn)這樣的操作,就可以通過static關(guān)鍵字來進行定義。范例:使用static關(guān)鍵字來定義class Person private String name ;private int age ;static String country = &quo
6、t;中華人民共和國" ;/ 此屬性暫時不封裝public Person(String name,int age) = name ;this.age = age ;public String getInfo() return "姓名:" + + ",年齡:" + this.age + ",國家:" + this.country ;public class TestDemo public static void main(String args) Person perA = new Per
7、son("張三",10) ;Person perB = new Person("李四",20) ;Person perC = new Person("王五",10) ;perA.country = "中國-唐朝" ;/ 修改了一個對象的屬性System.out.println(perA.getInfo() ;System.out.println(perB.getInfo() ;System.out.println(perC.getInfo() ;通過執(zhí)行結(jié)果可以發(fā)現(xiàn),修改了一個對象的屬性之后,所有對象對應(yīng)的屬性都發(fā)
8、生了改變,所以這樣的屬性稱為公共屬性,公共屬性必須通過static定義,而對于公共屬性的內(nèi)容保存不會在棧也不會在堆,而是會存在于全局?jǐn)?shù)據(jù)區(qū)之中,所有的方法保存在全局代碼區(qū)之中。但是現(xiàn)在出現(xiàn)了一個問題,既然static屬于全局屬性,那么由一個對象進行修改是否合適呢?現(xiàn)在通過一個對象改的:perA.country = "中國-唐朝" ;很明顯,這是不合適的,最好的做法是利用所有對象的一個最高的代表來操作,這個代表就是類。所以對于static定義的屬性可以由類名稱直接進行調(diào)用,所以這樣的屬性也被稱為類屬性。Person.country = "中國-唐朝" ;/
9、 直接通過類調(diào)用此時的類中存在有static屬性以及非static屬性,但是在這里面需要注意一點:· 所有的非static屬性都是在對象實例化的時候才會進行內(nèi)存的分配;· 所有的static屬性可以在沒有實例化對象產(chǎn)生的情況下直接使用。范例:直接調(diào)用類屬性public class TestDemo public static void main(String args) System.out.println(Person.country) ;Person.country = "北宋" ;System.out.println(Person.country)
10、 ;System.out.println(new Person("張三",20).getInfo() ;雖然static的屬性定義在了類之中,但是其是完全獨立的,不受類實例化對象的控制。在90%的情況下類的設(shè)計都會使用非static屬性,只有在10%表示公共的屬性,或者是與類實例化無關(guān)的屬性定義時才會考慮使用static。3.2、利用static定義方法利用static定義的屬性可以直接通過類名稱進行訪問,但是static也可以用于方法的定義上,同樣,這個方法可以由類名稱直接進行調(diào)用。范例:定義static方法class Person private String name
11、 ;private int age ;private static String country = "中華人民共和國" ;public Person(String name,int age) = name ;this.age = age ;public static void setCountry(String c) country = c ;public static String getCountry() return country ;public String getInfo() return "姓名:" + this.na
12、me + ",年齡:" + this.age + ",國家:" + this.country ;public class TestDemo public static void main(String args) / 此時沒有實例化對象產(chǎn)生System.out.println(Person.getCountry() ;Person.setCountry("中國-清朝") ;System.out.println(Person.getCountry() ;System.out.println(new Person("桃子&quo
13、t;,250).getInfo() ;static的方法依然不受到實例化對象的控制,所以可以由類名稱直接調(diào)用。但是此時類中的方法就存在有兩種了:static方法、非static方法,那么這兩種方法之間的互相訪問就會出現(xiàn)問題:· 所有的非static方法可以直接調(diào)用static方法或static屬性;· static方法不能夠直接調(diào)用非static方法或者是非static屬性。分析?為什么會存在有這樣的定義?· 所有的static屬性或方法可以在類沒有實例化對象的時候進行直接調(diào)用;· 所有非static屬性或方法必須在類產(chǎn)生實例化對象之后才可以進行調(diào)用。那
14、么什么時候使用static方法呢?· 類設(shè)計的過程之中90%的方法都使用非static方法定義;· 如果一個類中沒有任何的屬性,那么這個類不需要定義普通方法,只需要定義static方法就行了。范例:對比以下兩種代碼class MyMath public int add(int x,int y) return x + y ;public class TestDemo public static void main(String args) System.out.println(new MyMath().add(10,20) ;class MyMath public stati
15、c int add(int x,int y) return x + y ;public class TestDemo public static void main(String args) System.out.println(MyMath.add(10,20) ;因為此時MyMath類沒有屬性,沒有屬性就不需要使用到堆內(nèi)存。而如果現(xiàn)在使用了第一種方式,那么會開辟一塊無用的堆內(nèi)存空間。所以這個時候很明顯,第二種方式更加合理。3.3、觀察主方法(理解)在最早講解方法定義的時候?qū)嶋H上給出了兩種方案:· 第一種:某一個方法定義在主類中,并且由主方法直接調(diào)用,定義格式:public sta
16、tic 返回值類型 方法名稱()· 第二種:某一個方法定義在了類中,并且由實例化對象進行調(diào)用,定義格式:public 返回值類型 方法名稱()那么現(xiàn)在來做一個簡單分析。如果現(xiàn)在主類中定義的方法沒有使用static,那么肯定無發(fā)通過主方法直接進行調(diào)用。但是反過來,這個時候只能夠通過產(chǎn)生本類實例化對象的方式來進行調(diào)用。public class TestDemo public static void main(String args) / static方法new TestDemo().print() ;/ 對象.方法()public void print() / 非static方法Syst
17、em.out.println("* Hello World ! *") ;在以后所編寫的代碼過程之中,主類中不會編寫什么方法,大部分的方法都會封裝在類之中,通過產(chǎn)生對象調(diào)用。Java中的主方法可以說是歷史之最長的:· public:是一種訪問權(quán)限,表示所有的操作者都可以看見;· static:執(zhí)行一個類的時候輸入:“java 類名稱”,表示由類直接調(diào)用;· void:主方法是一切的起點,開始了就繼續(xù)吧;· main:是一個系統(tǒng)定義好的方法名稱。· String args:程序執(zhí)行時的輸入?yún)?shù),初始化參數(shù)的。范例:取得初始化輸
18、入?yún)?shù)public class TestDemo public static void main(String args) / static方法for (int x = 0 ; x < args.length; x +) System.out.println(argsx) ;如果要輸入?yún)?shù),則在解釋Java程序時,類后面利用空格設(shè)置,每個參數(shù)間使用空格區(qū)分。java TestDemo Hello World NIHAO但是如果你輸入的參數(shù)原本就帶有空格,那么這個時候可以使用“"”轉(zhuǎn)義。java TestDemo "Hello World" "NI
19、HAO"3.4、static應(yīng)用static在一些系統(tǒng)類庫上會大量的出現(xiàn),那么這些就有可能是static方法所導(dǎo)致的。這次重點來看static屬性。static屬性有一個最好的特點在于:公共屬性,所有對象都可以對其進行修改。范例:實現(xiàn)一個對象的個數(shù)統(tǒng)計所有的新的實例化對象產(chǎn)生時都一定要調(diào)用構(gòu)造方法,所以可以在構(gòu)造方法里面增加一個統(tǒng)計。class Person private static int count = 1 ; / 統(tǒng)計個數(shù)public Person() System.out.println("對象個數(shù):" + count +) ;public class TestDemo public static void main(String args) / static方法new Person() ;new Person() ;new Person() ;new Person() ;new Person() ;new Person() ;實際上可以將以上的程序進一步的修改,現(xiàn)在假設(shè)Person類中存在有一個name的屬性,那么在Person類提供有兩個構(gòu)造方法:一個是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年應(yīng)急救生系統(tǒng)項目資金需求報告代可行性研究報告
- 2023-2024學(xué)年廣東省深圳市福田區(qū)八年級(下)期末英語試卷
- 2023-2024學(xué)年廣東省深圳市福田區(qū)七年級(上)期中英語試卷
- 二年級數(shù)學(xué)計算題專項練習(xí)
- 健康吃藥的安全
- 二年級語文下冊教案
- 山東省青島市李滄區(qū)片區(qū)2024-2025學(xué)年六年級上學(xué)期期中語文試卷
- 陜西省西安市藍田縣2024-2025學(xué)年上學(xué)期九年級物理期中質(zhì)量檢測試卷(含答案)
- 高中物理復(fù)習(xí)4-2第2講拋體運動課件
- 醫(yī)用按摩凝膠產(chǎn)業(yè)規(guī)劃專項研究報告
- 2024年威士忌酒相關(guān)公司行業(yè)營銷方案
- 《中外歷史綱要(上)》期末專題復(fù)習(xí)提綱
- 2024年安徽省交通科學(xué)研究院招聘筆試參考題庫附帶答案詳解
- 儀表安裝施工方案
- 網(wǎng)絡(luò)游戲危害課件
- 工業(yè)污水處理廠項目經(jīng)濟效益和社會效益分析報告
- 2024供電營業(yè)規(guī)則學(xué)習(xí)課件
- 鐵路給水排水設(shè)計規(guī)范(TB 10010-2016)
- 中醫(yī)養(yǎng)生的吃生姜養(yǎng)生法
- GINA2023-哮喘防治指南解讀-課件
- 燃?xì)夤芫W(wǎng)運行工施工環(huán)境保護詳細(xì)措施培訓(xùn)
評論
0/150
提交評論