java靜態方法(方法前冠以static)和實例方法(未冠以static)的區別

靜態方法(方法前冠以static)和實例方法(前面未冠以static)的區別

調用靜態方法或說類方法時,可以使用類名做前綴,也可以使用某一個具體的對象名;通常使用類名。
非static的方法是屬於某個對象的方法,而static的方法是屬於整個類的,不被任何一個對象單獨擁有;
由於static方法是屬於整個類的,所以它不能操縱和處理屬於某個對象的成員變數,而只能處理屬於整個類的成員變數,也即,static方法只能處理static域或靜態方法。實例方法可以訪問實例域, 靜態域或靜態方法, 記住都行。
聲明為static的方法有以下幾條限制: 1.它們僅能調用其他的static方法。
2.它們只能訪問static數據。
3.它們不能以任何方式引用this或super(關鍵 字super與繼承有關,在下一章中描述)。
static method Have No this Reference
All instance methods have a hidden parameter—this
So,

Static method can』t access instance methods and fields; it can only
invoke other static class
members.It can access class members only.
instance can use static method.
Instance methods:
If a method is declared without the static modifier keyword,
that method is known as an instance method. Instance methods
are associated with objects – not classes.
It can access either instance or class members.

本章源碼

class StaticExa {
static int a = 4;
static int b = 9;
static void call() {
System.out.println("a = " + a);//靜態方法可以訪問靜態屬性
}
}
public class Test {
static int c = 43;
public static void main(String args[]) {
/*剛運行到這一步時,debug觀察,StaticExa.a的值就等於42,Test.c的值就等於43,
說明系統在我們的程序一開始時,就會給所有的類變數賦值。如果是對象參考, 就是null,
見photoshop的例子*/

。。。。。。。。。。。。。。。。詳情網上找「馬克-to-win」,參考他的網站或他的網路空間:java第2章的內容

⑵ java靜態方法和實例方法的區別

靜態方法是用來操作這個類型的,方法被該類的所有實例共享。
而實例方法用來操作單個實例,不被該類所有實例共享。

靜態方法中不能調用實例方法,也不能訪問實例變數。
實例方法可以調用靜態方法,也能訪問靜態變數。

總之靜態方法對應的是類型,即Class,類。但是實例方法對應的是實例,即object,對象。

⑶ Java靜態方法和實例方法在內存的分布情況

像類、靜態(static)變數還有代碼塊都存儲在方法區里,棧中存儲的是靜態方法、實例方法和變數,堆中存儲的是實例對象和實例變數。

⑷ java靜態變數的與實例變數的區別

java類的成員變數有倆種:一種是被static關鍵字修飾的變數,叫類變數或者靜態變數;另一種沒有static修飾,為實例變數。

1、在語法定義上的區別:

靜態變數前要加static關鍵字,而實例變數前則不加。

2、在程序運行時的區別:

實例變數屬於某個對象的屬性,必須創建了實例對象,其中的實例變數才會被分配空間,才能使用這個實例變數。靜態變數不屬於某個實例對象,而是屬於類,所以也稱為類變數,只要程序載入了類的位元組碼,不用創建任何實例對象,靜態變數就會被分配空間,靜態變數就可以被使用了。總之,實例變數必須創建對象後才可以通過這個對象來使用,靜態變數則可以直接使用類名來引用。

舉例說明:

對於下面的程序,無論創建多少個實例對象,永遠都只分配了一個staticVar變數,並且每創建一個實例對象,這個staticVar 就會加1;但是,每創建一個實例對象,就會分配一個instanceVar,即可能分配多個instanceVar,並且每個instanceVar的值都只自加了1次。

結果則為:

0

1

0

⑸ java中,靜態欄位和實例欄位有什麼區別

靜態方法和實例方法的區別主要體現在兩個方面:
在外部調用靜態方法時回,可以使用"類名.方法名"的方式答,也可以使用"對象名.方法名"的方式。而實例方法只有後面這種方式。也就是說,調用靜態方法可以無需創建對象。
靜態方法在訪問本類的成員時,只允許訪問靜態成員(即靜態成員變數和靜態方法),而不允許訪問實例成員變數和實例方法;實例方法則無此限制。
具體來說:
一、實例欄位要實例化才能使用,沒有實例化不能使用。靜態欄位反之。如:
name欄位的使用:
cla1 i = new cla1();
i.name = "張三";
sex欄位的使用:
cla1.sex = "男";
二、普通欄位要在實例化時候才分配內存空間,而靜態欄位在裝載程序集的時候就分配內存空間了。

⑹ java中靜態類能否實例化

靜態類,一般使用在某個類的內容,簡稱靜態內部類。
靜態Static又有全局的意思,對於一般的public定義的外部類,沒有必要static關鍵詞,因為可以直接導入包得到該類的引用(只是在訪問其非靜態成員時需要實例化它);
而在一個類內部定義另一個類,如果該內部類不是靜態的,需要實例化它,就得先有一個外部類的對象,
如:public class A{
public class B{}
}
實例化B:
A a = new A();
B b = a.new B();
如果B是靜態的(全局的),即如下:
public class A{
public static class B{}
}
實例化B:
B b = A.new B();或者B b = new A.B();

⑺ Java靜態實例變數

問題出在這里:
static public Test getInstance(){
a=new Test();
return a;
}
每次調用getInstance()都會創建一個新的對象,並且給a賦值,所以a引用的對象每次都是不同的,加上一個判斷,那麼只有第一次的時候才會新建對象,後面兩次都是直接返回原來的對象了
if (a == null) a=new Test();
return a;

補充:
樓主,有一個重要的概念你沒有弄清楚,雖然a2,b2,c2都是使用a賦值的,但並不表示a變了它們會跟著變。
a2=a=new Test();
b2=a=new Test();
c2=a=new Test();
你理解的是最後給c2賦值的時候,因為a變了,而a2和b2是「等於」a的,所以它們也會跟著變為最後一個Test對象。
雖然看著好像符合數學上的等號傳遞性,但是樓主,其實不是這樣的。這也是程序和數學的差別所在。
第一句a2=a=new Test()的結果是a2指向new Test(),而不是指向a。
所以第二句的a改變時,a2並沒有變。同理,第三句a改變時,a2和b2也沒有改變,它們分別指向三個不同的對象。