Java中this,static,final,const用法詳解
一、this
用類(lèi)名定義一個(gè)變量的時(shí)候,定義的應(yīng)該只是一個(gè)引用,外面可以通過(guò)這個(gè)引用來(lái)訪問(wèn)這個(gè)類(lèi)里面的屬性和方法,那們類(lèi)里面是夠也應(yīng)該有一個(gè)引用來(lái)訪問(wèn)自己的屬性和方法納?JAVA提供了一個(gè)很好的東西,就是 this 對(duì)象,它可以在類(lèi)里面來(lái)引用這個(gè)類(lèi)的屬性和方法。
Java關(guān)鍵字this只能用于方法方法體內(nèi)。當(dāng)一個(gè)對(duì)象創(chuàng)建后,Java虛擬機(jī)(JVM)就會(huì)給這個(gè)對(duì)象分配一個(gè)引用自身的指針,這個(gè)指針的名字就是 this。因此,this只能在類(lèi)中的非靜態(tài)方法中使用,靜態(tài)方法和靜態(tài)的代碼塊中絕對(duì)不能出現(xiàn)this,這在“Java關(guān)鍵字static、final 使用總結(jié)”一文中給出了明確解釋。并且this只和特定的對(duì)象關(guān)聯(lián),而不和類(lèi)關(guān)聯(lián),同一個(gè)類(lèi)的不同對(duì)象有不同的this。
總結(jié)一下 ,this主要要三種用法:
1、表示對(duì)當(dāng)前對(duì)象的引用!
2、表示用類(lèi)的成員變量,而非函數(shù)參數(shù),注意在函數(shù)參數(shù)和成員變量同名是進(jìn)行區(qū)分!其實(shí)這是第一種用法的特例,比較常用,所以那出來(lái)強(qiáng)一下。
3、用于在構(gòu)造方法中引用滿足指定參數(shù)類(lèi)型的構(gòu)造器(其實(shí)也就是構(gòu)造方法)。但是這里必須非常注意:只能引用一個(gè)構(gòu)造方法且必須位于開(kāi)始!
注意:this不能用在static方法中!所以甚至有人給static方法的定義就是:沒(méi)有this的方法!雖然夸張,但是卻充分說(shuō)明this不能在static方法中使用!
二、static
static表示“全局”或者“靜態(tài)”的意思,用來(lái)修飾成員變量和成員方法,也可以形成靜態(tài)static代碼塊,但是Java語(yǔ)言中沒(méi)有全局變量的概念。
被static修飾的成員變量和成員方法獨(dú)立于該類(lèi)的任何對(duì)象。也就是說(shuō),它不依賴(lài)類(lèi)特定的實(shí)例,被類(lèi)的所有實(shí)例共享。
只要這個(gè)類(lèi)被加載,Java虛擬機(jī)就能根據(jù)類(lèi)名在運(yùn)行時(shí)數(shù)據(jù)區(qū)的方法區(qū)內(nèi)定找到他們。因此,static對(duì)象可以在它的任何對(duì)象創(chuàng)建之前訪問(wèn),無(wú)需引用任何對(duì)象。
用public修飾的static成員變量和成員方法本質(zhì)是全局變量和全局方法,當(dāng)聲明它類(lèi)的對(duì)象市,不生成static變量的副本,而是類(lèi)的所有實(shí)例共享同一個(gè)static變量。
static變量前可以有private修飾,表示這個(gè)變量可以在類(lèi)的靜態(tài)代碼塊中,或者類(lèi)的其他靜態(tài)成員方法中使用(當(dāng)然也可以在非靜態(tài)成員方法中使用--廢話),但是不能在其他類(lèi)中通過(guò)類(lèi)名來(lái)直接引用,這一點(diǎn)很重要。實(shí)際上你需要搞明白,private是訪問(wèn)權(quán)限限定,static表示不要實(shí)例化就可以使用,這樣就容易理解多了。static前面加上其它訪問(wèn)權(quán)限關(guān)鍵字的效果也以此類(lèi)推。
三、final和const
final這個(gè)關(guān)鍵字的含義是“這是無(wú)法改變的”或者“終態(tài)的”;
1.修飾變量
final成員變量表示常量,只能被賦值一次,賦值后值不再改變。
2.修飾方法
final方法不能被子類(lèi)方法覆蓋,但可以被繼承。
3.修飾類(lèi)
final類(lèi)不能被繼承,沒(méi)有子類(lèi),final類(lèi)中所有方法都是final的。
const是Java預(yù)留關(guān)鍵字,用于后期擴(kuò)展用,用法跟final相似,不常用
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
mybatis中使用oracle關(guān)鍵字出錯(cuò)的解決方法
這篇文章主要給大家介紹了關(guān)于mybatis中使用oracle關(guān)鍵字出錯(cuò)的解決方法,文中通過(guò)示例代碼將解決的方法介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-08-08SpringSecurity中的EnableWebSecurity注解啟用Web安全詳解
這篇文章主要介紹了SpringSecurity中的EnableWebSecurity注解啟用Web安全詳解,@EnableWebSecurity是Spring?Security用于啟用Web安全的注解,典型的用法是該注解用在某個(gè)Web安全配置類(lèi)上,實(shí)現(xiàn)了接口,需要的朋友可以參考下2023-12-12Java比較器實(shí)現(xiàn)方法項(xiàng)目案例
這篇文章主要介紹了Java比較器實(shí)現(xiàn)方法,結(jié)合具體項(xiàng)目案例形式分析了Java比較器相關(guān)排序操作技巧,需要的朋友可以參考下2019-03-03Java實(shí)現(xiàn)計(jì)算一個(gè)月有多少天和多少周
這篇文章主要介紹了Java實(shí)現(xiàn)計(jì)算一個(gè)月有多少天和多少周,本文直接給出實(shí)例代碼,需要的朋友可以參考下2015-06-06idea中g(shù)it如何修改commit(ChangeList的使用)
這篇文章主要介紹了idea中g(shù)it如何修改commit(ChangeList的使用),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04SpringBoot用多線程批量導(dǎo)入數(shù)據(jù)庫(kù)實(shí)現(xiàn)方法
這篇文章主要介紹了SpringBoot用多線程批量導(dǎo)入數(shù)據(jù)庫(kù)實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-02-02java生成json實(shí)現(xiàn)隱藏掉關(guān)鍵屬性
這篇文章主要介紹了java生成json實(shí)現(xiàn)隱藏掉關(guān)鍵屬性,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03springboot+kafka中@KafkaListener動(dòng)態(tài)指定多個(gè)topic問(wèn)題
這篇文章主要介紹了springboot+kafka中@KafkaListener動(dòng)態(tài)指定多個(gè)topic問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12