Java基礎(chǔ)之static關(guān)鍵字的使用講解
static關(guān)鍵字
在Java中,static是靜態(tài)修飾關(guān)鍵字。用于修飾類的成員方法、類的成員變量,另外可以編寫static代碼塊來優(yōu)化程序性能;被static關(guān)鍵字修飾的方法或者變量不需要依賴于對(duì)象來進(jìn)行訪問,只要類被加載了,就可以通過類名去進(jìn)行訪問。
static關(guān)鍵字的作用
方便在沒有創(chuàng)建對(duì)象的情況下來進(jìn)行調(diào)用方法或者變量。被static關(guān)鍵字修飾的方法或者變量不需要依賴對(duì)象來進(jìn)行訪問,只要類被加載了,就可以通過類名去訪問。
1.static修飾成員方法
static修飾的方法稱為靜態(tài)方法,由于靜態(tài)方法不依賴任何對(duì)象就能夠訪問,因此靜態(tài)方法中不能用this和super關(guān)鍵字,不能直接訪問所屬類的實(shí)例變量和實(shí)例方法,只能訪問所屬類的靜態(tài)成員變量和成員方法。代碼示例:

從上面代碼看出,在靜態(tài)方法t2調(diào)用非靜態(tài)成員變量age和非靜態(tài)成員方法t1時(shí),系統(tǒng)報(bào)錯(cuò)。同時(shí)在靜態(tài)方法t3中調(diào)用靜態(tài)方法t2,編譯通過。得出結(jié)論:在靜態(tài)方法中不能訪問非靜態(tài)成員變量和非靜態(tài)成員方法,但在非靜態(tài)成員方法中能夠訪問靜態(tài)成員方法和靜態(tài)成員變量。同時(shí)靜態(tài)的只能訪問靜態(tài)的。
2.static修飾成員變量
按照是否是靜態(tài)的可對(duì)類成員變量進(jìn)行分類:一種是被static修飾的變量,叫做靜態(tài)變量或者類變量;另一種是沒有被static修飾的變量,叫實(shí)例變量。
靜態(tài)變量和非靜態(tài)變量的區(qū)別:
- 靜態(tài)變量被所有對(duì)象共享,在內(nèi)存中只有一個(gè)副本,在類初次加載的時(shí)候才會(huì)初始化。
- 非靜態(tài)變量是對(duì)象所擁有的,在創(chuàng)建對(duì)象的時(shí)候被初始化,存在多個(gè)副本,各個(gè)對(duì)象擁有的副本互不影響。
static成員變量的初始化順序按照定義的順序進(jìn)行初始化。
3.static修飾代碼塊
static關(guān)鍵字還可用來形成靜態(tài)代碼塊來優(yōu)化程序性能,原因是它的特性:只會(huì)在類被初次加載的時(shí)候執(zhí)行一次。
靜態(tài)方法只能繼承,不能重寫
代碼示例如下:

上面代碼中在父類和子類中各自定義一個(gè)aa方法,在左邊顯示為Override標(biāo)識(shí);但在父類和子類中各自定義一個(gè)static方法test,但并沒有出現(xiàn)Override標(biāo)識(shí),由此可知用static修飾的方法不能被重寫。同時(shí),如果子類不用static關(guān)鍵字修飾,繼承父類時(shí)編譯出錯(cuò),可知靜態(tài)方法只能被靜態(tài)方法繼承。
總結(jié)
- static是一個(gè)修飾符,用來修飾成員,被修飾的成員變量稱為靜態(tài)變量或類變量。
- static修飾的成員被所有的對(duì)象共享。
- static修飾的成員能直接被類名調(diào)用,形式為:類名.靜態(tài)成員。
- 靜態(tài)的只能訪問靜態(tài)的。
- static關(guān)鍵字不能改變變量和方法的訪問權(quán)限。
- 靜態(tài)成員變量雖然獨(dú)立于對(duì)象,但是不代表不能通過對(duì)象去訪問,所有的靜態(tài)方法和靜態(tài)變量都可以通過對(duì)象訪問,只要訪問權(quán)限足夠。
- static不允許用來修飾局部變量。
到此這篇關(guān)于Java基礎(chǔ)之static關(guān)鍵字的使用講解的文章就介紹到這了,更多相關(guān)Java基礎(chǔ)之static內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot 多任務(wù)并行+線程池處理的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot 多任務(wù)并行+線程池處理的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04
Java最簡潔數(shù)據(jù)結(jié)構(gòu)之冒泡排序快速理解
冒泡排序是編程中數(shù)據(jù)結(jié)構(gòu)繞不過的一個(gè)基礎(chǔ)點(diǎn),有關(guān)于冒泡排序的文章也有很多,但可能會(huì)比較繚亂未能理解,本章將一子u為簡潔明了的例圖帶你通關(guān)冒泡排序2021-11-11
Springboot引入hibernate配置自動(dòng)建表并進(jìn)行增刪改查操作
這篇文章主要介紹了Springboot引入hibernate配置自動(dòng)建表并進(jìn)行增刪改查,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09
Spring?Boot?使用?Disruptor?做內(nèi)部高性能消息隊(duì)列
這篇文章主要介紹了Spring?Boot?使用?Disruptor?做內(nèi)部高性能消息隊(duì)列,工作中遇到項(xiàng)目使用Disruptor做消息隊(duì)列,對(duì)你沒看錯(cuò),不是Kafka,也不是rabbitmq。Disruptor有個(gè)最大的優(yōu)點(diǎn)就是快,還有一點(diǎn)它是開源的哦,下面做個(gè)簡單的記錄2022-06-06
java Hibernate save()與persist()區(qū)別
本文章來給各位同學(xué)介紹一下Hibernate save()與persist()區(qū)別,希望此文章能對(duì)各位同學(xué)對(duì)于Hibernate save()與persist()有所理解2016-01-01
java如何獲取request中json數(shù)據(jù)
這篇文章主要給大家介紹了關(guān)于java如何獲取request中json數(shù)據(jù)的相關(guān)資料,文中通過代碼示例以及圖文將獲取的方法介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08

