Java中的static關鍵字深入理解
在學習Java以來很長一段時間,我都不能理解為什么修飾一個方法的關鍵字各不相同,為什么有的方法可以直接調用,而有的方法需要用對象才能調用。毫不夸張的說,最近一次讓我決定去整理清楚static關鍵字,是因為在寫jdbc工具類時,其中通過靜態(tài)代碼塊來實現(xiàn)加載驅動才讓我對它有了新的認識。
通俗來講,歸為幾點:
- 由static關鍵字修飾的方法或成員變量,不需依賴對象,就可直接訪問。(通過 類名.方法名() 或 類名.屬性 直接調用)
- static關鍵字不會影響到變量或方法的作用域
- static關鍵字不允許修飾局部變量
- 靜態(tài)方法中不能使用this
- 無論方法還是變量:由static修飾的靜態(tài)方法不能訪問非靜態(tài)的方法或成員變量,但是反之,非靜態(tài)的方法可以訪問靜態(tài)的或非靜態(tài)的。
- static 關鍵字避免了先要new出對象的繁瑣和資源消耗,因此常被用在工具類中。
下面來仔細介紹以下static關鍵字的作用,主要為以下四個方面:
修飾成員變量
static關鍵字修飾的成員變量稱為靜態(tài)成員變量,也稱靜態(tài)變量。有了靜態(tài)變量與之對應的就是非靜態(tài)變量
- 靜態(tài)變量:被所有對象共享,內存中只有一個副本,當且僅當類被初次加載時被初始化一次
- 非靜態(tài)變量:是對象擁有的,當對象被創(chuàng)建時被初始化,內存中存在多個副本且互不影響
public class Test{
public static void main(String[] args) {
System.out.println(Person.name);
System.out.println(new Person().age);
}
}
class Person{
static String name;
int age;
}
修飾方法
static修飾的方法稱為靜態(tài)方法。靜態(tài)方法可以直接調用類的靜態(tài)變量和其他靜態(tài)方法,不能直接調用成員變量和非靜態(tài)方法(除非通過對象調用)。
class A {
static {
System.out.println("靜態(tài)代碼塊");
}
static final int i;
int j;
static void method() {
System.out.println(i);//直接訪問靜態(tài)變量
System.out.println(new D().j);//靜態(tài)方法中訪問非靜態(tài)變量需要通過對象調用
method1();//直接調用靜態(tài)方法
new D().method2();//靜態(tài)方法中訪問非靜態(tài)方法需要通過對象調用
}
static void method1() {
System.out.println(i);//靜態(tài)方法中直接訪問靜態(tài)變量
}
void method2() {
System.out.println(i);//非靜態(tài)方法中可以直接訪問靜態(tài)變量
}
}
靜態(tài)代碼塊
static修飾的代碼塊叫做靜態(tài)代碼塊。當類初次被加載時,會按照代碼塊順序執(zhí)行一次。用來優(yōu)化程序。
例如在開頭提到的用在JDBC工具類中,使用靜態(tài)代碼塊來加載資源,當類被初始化時只執(zhí)行一次。
注:構造方法用于對象的初始化,靜態(tài)代碼塊用于類的初始化操作。
靜態(tài)導包
相比于以上三種,第四種是我之前沒有接觸過的。
在用import導入包或者類時,可以用static修飾包名或者類,表示靜態(tài)導入。不同于非static導入,采用static導入包后,在不與當前類的方法名沖突的情況下,無需使用“類名.方法名”的方法去調用類方法了,直接可以采用"方法名"去調用類方法,就好像是該類自己的方法一樣使用即可。
public class Test {
static void method1() {
System.out.println("static method1");
}
static void method2() {
System.out.println("static method2");
}
}
靜態(tài)導入之后:
import static com.liu.stuatic.Test.method1;
public class Client {
public static void main(String[] args) {
method1(); // 通過靜態(tài)導入的方法不需類名直接調用
StaticTest.method2();
}
}
到此這篇關于Java中的static關鍵字深入理解的文章就介紹到這了,更多相關Java中的static關鍵字內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java中常見延時隊列的實現(xiàn)方案小結(建議收藏)
延時隊列它要具有隊列的特性,再給它附加一個延遲消費隊列消息的功能,也就是說可以指定隊列中的消息在哪個時間點被消費,這篇文章主要介紹了Java中常見延時隊列的實現(xiàn)方案總結,需要的朋友可以參考下2024-04-04
Spring Boot優(yōu)化后啟動速度快到飛起技巧示例
這篇文章主要為大家介紹了Spring Boot優(yōu)化后啟動速度快到飛起的技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07
Java 實戰(zhàn)項目錘煉之在線購書商城系統(tǒng)的實現(xiàn)流程
讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+jsp+mysql+servlet+ajax實現(xiàn)一個在線購書商城系統(tǒng),大家可以在過程中查缺補漏,提升水平2021-11-11
Java實現(xiàn)的模糊匹配某文件夾下的文件并刪除功能示例
這篇文章主要介紹了Java實現(xiàn)的模糊匹配某文件夾下的文件并刪除功能,涉及java針對目錄與文件的遍歷、匹配、判斷、刪除等相關操作技巧,需要的朋友可以參考下2018-02-02

