1. 程式人生 > 其它 >JAVA關鍵字——static的使用

JAVA關鍵字——static的使用

技術標籤:java基礎關鍵字java

static的使用

一、static:靜態的;

二、static可以用來修飾類的結構,即修飾屬性、方法、程式碼塊、內部類;

三、修飾屬性:屬性就成了靜態變數(或者說類變數)

屬性:按是否使用static修飾,又分為:靜態屬性和非靜態屬性

1、非靜態屬性也叫例項變數;

2、例項變數:我們建立了類的多個物件,每個物件都獨立地擁有一套類中的非靜態屬性。當修改其中一個物件中的非靜態屬性值的時候,不會導致其他物件中同樣的屬性值的修改;

3、靜態變數:我們建立了類的多個物件,多個物件共享同一個靜態變數。當通過某一個物件修改靜態變數時,會導致其他物件呼叫此靜態變數時,呼叫到的值是修改過的;看完下面的講解再回來看這條講解就會清楚,因為靜態變數是在靜態域中的,一個物件修改了這個變數,別的物件呼叫到這個變數的時候呼叫到的就是修改後的了。

4、靜態變數隨著類的載入而載入,可以通過“類.靜態變數”的方式進行呼叫,所以也叫類變數

5、例項變數是隨著物件的建立而載入的,所以也叫例項變數

6、因為是先載入了類,後面才去建立物件,而靜態變數是隨著類的載入而載入,所以靜態變數的載入要早於物件的建立;

7、由於類只會載入一次,則靜態變數在記憶體中也只會存在一份,這也就是為什麼多個物件共享同一個靜態變量了。它存在方法區的靜態域中。

8、關於類和物件呼叫靜態變數和例項變數的情況:

8.1類可以呼叫靜態變數,因為靜態變數是在類載入的時候載入的,但類不能呼叫例項變數,因為例項變數是後面物件載入後才有的;

8.2物件可以呼叫靜態變數,因為物件建立的時候靜態變數已經存在了,也可以呼叫例項變數,因為例項變數是隨著物件的建立而載入的。

public class Static1 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//通過帶參構造器建立一個物件
		Chinese p1 = new Chinese("中國","fft");
		System.out.println(p1.nation);
		//再建立一個新的物件
		Chinese p2 = new Chinese();
		System.out.println(p2.nation);
	}	
}
class Chinese
{ static String nation;//這個就是靜態變數(或者說類變數) String name;//例項變數; public Chinese() {} public Chinese(String nation,String name) { this.nation = nation; this.name = name; } }

在這裡插入圖片描述

四、修飾方法:靜態方法;

1、隨著類的載入而載入,可以通過“類.靜態方法”的方式進行呼叫;

2、同屬性一樣,類可以呼叫靜態方法、不能呼叫非靜態方法;
物件可以呼叫靜態方法和非靜態方法;

3、
①靜態方法中,只能呼叫靜態的方法或靜態的屬性,因為它在類載入的時候就載入,不能呼叫後面才載入的東西;

②非靜態方法中,既可以呼叫非靜態的方法或屬性,也可以呼叫靜態的方法或屬性;

4、注意點:
①在靜態的方法內,不能使用this、super關鍵字;this和super都是用來呼叫當前物件或父類的屬性、方法、構造器的,這三者都是隨著物件的載入而載入的,自然不可以使用this和super來操作它們。

②關於靜態屬性和靜態方法的使用,應該從生命週期的角度去理解(即先後載入和先後銷燬的問題:靜態的是隨著類的載入(載入在快取區,不會輕易銷燬)而載入,類的銷燬而銷燬,類在jvm關掉的時候銷燬;非靜態的是隨著物件的載入而載入,隨著物件的銷燬而銷燬)。

五、什麼時候要用static?

1、屬性是可以被多個物件所共享的,不會隨著物件的不同而不同;

2、類中的常量也常常宣告為static;

3、操作靜態屬性的方法,通常設定為static,如set和get方法;

4、工具類中的方法,習慣上宣告為static,如Math、Arrays、Collections。

以上便是筆者對static的理解總結,有不足之處還望各位朋友指出呀!