自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解Java 中 static 的作用

開發(fā)
在 Java 中 static 關(guān)鍵字有4種使用場景,下面分別進(jìn)行介紹:

[[343966]]

 1.static 成員變量

  1. public class Student { 
  2.     // 靜態(tài)成員變量 
  3.     private static String SchoolName; 
  4.     private static int nums; 
  5.      
  6.     // 非靜態(tài)成員變量 
  7.     private String name
  8.     private int age; 

在類中一個成員變量可用 static 關(guān)鍵字來修飾,這樣的成員變量稱為 static 成員變量,或靜態(tài)成員變量。而沒有用 static 關(guān)鍵字修飾的成員變量稱為非靜態(tài)成員變量。

靜態(tài)成員變量是屬于類的,也就是說,該成員變量并不屬于某個對象,即使有多個該類的對象實(shí)例,靜態(tài)成員變量也只有一個。只要靜態(tài)成員變量所在的類被加載,這個靜態(tài)成員變量就會被分配內(nèi)存空間。因此在引用該靜態(tài)成員變量時,通常不需要生成該類的對象,而是通過類名直接引用。引用的方法是“類名 . 靜態(tài)變量名”。當(dāng)然仍然可以通過“對象名 . 靜態(tài)變量名”的方式引用該靜態(tài)成員變量。相對應(yīng)的非靜態(tài)成員變量則屬于對象而非類,只有在內(nèi)存中構(gòu)建該類對象時,非靜態(tài)成員變量才被分配內(nèi)存空間。

2.static 成員方法

  1. public class Student { 
  2.     private static String SchoolName; 
  3.     private static int nums; 
  4.         // 靜態(tài)成員方法 
  5.     public static String getSchoolName() { 
  6.         return Student.SchoolName; 
  7.     } 

Java 中也支持用 static 關(guān)鍵字修飾的成員方法,即靜態(tài)成員方法。與此相對應(yīng)的沒有用 static 修飾的成員方法稱為非靜態(tài)成員方法。

與靜態(tài)成員變量類似,靜態(tài)成員方法是類方法,它屬于類本身而不屬于某個對象。因此靜態(tài)成員方法不需要創(chuàng)建對象就可以被調(diào)用,而非靜態(tài)成員方法則需要通過對象來調(diào)用。

特別需要注意的是,在靜態(tài)成員方法中不能使用 this、super 關(guān)鍵字,也不能調(diào)用非靜態(tài)成員方法,同時不能引用非靜態(tài)成員變量。這個道理是顯而易見的,因為靜態(tài)成員方法屬于類而不屬于某個對象,而 this、super 都是對象的引用,非靜態(tài)成員方法和成員變量也都屬于對象。所以當(dāng)某個靜態(tài)成員方法被調(diào)用時,該類的對象可能還沒有被創(chuàng)建,那么在靜態(tài)成員方法中調(diào)用對象屬性的方法或成員變量顯然是不合適的。即使該類的對象已經(jīng)被創(chuàng)建,也是無法確定它究竟是調(diào)用哪個對象的方法,或是哪個對象中的成員變量的。所以在這里特別強(qiáng)調(diào)這一點(diǎn)。

3.static 代碼塊

  1. public class Student { 
  2.     private static String SchoolName; 
  3.     private static int nums; 
  4.         // 靜態(tài)代碼塊 
  5.     static { 
  6.         Student.SchoolName = "清風(fēng)小學(xué)"
  7.         Student.nums = 0; 
  8.     } 

static 代碼塊又稱為靜態(tài)代碼塊,或靜態(tài)初始化器。它是在類中獨(dú)立于成員函數(shù)的代碼塊。static 代碼塊不需要程序主動調(diào)用,在JVM加載類時系統(tǒng)會執(zhí)行 static 代碼塊,因此在static 代碼塊中可以做一些類成員變量的初始化工作。如果一個類中有多個 static 代碼塊,JVM將會按順序依次執(zhí)行。需要注意的是,所有的static 代碼塊只能在JVM加載類時被執(zhí)行一次。

4.static 內(nèi)部類

  1. public class Student { 
  2.     private static String SchoolName; 
  3.     private static int nums; 
  4.         // 靜態(tài)內(nèi)部類 
  5.     static class test{ 
  6.         public test() { 
  7.             System.out.println("Hello,student!" ); 
  8.         } 
  9.     } 

在 Java 中還支持用 static 修飾的內(nèi)部類,稱為靜態(tài)內(nèi)部類。靜態(tài)成員內(nèi)部類的特點(diǎn)主要是它本身是類相關(guān)的內(nèi)部類,所以它可以不依賴于外部類實(shí)例而被實(shí)例化。靜態(tài)內(nèi)部類不能訪問其外部類的實(shí)例成員(包括普通的成員變量和方法),只能訪問外部類的類成員(包括靜態(tài)成員變量和靜態(tài)方法)。即使是靜態(tài)內(nèi)部類的實(shí)例方法(非靜態(tài)成員方法)也不能訪問其外部類的實(shí)例成員。

 

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2012-04-26 11:39:04

Javastatic變量

2014-11-06 09:49:22

CloudFoundrPaaS

2014-11-06 10:46:48

CloudFoundr

2011-03-18 09:27:00

Spring

2021-02-01 13:10:07

Staticc語言UNIX系統(tǒng)

2009-10-14 09:08:23

Visual Stud

2018-11-06 10:51:07

Redis開發(fā)存儲系統(tǒng)

2022-04-02 08:14:02

JavaThreadLoca數(shù)據(jù)

2025-01-15 07:00:00

Java代碼Lambda

2015-11-10 16:10:22

C語言StaticConst

2022-06-09 08:17:30

Python__new__

2023-06-28 08:34:02

Bind()函數(shù)JavaScript

2022-06-07 08:31:44

JavaUnsafe

2011-04-07 16:34:05

staticC++

2016-09-18 16:58:09

JavaProperties

2021-05-28 05:40:58

killkill -0 pidLinux

2009-06-19 11:03:30

Java Web函數(shù)

2022-08-08 08:04:17

Javastatic編程

2010-01-18 16:42:13

C++類

2009-06-30 15:18:10

StringBuildJava
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號