1. 程式人生 > >Static關鍵字的作用有那些?

Static關鍵字的作用有那些?

Static可以用於修飾變數、方法、程式碼塊、內部類和靜態導包。

1、Static可以用於修飾變數

示例如下:

package com.cn;

public class TestStatic {
	
	private static int a = 10;
	
	public static void main(String[] args) {
		System.out.println(TestStatic.a);
		
	}
	
}
2、Static可以用於修飾方法
示例如下:
package com.cn;

public class TestStatic {
	
	public static void main(String[] args) {
		System.out.println(TestStatic.test());
		
	}
	
	public static int test(){
		System.out.println("執行test方法");
		return 2;
	}
}
3、靜態塊
靜態塊如下:
package com.cn;

public class ParentClass {
	
	static {
		System.out.println("父類初始化");
	}
}

有三個需要注意是事項:
①靜態資源的載入順序是嚴格按照靜態資源的定義順序來載入的
package com.cn;

public class TestStatic {
	
	private static int a = test();
	
	static {
		System.out.println(a);
		System.out.println("執行TestStatic類的靜態塊");
	}
	
	public static void main(String[] args) {
		
	}
	
	public static int test(){
		System.out.println("執行test方法");
		return 2;
	}
}

輸出結果:

執行test方法
2
執行TestStatic類的靜態塊

在類的初始化的時候,會先執行test()方法,然後是靜態塊

②靜態程式碼塊對於定義在它之前的靜態常量可以賦值和訪問,但是對於定義在它之後的靜態變數,只可以賦值不可以訪問。
錯誤如下:Cannot reference a field before it is defined

package com.cn;

public class ParentClass {
	public static int b = 1;
	static {
		System.out.println(b);
		a = 4;
		System.out.println("父類初始化");
		System.out.println(a);
		
	}
	public static int a = 3;
}

③靜態塊執行順序:是先執行父類靜態塊,然後在執行子類靜態塊,靜態塊尤切只執行一次。

package com.cn;

public class ParentClass {
	
	static {
		System.out.println("父類初始化");
	}
	
	public ParentClass(){
		System.out.println("父類的構造方法");
	}
}

package com.cn;

public class ChildrenClass extends ParentClass{
	
	static {
		System.out.println("子類初始化");
	}
	
	public ChildrenClass(){
		System.out.println("子類的構造方法");
	}
}

package com.cn;

public class TestParentAndSon {

	public static void main(String[] args) {
		new ChildrenClass();
		new ChildrenClass();
		
	}

}
輸出結果:
父類初始化
子類初始化
父類的構造方法
子類的構造方法
父類的構造方法
子類的構造方法


4、static修飾類
用static修飾的內部類就是靜態內部類:
package com.cn;

public class OuterClass {
	
	public static void look(){
		System.out.println("執行OuterClass的look方法");
	}
	
	public void watch(){
		System.out.println("執行OuterClass的watch方法");
	}
	
	public static class InnerClass{
		
		public static void print(){
			System.out.println("執行InnerClass的print方法");
		}
		
		public void test(){
			System.out.println("執行InnerClass的test方法");
		}
		
		public static void look(){
			System.out.println("執行InnerClass的look方法");
			OuterClass.look();
		}
		
	}
	
	public static void print(){
		System.out.println("執行OuterClass的print方法");
	}
	
	public void test(){
		System.out.println("執行OuterClass的test方法");
	}
	
	
}

package com.cn;

public class TestStatic {
	
	public static void main(String[] args) {
		OuterClass.InnerClass in = new OuterClass.InnerClass();
		in.test();
		OuterClass.InnerClass.print();
		OuterClass os = new OuterClass();
		os.test();
		OuterClass.print();
		OuterClass.look();
	}
	
}

輸出結果:
執行InnerClass的test方法
執行InnerClass的print方法
執行OuterClass的test方法
執行OuterClass的print方法
執行OuterClass的look方法

由此得出如下結論:
靜態內部類也可以擁有靜態方法和非靜態方法
靜態內部類只可以訪問外部類的靜態成員和靜態方法,不可以訪問非靜態成員和非靜態方法
靜態內部類訪問自己內部的靜態成員和靜態方法時,也是通過點出來的,不過在前面需要加上外部類的名字。

例如:
OuterClass.InnerClass.print();

5、靜態導包

①正常情況下,我們如果想引用Math下的靜態資源,需要這樣寫Math.random(),
②如果我們用static這個關鍵字進行靜態導包的話,就可以這樣寫random(),不必每次都新增Math類名

程式碼一

package com.cn;

public class TestStatic {

	public static void main(String[] args) {
		
		System.out.println(Math.random());
	}

}
程式碼二
package com.cn;

import static java.lang.Math.*;
public class TestStatic {

	public static void main(String[] args) {
		
		System.out.println(random());
	}

}

PS:程式碼二的話,一定要注意Math後面有一個*,不能省略
其實程式碼一和程式碼二是一樣的,至於怎麼使用,看各自的愛好吧

相關推薦

Static關鍵字作用那些

Static可以用於修飾變數、方法、程式碼塊、內部類和靜態導包。 1、Static可以用於修飾變數 示例如下: package com.cn; public class TestStatic { private static int a = 10; publi

C++中static關鍵字作用總結

可見性 apple 局部變量 內存 父類靜態 初始化 ati 退出 變量存儲 1.先來介紹它的第一條也是最重要的一條:隱藏。(static函數,static變量均可) 當同時編譯多個文件時,所有未加static前綴的全局變量和函數都具有全局可見性。舉例來說明。同時編譯兩個源

C++ static關鍵字作用

esp 接收 name names 分配 c++ spa 成員函數 它的 (1)函數體內static變量的作用範圍為該函數體,不同於auto變量,該變量的內存只被分配一次,因此其值在下次調用時仍維持上次的值; (2)在模塊內的static全局變量可以被模塊內所用函數訪問,

static關鍵字作用總結

轉自:https://www.cnblogs.com/xrq730/p/4820992.html   前言 之前講到final關鍵字的作用是每次面試的時候我必問求職者的兩個問題之一,另外一個問題就是文字會寫到的static。final和static一樣,都是一個小問題可以看到一個人的基礎是否紮

C++中static關鍵字作用

@著作權歸作者所有:來自CSDN部落格作者大鬍子的艾娃的原創作品,如需轉載,請註明出處,否則將追究法律責任。 如有錯誤的地方歡迎指正,謝謝! 一、 static宣告全域性靜態變數和區域性靜態變數 1、static宣告全域性靜態變數 該全域性變數只能供本模組使用,

Java中static關鍵字作用

import static java.lang.System.out; public class StaticTest{ public static String name = "test";//可修飾成員變數,在類載入時載入 public Integer

java 中static關鍵字作用

static關鍵字主要有兩種作用: 第一,為特定資料型別或物件分配單一的存貯空間,而與建立物件的個數無關。第二,希望某個方法或屬性與類而不是物件關聯在一起,也就是說, 在不建立物件的情況下就可以通過類來直接呼叫方法或使用類的屬性。具體而言,static在ja

C/C++中static關鍵字作用總結(轉)

源地址 C/C++中static關鍵字作用總結 隱藏 先來介紹它的第一條也是最重要的一條:隱藏(static函式,static變數均可) 當同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。舉例來說明。同時編譯兩個原始

《Java程式設計師面試筆試寶典》之Static關鍵字哪些作用

static關鍵字主要有兩種作用:第一,只想為某特定資料型別或物件分配單一的儲存空間,而與建立物件的個數無關。第二,希望某個方法或屬性與類而不是物件關聯在一起,也就是說,在不建立物件的情況下就可以通過類來直接呼叫方法或使用類的屬性。具體而言,static在Java語言中主要有

java中如何使用空參構造方法自動生成不同名字的對象,使用非靜態的屬性和靜態屬性什麽區別,原因是什麽?如何理解static關鍵字

區別 關鍵字 內部 方法 屬性 count per setname person 空參構造自動生成對象時,使用非靜態的屬性 代碼: package com.swift; //使用無參構造方法自動生成對象,序號不斷自增 public class Person { p

C ------ static 關鍵字作用

不同 普通 範圍 oid 修飾 數據 error -- 關鍵字 首先要理解生存周期與作用域的區別: 生存周期: 變量從定義到銷毀的時間範圍。存放在全局數據區的變量的生存周期存在於整個程序運行期間,而存放在棧中的數據則隨著函數等的作用域結束導致出棧而銷毀,除了靜態變量之外的局

C++中關鍵字static作用

對象 想要 關鍵字 局部作用域 blog 個數 初始化 ext lte 1、定義局部靜態變量,存放在全局數據區的靜態變量區。初始化的時候自動初始化為0; 其作用域為局部作用域,當定義它的函數或語句塊結束時,其作用域隨之結束。 2、static定義全局變量的時候,這個全局變量

C語言中static關鍵字作用

編譯 size lac 所有 指針 變量 運行時 http 多個 在C語言中static的作用如下 第一、在修飾變量的時候,static修飾的靜態局部變量只執行一次,而且延長了局部變量的生命周期,直到程序運行結束以後才釋放。 第二、static修飾全局變量的時候,這個全局變

Java關鍵字final和static作用

++ 修改 AS apr super關鍵字 存在 回收 TP javap 一、關鍵字final final修飾類:這個類就不能被繼承 final修飾方法:不能被重寫 final修飾屬性:此屬性就是一個常量,一旦初始化後,不可再被賦值。習慣上,

PHP static 關鍵字作用和好處

1、static方法就相當於普通的方法一模一樣,但是給方法分了個類。語義化程式碼。 2、例項化class時不會重新將static方法宣告第二遍 3、靜態方法不需要所在類被例項化就可以直接使用。 4、靜態方法效率上要比例項化高,靜態方法的缺點是不自動進行銷燬,而例項化的則可以做銷燬

洋蔥的功效與作用分別那些

有助於 社會 很多 動力 替代 位置 pan 調查 乳腺癌 洋蔥被稱之為“蔬菜皇後”,洋蔥中的營養成分自然是相當豐富,不僅富含鉀、維生素C、葉酸、鋅、硒,纖維質等營養素,更有兩種特殊的營養物質——槲皮素和前列腺素A。這兩種特殊營養物質,令洋蔥具有了很多其他食物不可替代的健康

C語言中static關鍵字作用詳解

在C語言中,static的字面意思很容易把我們匯入歧途,其實它的作用有三條。 (1)先來介紹它的第一條也是最重要的一條:隱藏。 當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。為理解這句話,我舉例來說明。我們要同時編譯兩個原始檔,一個是a.c,另一個是

C#: static關鍵字作用

轉:C#: static關鍵字的作用 tatic意思是靜態,可以修飾類、欄位、屬性、方法 標記為static的就不用建立例項物件呼叫了,可以通過類名直接點出來 static三種用法: 1.用於變數前,表示每次重新使用該變數所在方法、類或自定義類時,變數的值為程式這次執行最後一次為變數

c++中extern關鍵字static作用域的學習

之前對static修飾變數後作用域的問題一直是大體瞭解,感覺和普通變數的作用域並沒有什麼區別。聚個栗子 在A.h中: #pragma once static int a=365; class A { public: A(); ~A(); }; 在main.c中: #include

static 關鍵字作用

Static關鍵字 static關鍵字可以修飾 變數 方法 靜態方法有一下特性 靜態方法的限制 程式碼塊 作用 內部類 java中的sta