日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 中关于this、static、final 关键字的使用

發布時間:2024/9/30 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 中关于this、static、final 关键字的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

this關鍵字

this 關鍵字主要有以下幾種作用:

1:當類成員變量與局部成員變量重名時,可以用this 關鍵字把局部成員變量賦值給類成員變量
2:this可以用來在構造函數中調用其他構造函數 ???? //必須定義在構造函數中的第一行
3:this調用本類中的其他方法,this通常省略

下面就通過一段代碼對上面的用法做一個示例:

public class TestThis {public static void main(String[] args) {This thisDemo = new This("Jas");thisDemo.showName();} }class This{private String username;This(){System.out.println("nonparametric constructor run......");}This(String username){this();this.username = username; }public void sayHello(){System.out.print("Hello" + " ");}public void showName(){this.sayHello(); //this 可以省略System.out.println(username);} }

輸出
nonparametric constructor run……
Hello Jas

在上面這個有一個無參構造器與一個有參構造器,通過有參構造器傳入一個String 類型的username,在類中也定義了一個private 私有的變量username,當想要構造器中的username 值賦給私有變量username 時就需要使用this 關鍵字,如果你不使用this 關鍵字,會得到一個警告:“Variable ‘username’ is assigned to itself”,此時私有的屬性 username 值為null。

通過上面的打印結果我們可以看出在創建有參構造對象時,無參構造函數被調用了,我們就是通過this 關鍵字完成的。如果你想在無參構造器中調用有參構造器只要在this() 中傳入對應的參數就可以了。我們還可以通過使用this 關鍵字調用本類中其他的方法,但我們不必要這么做,因為編譯器會自動為我們添加。

static關鍵字

static關鍵字有以下幾種特點:

1.static是一個修飾符,用于修飾成員
2.static修飾的成員變量被所有的對象共享
3.static優先于對象的存在,因為static的成員變量隨著類的加載就已經存在了
4.實現共享,static修飾的類成員變量和類方法可以用類名直接調用
5.static修飾的成員變量多了一種調用方式,可以直接被類名調用,類名.成員變量

類成員變量與靜態變量的區別:

1.生命周期不同
成員變量隨著對象的創建而存在,隨著對象的回收而釋放
靜態變量隨著類的加載而存在,隨著類的消失而消失
2.調用方式不同
成員變量只能被對象調用
靜態變量可以被對象調用和類名調用
3.別名不同
成員變量也稱為實例變量
靜態變量稱為類變量
4.數據存儲位置不同
成員變量存在堆內存的對象中,所以也叫對象的特有數據
靜態變量存儲在方法區(共享數據區)的靜態區,所以也叫對象的共享數據

static 關鍵字使用的注意事項:(static 關鍵字修飾的變量并不是依賴于對象而存在,它依賴于類的存在而存在,所以在靜態方法中你不能調用非靜態方法(當然你也不能調用非靜態變量),反過來卻是可以的。)

1.靜態方法只能訪問靜態成員。(非靜態既可以訪問靜態又可以訪問非靜態)
2.靜態方法中不可以使用this和super關鍵字。(沒有聲明對象)
3.主函數是靜態的。(所以主函數只能訪問當前類的靜態方法)

靜態代碼塊(存在于類中):

隨著類的加載而運行,只執行一次
作用:
用于給類初始化 –> 類比: 構造函數給類對象初始化
一般適用于成員都是靜態變量的類中
static{ }

現在總結一下static 主要的一些應用場景:當你想要一個變量被由該類導出的所有對象共享時,那么你可以將該變量定義為static 的,這樣做可以減少堆內存的消耗。如果你想要一段代碼隨著類的加載只執行一次時(并不隨著每個對象的創建都加載一次),那么你可以使用靜態代碼塊,比如當我們想要加載一些配置文件的時候。

單例模式中惡漢式就是使用了靜態變量,該變量只會在內存中創建一個對象。

class Person{private Person(){}Person static s = new Person();public static Person f(){return s;} }

通過靜態代碼塊加載配置文件。

private static Properties pro = null;//初始化文件資源static{pro = new Properties();try{pro.load(new FileReader(BasicFactory.class.getClassLoader().getResource("config.properties").getPath()));}catch (Exception e) {e.printStackTrace();}}

final關鍵字

這里主要介紹final 的三種情況:修飾數據、方法和類

修飾數據和參數
有的時候你希望告知編譯器一些數據時恒定不變的,那么final 關鍵字修飾的變量就能幫你完成這個任務。

1.一個永不改變的編譯期常量(被static 與 final 同時修飾)
2.一個在運行時被初始化的值,而你卻不想改變它

對于基本數據類型,final 使數值恒定不變;對于對象的引用,final 使引用恒定不變。一旦被初始化指定一個對象那么就無法再把它改為指向另一個對象。

final 修飾方法
使用final 修飾方法的原因主要有兩個:第一個原因是把方法鎖定,以防止任何繼承類修改它的含義(即:final 修飾的方法不可以被覆蓋);另一個原因就是效率,如果一個方法被修飾為final 的,就是同意編譯器將針對該方法的所有調用都轉為內嵌調用。但是隨著Java版本的更新,虛擬機可以檢測到這種個情況,并優化去掉這些效率反而降低的額外的內嵌調用。所以現在只有在你明確禁止該方法被覆蓋時,才會將該方法設置為final 的。

在這里提一下final 與private ,類中所有的private 方法都隱式的被指定為final 的。由于無法調用private 方法,因此也就無法覆蓋它。

修飾類
當某個類的整體被修飾為final 時,就意味著你不打算繼承該類,并且你不允許任何人這樣做。當然如果你將一個類定義為final 的那么final 中的所有方法也都隱式的被指定為final 的。我們要謹慎使用final 關鍵字,因為你預見一個類是否被復用是很困難的。在Java 原生類中很多就使用了final ,比如String ,Character 等。

參考書籍
《Java 編程思想》Bruce Eckel 著 陳昊鵬 譯

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Java 中关于this、static、final 关键字的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。