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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【static关键字的作用是什么?它用在什么场景?static关键字深度解析来袭】

發布時間:2024/10/5 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【static关键字的作用是什么?它用在什么场景?static关键字深度解析来袭】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2021/9/4/18:37

文章目錄

  • 1、一般情況下類的創建
  • 2.一般情況下類創建產生的問題
    • 2.1、第一種情況如何使用static解決
    • 2.2、第二種情況如何使用static解決
  • 3.如何調用static修飾的屬性或方法
  • 4.靜態變量、方法和非靜態變量、方法之間的調用問題
  • 5、有關static相關的案例
  • 6、靜態代碼塊
  • 7、靜態代碼塊的作用以及需要注意的細節


1、一般情況下類的創建

一般情況下,只有當我們執行new來創建對象時,才能為數據分配存儲空間;其中的方法或者屬性才能被外界調用

2.一般情況下類創建產生的問題

有兩種情況是上面無法解決的。第一種情況就是為某一特定域分配單一的存儲空間(域也可以理解為類屬性),不去考慮究竟要創建多少對象;第二種情況是希望某個方法不與類的任何對象聯系在一起,也就是即使沒有創建對象,也依舊可以調用這個方法。

2.1、第一種情況如何使用static解決

如上圖所示,nation變量的值永遠為china,創建一兩個對象還可以,如果創建了上百個對象,那么是不是很浪費資源。所以我們可以使用靜態關鍵字static進行標識該變量,就會變成如下

這就是使用static解決第一種情況(為特定域分配單一的存儲空間),這靜態區里的變量隨著類的加載就存在了。在程序的整個運行過程中都存在,當程序結束時,由系統進行清除。(因此由static修飾的屬性也可以成為全局變量)

2.2、第二種情況如何使用static解決

第二種情況我們都遇到過,比如工具類某某Utils,我們一般都是在其他類中直接類名.方法直接調用;

使用static修飾也要注意很多,不能過多的使用static修飾變量或者方法,因為static修飾的變量或方法是屬于類層級的,雖然類的加載而分配存儲空間,因此,你的static方法或者屬性越多,在一開始就會分配固定的內存空間,那么大部分的內存空間分配給了static,剩下的內存空間就不多了,就會造成內存負擔。

public static void main(String[] args) {..........}

static方法在不創建對象的情況下就可以通過類名調用,這對于main方法很重要,main方法是運行一個應用的入口點。

3.如何調用static修飾的屬性或方法

1.類名.屬性

class Test{static String num = 1; } Test.num = 2;

2.引用.屬性

Test test = new Test(); test.num = 2;

由于靜態修飾的方法或屬性是類層級的,隨著類的加載而出現,所以通過類名.方法調用應該都會明白;那么通過引用調用靜態變量該怎么理解呢?
這是因為static修飾的變量或方法是被類的所有對象共享的,也就是其中任何一個對象都可以調用進行修改。

4.靜態變量、方法和非靜態變量、方法之間的調用問題

1.無法在靜態方法中調用非靜態變量

這是因為靜態方法是隨著類的加載而加載,非靜態變量是new該類對象時而加載;前者出現過早,根本無法加載到其中的非靜態變量。

2.非靜態方法可以調用靜態變量

和第一個類似,靜態變量首先出現,輪到加載非靜態方法時當然可以得到

3.無法在靜態方法中調用非靜態方法,可以在靜態方法中調用非靜態方法

總之,只要牢牢記住靜態和非靜態的加載順序就很容易理解了。

5、有關static相關的案例

class StaticTest {static int num = 10; } StaticTest test1 = new StaticTest(); StaticTest test2 = new StaticTest(); test1.num++; System.out.println(test2.num);

結果:11

只要記住static修飾的變量被類的所有對象共享,那么這一類的題就會很容易就能解決!

6、靜態代碼塊

首先靜態代碼塊隨著類的加載而執行,而且只運行一次;如果由多個靜態代碼塊,會按照順序來執行。

看下面一段代碼是否在你的意料之中

public class StaticTest {static {System.out.println("靜態代碼塊執行....");System.out.println(country);}private static String country = "china";public static void main(String[] args) {System.out.println(country);} }

結果

當我該變順序之后

public class StaticTest {private static String country = "china";static {System.out.println("靜態代碼塊執行....");System.out.println(country);}public static void main(String[] args) {System.out.println(country);} }

結果:

所以當在靜態代碼塊中調用靜態變量時,一定要將定義靜態變量的位置放在靜態代碼塊之前。

7、靜態代碼塊的作用以及需要注意的細節

如果一些代碼在項目啟動時就要執行并且只需要執行一次,那么就可以放到靜態代碼塊中。比如我們啟動一個項目要加載相應的配置文件,那么我們就可以將其放到靜態代碼塊中

需要注意的細節

1.靜態代碼塊不能出現在任何方法當中

無論是靜態方法還是非靜態方法都是如此
對于非靜態方法,這個很好理解,因為靜態代碼塊是在類加載之后就能運行的;而非靜態方法只能在new完對象之后,通過對象才能運行這個方法
對于靜態方法,在類加載時,雖然靜態方法也加載了,但是靜態方法必須通過類名或者對象名才能訪問。也就是說靜態方法是被動運行的,靜態代碼塊是主動運行的。

2、靜態代碼塊不能訪問普通變量

這個應該就不用說了。需要注意的是靜態代碼塊中能夠訪問靜態變量,但必須將靜態變量的位置放在靜態代碼塊前面。

2021/9/4/22:43

總結

以上是生活随笔為你收集整理的【static关键字的作用是什么?它用在什么场景?static关键字深度解析来袭】的全部內容,希望文章能夠幫你解決所遇到的問題。

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