一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java中的static關鍵字深入理解

Java中的static關鍵字深入理解

2021-08-17 10:38smart_1234 Java教程

這篇文章主要介紹了Java中的static關鍵字深入理解,文字和代碼列舉了實際例子,有感興趣的同學可以研究下

在學習Java以來很長一段時間,我都不能理解為什么修飾一個方法的關鍵字各不相同,為什么有的方法可以直接調用,而有的方法需要用對象才能調用。毫不夸張的說,最近一次讓我決定去整理清楚static關鍵字,是因為在寫jdbc工具類時,其中通過靜態代碼塊來實現加載驅動才讓我對它有了新的認識。

通俗來講,歸為幾點:

  • 由static關鍵字修飾的方法或成員變量,不需依賴對象,就可直接訪問。(通過 類名.方法名() 或 類名.屬性 直接調用)
  • static關鍵字不會影響到變量或方法的作用域
  • static關鍵字不允許修飾局部變量
  • 靜態方法中不能使用this
  • 無論方法還是變量:由static修飾的靜態方法不能訪問非靜態的方法或成員變量,但是反之,非靜態的方法可以訪問靜態的或非靜態的。
  • static 關鍵字避免了先要new出對象的繁瑣和資源消耗,因此常被用在工具類中。

下面來仔細介紹以下static關鍵字的作用,主要為以下四個方面:

修飾成員變量

static關鍵字修飾的成員變量稱為靜態成員變量,也稱靜態變量。有了靜態變量與之對應的就是非靜態變量

  • 靜態變量:被所有對象共享,內存中只有一個副本,當且僅當類被初次加載時被初始化一次
  • 非靜態變量:是對象擁有的,當對象被創建時被初始化,內存中存在多個副本且互不影響
?
1
2
3
4
5
6
7
8
9
10
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修飾的方法稱為靜態方法。靜態方法可以直接調用類的靜態變量和其他靜態方法,不能直接調用成員變量和非靜態方法(除非通過對象調用)。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class A {
    static {
        System.out.println("靜態代碼塊");
    }
    static final int i;
    int j;
    static void method() {
        System.out.println(i);//直接訪問靜態變量
        System.out.println(new D().j);//靜態方法中訪問非靜態變量需要通過對象調用
        
        method1();//直接調用靜態方法
        new D().method2();//靜態方法中訪問非靜態方法需要通過對象調用
    }
    
    static void method1() {
        System.out.println(i);//靜態方法中直接訪問靜態變量
    }
    void method2() {
        System.out.println(i);//非靜態方法中可以直接訪問靜態變量
    }
}

靜態代碼塊

static修飾的代碼塊叫做靜態代碼塊。當類初次被加載時,會按照代碼塊順序執行一次。用來優化程序。
例如在開頭提到的用在JDBC工具類中,使用靜態代碼塊來加載資源,當類被初始化時只執行一次。
注:構造方法用于對象的初始化,靜態代碼塊用于類的初始化操作。

靜態導包

相比于以上三種,第四種是我之前沒有接觸過的。
在用import導入包或者類時,可以用static修飾包名或者類,表示靜態導入。不同于非static導入,采用static導入包后,在不與當前類的方法名沖突的情況下,無需使用“類名.方法名”的方法去調用類方法了,直接可以采用"方法名"去調用類方法,就好像是該類自己的方法一樣使用即可。

?
1
2
3
4
5
6
7
8
9
public class Test {
    static void method1() {
        System.out.println("static method1");
    }
    
    static void method2() {
        System.out.println("static method2");
    }
}

靜態導入之后:

?
1
2
3
4
5
6
7
8
import static com.liu.stuatic.Test.method1;
 
public class Client {
    public static void main(String[] args) {
        method1(); // 通過靜態導入的方法不需類名直接調用
        StaticTest.method2();
    }
}

到此這篇關于Java中的static關鍵字深入理解的文章就介紹到這了,更多相關Java中的static關鍵字內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/smart_1234/article/details/114148512

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99久久免费国产精品热 | 欧美在线看片a免费观看 | 99热久久这里只精品国产www | 美人老师沦为 | 99午夜 | 果冻传媒天美传媒乌鸦传媒 | 69p69国产精品| 国产午夜精品久久理论片小说 | 国产成人精品视频午夜 | 青青草原国产一区二区 | 欧美一级特黄特色大片 | 欧美日韩一区不卡 | 色综合合久久天天综合绕视看 | 久久精品亚洲精品国产欧美 | 美女主播免费观看 | 175m美女被网友灌醉啪啪玩脚 | 欧美国产日本精品一区二区三区 | 欧美日韩国产一区二区三区伦 | 四虎免费影院ww4164h | 99久久精品久久久久久清纯 | 国产成人精品午夜视频' | 女人张开腿让男人桶视频免费大全 | 视频在线精品 | 大胸纲手被羞羞漫画网站 | a国产在线| 91视频破解版 | 肉肉小说在线阅读 | 精品国语国产在线对白 | 国产福利在线免费观看 | 国产99热 | 天天色踪合 | 欧美人禽杂交av片 | 国产成人精品一区 | 98色花堂永久地址国产精品 | 久久中文字幕乱码免费 | 波多野结衣无码 | 日韩国产欧美成人一区二区影院 | 天使萌痴汉在线中文字幕 | 好男人资源在线观看免费的 | 2021国产精品露脸在线 | 亚洲成人伦理 |