詳解Java中static關(guān)鍵字的使用和原理
概述
關(guān)于 static 關(guān)鍵字的使用,它可以用來修飾的成員變量和成員方法,被修飾的成員是屬于類的,而不是單單是屬 于某個對象的。也就是說,既然屬于類,就可以不靠創(chuàng)建對象來調(diào)用了。
定義和使用格式
類變量
當 static 修飾成員變量時,該變量稱為類變量。該類的每個對象都共享同一個類變量的值。任何對象都可以更改 該類變量的值,但也可以在不創(chuàng)建該類的對象的情況下對類變量進行操作。 類變量:使用 static關(guān)鍵字修飾的成員變量。 定義格式:
static 數(shù)據(jù)類型 變量名;
舉例:
static int id;
靜態(tài)方法
當static 修飾成員方法時,該方法稱為類方法 。靜態(tài)方法在聲明中有static ,建議使用類名來調(diào)用,而不需要 創(chuàng)建類的對象。調(diào)用方式非常簡單。 類方法:使用 static關(guān)鍵字修飾的成員方法,習慣稱為靜態(tài)方法。 定義格式:
修飾符 static 返回值類型 方法名 (參數(shù)列表){ // 執(zhí)行語句 }
舉例:在Student類中定義靜態(tài)方法
public static void showNum() { System.out.println("num:" + numberOfStudent); }
靜態(tài)方法調(diào)用的注意事項:
- 靜態(tài)方法可以直接訪問類變量和靜態(tài)方法。
- 靜態(tài)方法不能直接訪問普通成員變量或成員方法。反之,成員方法可以直接訪問類變量或靜態(tài)方法。
- 靜態(tài)方法中,不能使用this關(guān)鍵字。
小貼士:靜態(tài)方法只能訪問靜態(tài)成員。
public class MyClass { int num; // 成員變量 static int numStatic; // 靜態(tài)變量 // 成員方法 public void method() { System.out.println("這是一個成員方法。"); // 成員方法可以訪問成員變量 System.out.println(num); // 成員方法可以訪問靜態(tài)變量 System.out.println(numStatic); } // 靜態(tài)方法 public static void methodStatic() { System.out.println("這是一個靜態(tài)方法。"); // 靜態(tài)方法可以訪問靜態(tài)變量 System.out.println(numStatic); // 靜態(tài)不能直接訪問非靜態(tài) // System.out.println(num); // 錯誤寫法! // 靜態(tài)方法中不能使用this關(guān)鍵字。 // System.out.println(this); // 錯誤寫法! } }
調(diào)用格式
被static修飾的成員可以并且建議通過類名直接訪問。雖然也可以通過對象名訪問靜態(tài)成員,原因即多個對象均屬 于一個類,共享使用同一個靜態(tài)成員,但是不建議,會出現(xiàn)警告信息。 格式:
// 訪問類變量 類名.類變量名; // 調(diào)用靜態(tài)方法 類名.靜態(tài)方法名(參數(shù));
靜態(tài)原理圖解
static 修飾的內(nèi)容:
- 是隨著類的加載而加載的,且只加載一次。
- 存儲于一塊固定的內(nèi)存區(qū)域(靜態(tài)區(qū)),所以,可以直接被類名調(diào)用。
- 它優(yōu)先于對象存在,所以,可以被所有對象共享。
靜態(tài)代碼塊
靜態(tài)代碼塊:定義在成員位置,使用static修飾的代碼塊{ }。 位置:類中方法外。 執(zhí)行:隨著類的加載而執(zhí)行且執(zhí)行一次,優(yōu)先于main方法和構(gòu)造方法的執(zhí)行。 格式:
public class ClassName{ static { // 執(zhí)行語句 } }
作用:給類變量進行初始化賦值。用法演示,代碼如下:
public class Game { public static int number; public static ArrayList<String> list; static { // 給類變量賦值 number = 2; list = new ArrayList<String>(); // 添加元素到集合中 list.add("張三"); list.add("李四"); } }
小貼士: static 關(guān)鍵字,可以修飾變量、方法和代碼塊。在使用的過程中,其主要目的還是想在不創(chuàng)建對象的情況 下,去調(diào)用方法。
到此這篇關(guān)于詳解Java中static關(guān)鍵字的使用和原理的文章就介紹到這了,更多相關(guān)Java static關(guān)鍵字內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于SpringBoot3.x中spring.factories功能被移除的解決方案
這篇文章主要介紹了SpringBoot3.x中spring.factories功能被移除的解決方案,在配置好相關(guān)依賴、最小啟動類和配置之后,發(fā)現(xiàn)項目無法啟動,于是根據(jù)啟動上下文日志和按行DEBUG找到原因并且在等待組件升級兼容之前進行臨時性解決,需要的朋友可以參考下2022-12-12Java采用setAsciiStream方法檢索數(shù)據(jù)庫指定內(nèi)容實例解析
這篇文章主要介紹了Java采用setAsciiStream方法檢索數(shù)據(jù)庫指定內(nèi)容,是比較實用的功能,需要的朋友可以參考下2014-08-08Java?將PDF轉(zhuǎn)為HTML時保存到流的方法和步驟
本文介紹如何通過Java后端程序代碼將PDF文件轉(zhuǎn)為HTML,并將轉(zhuǎn)換后的HTML文件保存到流,下面是實現(xiàn)轉(zhuǎn)換的方法和步驟,感興趣的朋友一起看看吧2022-01-01Java實現(xiàn)簡易版聯(lián)網(wǎng)坦克對戰(zhàn)小游戲(附源碼)
這篇文章主要給大家介紹了關(guān)于Java實現(xiàn)簡易版聯(lián)網(wǎng)坦克對戰(zhàn)小游戲的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-04-04Java中的Unsafe在安全領(lǐng)域的使用總結(jié)和復(fù)現(xiàn)(實例詳解)
unsafe里面有很多好用的方法,比如allocateInstance可以直接創(chuàng)建實例對象,defineAnonymousClass可以創(chuàng)建一個VM匿名類(VM?Anonymous?Class),以及直接從內(nèi)存級別修改對象的值。這篇文章主要介紹了Java中的Unsafe在安全領(lǐng)域的一些應(yīng)用總結(jié)和復(fù)現(xiàn),需要的朋友可以參考下2022-03-03