1. 程式人生 > >static與非static的區別

static與非static的區別

關於static和非static變數的區別。

1. static 修飾的變數稱為類變數或全域性變數或成員變數,在類被載入的時候成員變數即被初始化,與類關聯,只要類存在,static變數就存在。非static修飾的成員變數是在物件new出來的時候劃分儲存空間,是與具體的物件繫結的,該成員變數僅為當前物件所擁有的。

2. static修飾的變數在載入的時候先於main方法載入在記憶體中的資料共享區-------方法區,而非static的變數在載入的時候,是要建立變數才載入在堆記憶體中的。

3. 一個static變數單獨劃分一塊儲存空間,不與具體的物件繫結在一起,該儲存空間被類的各個物件所共享。static變數值在方法區載入一次,而非static在建立物件時會載入很多次。每次建立都會拷貝一份。
4. 物件在引用成員變數是直接通過類名.變數名呼叫,物件在引用例項變數時只能通過物件名.變數名呼叫。

5. 在類中呼叫成員變數時直接呼叫或者以類名.變數名方式呼叫,例項變數則用this或者直接呼叫。

關於static方法和非static方法的區別

1. static修飾的方法也和static一樣。先於main方法被載入到方法區,以便共享使用。

2. 靜態的static方法中不能使用this或者super關鍵字,因為static方法是先於物件建立之前就已經載入的方法,是屬於類的方法,而this和super指向的是本類的物件或者父類的物件,非靜態的方法是屬於物件的,方法裡可以用this和super。

3. static方法可以用物件.方法名來呼叫,也可以用類名.方法名來呼叫。而非靜態的方法只能建立物件後時呼叫。

4. static方法是載入一次,被所有的物件所共享。而非靜態方法是有多少個物件就拷貝多少次,每個物件只能呼叫自己的拷貝的方法。

5. 物件呼叫非靜態的方法時,不考慮執行緒安全性的問題,而呼叫靜態方法時,要考慮安全性的問題。因為靜態方法只有一份。而物件的方法是自己有自己的。

6. 同一個類中,靜態方法中只能訪問類中的靜態成員。而非靜態方法可以訪問非靜態的方法(使用類名呼叫,或者創建立本類的物件呼叫)。

相關推薦

staticstatic區別

關於static和非static變數的區別。1. static 修飾的變數稱為類變數或全域性變數或成員變數,在類被載入的時候成員變數即被初始化,與類關聯,只要類存在,static變數就存在。非static修飾的成員變數是在物件new出來的時候劃分儲存空間,是與具體的物件繫結的

static關鍵字詳解——staticstatic區別

      在本篇部落格中,我主要會講兩個方面的內容,第一個是例項變數與類變數的區別,第二個是例項方法與類方法的區別。大家應該都知道,用static修飾的方法是類方法,用static修飾的變數是類變數。 1.例項變數與類變數的區別        一個類通過使用new關鍵字

類鎖和對象鎖,synchronized修飾static方法static方法的區別

ati nbsp 的區別 一個 靜態方法 範圍 之間 對象 ron 當synchronized修飾一個static方法時,多線程下,獲取的是類鎖(即Class本身,註意:不是實例), 作用範圍是整個靜態方法,作用的對象是這個類的所有對象。 當synchro

多執行緒下synchronized修飾static方法static方法的區別

一直對多執行緒的概念比較模糊,今天就寫了個關於變數原子操作的小程式,好讓自己加深一下理解 程式碼如下:     package atomic;   public class JoinThread extends Thread {

類鎖和物件鎖,synchronized修飾static方法static方法的區別

類鎖和物件鎖,synchronized修飾static方法與非static方法的區別  當synchronized修飾一個static方法時,多執行緒下,獲取的是類鎖(即Class本身,注意:不是例項

static方法static方法之間區別和呼叫的時機

static方法是屬於類,可以通過類名直接呼叫,非static方法是屬於物件的,如果static方法在沒有建立物件時呼叫非static方法是不成立的,因為非static方法只能通過物件來呼叫。非static方法   所有物件都有自己一套非static方法static方法,是所

static 靜態方法 有什麼優缺點 PHP中靜態方法(static)靜態方法的使用及區別

static方法是類中的一個成員方法,屬於整個類,即使不用建立任何物件也可以直接呼叫! 靜態方法效率上要比例項化高,靜態方法的缺點是不自動進行銷燬,而例項化的則可以做銷燬。 靜態方法和靜態變數建立後始終使用同一塊記憶體,而使用例項的方式會建立多個記憶體。 C

【Java】之static靜態方法static靜態方法區別

span get nbsp ati pub public ring spa 靜態方法 1、A.class:沒有static public class A { public String getText(){ } B.class調用A的方法

預處理、const、staticsizeof-static全局變量普通的全局變量有什麽區別

stat 結果 使用範圍 const 有效 源程序 調用 由於 當前 1:全局變量的說明之前再加上static就構成了靜態的全局變量。全局變量本身就是靜態存儲方式,靜態全局變量當然也是靜態存儲方式。這兩者在存儲方式上並無不同。這兩者的區別在於,非靜態全局變量的作用域是整個源

Java 靜態(static)靜態執行順序

Java中的靜態(static)關鍵字只能用於成員變數或語句塊,不能用於區域性變數 static 語句的執行時機實在第一次載入類資訊的時候(如呼叫類的靜態方法,訪問靜態成員,或者呼叫建構函式), static 語句和 static 成員變數的初始化會先於其他語句執行,而且只會在載入類資訊的時候執行一次,以後

Java的static方法static方法

生命週期(Lifecycle): 靜態方法(Static Method)與靜態成員變數一樣,屬於類本身,在類裝載的時候被裝載到記憶體(Memory),不自動進行銷燬,會一直存在於記憶體中,直到JVM關閉。 非靜態方法(Non-Static Method)又

java回顧篇——staticstatic區別

關於static和非static變數的區別。 1. static 修飾的變數稱為類變數或全域性變數或成員變數,在類被載入的時候成員變數即被初始化,與類關聯,只要類存在,static變數就存在。非static修飾的成員變數是在物件new出來的時候劃分儲存空間,是與具體的物件繫

staticstatic區別

那天面試,沒有答出來,很可惜,但是還是拿到了offer,在此做一個總結,希望你們看到能夠受用。● 生命週期(Lifecycle):靜態方法(Static Method)與靜態成員變數一樣,屬於類本身,在類裝載的時候被裝載到記憶體(Memory),不自動進行銷燬,會一直存在於記憶體中,直到JVM關閉。非靜態方

預處理、const、staticsizeof-static有什麽作用(至少說出2個)

con 限制 變量 全局 什麽 -s eof 這一 不能 1:在C語言中,關鍵字static有3個明顯的作用: (1)在函數體,一個被聲明為靜態的變量在這一函數被調用的過程中維持其值不變。 (2)在模塊內(但在函數體外),一個被聲明為靜態的變量可以被模塊內所有的函數訪問,但

staticstatic執行順序以及super

package com.huashen.ni;public class Children extends Father {        //father沒寫,給這程式碼差不多    static {        System.out.println("Children 靜

java static 方法普通方法區別

對象 static 方法區 修改 需要 總結 資源 其他 一個  static 方法不需要實例化,靜態方法在JVM剛加載的時候就編譯過了.在程序的運行過程中隨時可以調用,不需要去實例化某個對象然後再去調用,可以直接用類名去調用,直到結束釋放內存,且靜態方法只能調用類靜態變量

在java中public voidpublic static void區別

sta erro ati 對象 方法 這樣的 調用 必須 靜態方法 static 方法可以被main方法直接調用,而非static方法不可以。因為static方法是屬於類的,是類方法。可以通過類名.方法名直接調用。而非static方法必須等對象被new出來以後才能使用,因而

預處理、const、staticsizeof-使用const#define的特點及區別

特點 周期 sizeof 傳遞 const常量 fin 參數 編譯器 run 1:#define只是用來做文本替換的。例如: #define PI 3.1415926 float angle; angle=30*PI/180; 那麽,程序進行編譯的時候,編譯器會

public voidpublic static void區別

pub add 資源 我們 普通 link bsp 圖片 區別 我們換個簡單易懂的說法,這兩句的區別就在於,能不能直接用類名訪問。 很好理解的不是嗎? 假如,我有一個類,如下圖所示: 接下來先實例化一個對象,ca,你會發現它不僅可以訪問普通的方法,也可以訪問靜態的方法

C++(static使用注意,和static區別) C++(static使用注意,和static區別)

轉 C++(static使用注意,和非static區別) C++類中的static 在C++中有靜態成員變數和靜態成員函式,要注意,在C++類和物件的概念中,先有類,才有物件。因為static型的成員函式和成員變數是在類產生的時候分配的記憶體,產生於物件之前,故不能再stati