java類static
『壹』 java類里的static方法
static是靜態的意思。
如果你別的方法體裡面不是聲明成 靜態的 就不能直接點出來,
只能使用new
如果是幾個方法 或類裡面都表明了static 相互"調用"就可以直接用點(.)的形式找出來。
『貳』 java中static是什麼意思
static是指在內存的datasegment里生成一塊內存 要用的時候不用每次都new一個新的內存空間 直接用類名+static的方法名或變數名引用就可以了 args是字元串數組的名字 你喜歡也可以換成String[] haha 方括弧放前面後面都可以 習慣放前面
『叄』 Java中的 static{ …… } 是什麼意思
是靜態修飾符,什麼叫靜態修飾符呢?大家都知道,在程序中任何變數或者代碼都是在編譯時由系統自動分配內存來存儲的,而所謂靜態就是指在編譯後所分配的內存會一直存在,直到程序退出內存才會釋放這個空間,也就是只要程序在運行,那麼這塊內存就會一直存在。這樣做有什麼意義呢?
在Java程序裡面,所有的東西都是對象,而對象的抽象就是類,對於一個類而言,如果要使用他的成員,那麼普通情況下必須先實例化對象後,通過對象的引用才能夠訪問這些成員,但是有種情況例外,就是該成員是用static聲明的(在這里所講排除了類的訪問控制),例如:
未聲明為static
class ClassA{
int b;
public void ex1(){
…
}
}
class ClassB{
void ex2{
int i;
ClassA a = new ClassA();
i = a.b; //這里通過對象引用訪問成員變數b
a.ex1; //這里通過對象引用訪問成員函數ex1
}
}
聲明為static
class ClassA{
static int b;
static void ex1(){
…
}
}
class ClassB{
void ex2{
int i;
i = ClassA.b; //這里通過類名訪問成員變數b
ClassA.ex1; //這里通過類名訪問成員函數ex1
}
}
通過以上兩種比較,就可以知道static用來修飾類成員的主要作用了,在java類庫當中有很多類成員都聲明為static,可以讓用戶不需要實例化對象就可以引用成員,最基本的有Integer.parseInt(),Float.parseFloat()等等用來把對象轉換為所需要的基本數據類型。這樣的變數和方法我們又叫做類變數和類方法。
接下來講一下被static修飾後的變數的值的問題,剛才在前面講過,被static修飾後的成員,在編譯時由內存分配一塊內存空間,直到程序停止運行才會釋放,那麼就是說該類的所有對象都會共享這塊內存空間,看一下下面這個例子:
class TStatic{
static int i;
public TStatic(){
i = 4;
}
public TStatic(int j){
i = j;
}
public static void main(String args[]){
TStatic t = new TStatic(5); //聲明對象引用,並實例化
TStatic tt = new TStatic(); //同上
System.out.println(t.i);
System.out.println(tt.i);
System.out.println(t.i);
}
}
這段代碼裡面Tstatic類有一個static的int變數I,有兩個構造函數,第一個用於初始化I為4,第二個用於初始化i為傳進函數的值,在main中所傳的值是5,程序首先聲明對象的引用t,然後調用帶參數的構造函數實例化對象,此時對象t的成員變數I的值為5,接著聲明對象tt,調用無參數的構造函數,那麼就把對象tt的成員變數i的值初始化為4了,注意了,在這里i是static,那就是說該類的所有對象都共享該內存,那也就是說在實例化對象tt的時候改變了i的值,那麼實際上對象t的i值也變了,因為實際上他們引用的是同一個成員變數。最後列印的結果是三個4。呵呵,寫到這里大家是否明白了呢?不明白就再看看書或者多寫幾個例子印證一下,呵呵。
『肆』 java中static怎麼用
static 屬於全局,也就是類的屬性 和方法,換句話說 一個類,不管有多少個實例,卻只有一個全局變數
class B {static int a=0;}
B b1=new B();..................;B bn=new B();
b1~bn 都是類B的實例,每個實例都共享 變數a,a是全局變數,屬於類B的屬性,每個實例都能引用變數a,
加入執行b1.a=1;後 那麼b2.a,b3.a,b4.a......bn.a 都等於1了,
static 方法也是類似的
需要注意的是 靜態屬性和方法屬於類方法,載入類後,就已經存在靜態屬性和方法,實例是需要用new構造出來後 才會有引用
根據先後順序,就有以下兩條規則
1、非靜態的方法可以調用靜態的或者非靜態的屬性和方法;
2、靜態的方法不可以調用非靜態的屬性和方法,因為非靜態的還不一定存在,只能先構造出來後,再通過實例引用
例如 在main方法中 可以直接調用static 的方法,調用非static方法 需要先構造出類的實例,通過實例才能調用方法
『伍』 java中static的作用是什麼意思
關於Java中的static{}塊,通過調試以下兩個程序就能弄清楚用途:
1、第一個小程序
package com.babyDuncan.Sohu;
public class testStatic {
static
{
int x = 5;
}
static int x, y;
public static void main(String[] args) {
x--;
myMethod();
System.out.println(x + y + ++x);
}
public static void myMethod()
{
y = x++ + ++x;
}
}
#該程序輸出為:3
分析如下:
執行main中的x--之後,x值為-1,執行myMethod之後,x為1,y值為0,執行輸出語句表達式,該表達式的值為1+0+2=3,所以輸出結果是3。
2、第二個小程序
package com.babyDuncan.Sohu;
public class testStatic2 {
/**
* 關於Static{}塊的解釋:
* 只是在執行main之前執行的一些語句而已,並不是說裡面的變數就是
* static的,沒什麼特別的。
* 臨時變數只在static這個大括弧中有用。
**/
static {
int x = 8;
System.out.println("這是static,這有一個變數x="+x);
}
static int x;
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(x);
}
}
#輸出結果為:
#這是static,這有一個變數x=8
#0
『陸』 java新手為什麼java類中要有static靜態方法
1。靜態方法的特點: 直接調用類名+方法名,不需要實例化類對象。
如: Hello.P();
非靜態方法則必須實例化一個對象出來,再通過對象調用該方法如: Hello hello=new Hello(參數1~n); hello.P();
2。程序被打包成.jar文件後(相當於.exe文件),給外界唯一的介面就是main方法。使用者雙擊.jar文件,其實就是讓虛擬機執行main方法。
3。main方法不是提供給程序員的,而是提供給虛擬機和使用客戶的。 一個軟體你沒法讓客戶知道你內部的詳情,當然客戶也就沒辦法知道怎麼去實例化對象,更不知道實例化對象時需要輸入什麼參數了。所以只能採用靜態方法。
『柒』 JAVA中的static
Java是個面向對象編程的語言,一般而言,方法需要通過實例對象來調用。但是有一些方法不需要實例對象(或者說沒有這樣的對象)來調用,那麼就可以在方式前面加上static修飾符,表示這個方法是靜態方法,不需要實例對象就可以調用。
例如String類的valueOf(int arg0)方法,作用是得到整數參數arg0的字元串表示,不需要創建出一個String類的實例對象來調用這個方法,所以它是static的。
如果你學過C/C++,你就會知道C/C++程序有一個入口,就是main()函數。電腦執行C/C++程序的時候就以main()函數作為入口,首先執行main()函數。Java也是類似,JVM首先調用main()方法。這個時候還沒有什麼實例對象呢,所以必須把main()方法聲明為static,以便JVM調用。
如果是在類中變數前加static修飾的話,就是另外一個意思了。例如「人」這個類,有一個成員變數叫做「姓名」。現在new一個「人」的實例對象叫做「張三」,再new一個「人」的實例對象叫做「李四」。張三、李四自然有各自的「姓名」,它們的「姓名」成員變數在內存當中各自佔一塊存儲單元,互不幹擾。但是,如果在「人」這個類的「姓名」成員變數前加上static修飾的話,那麼就變成了類變數。還是new出來「張三」「李四」,這次張三、李四的「姓名」在內存中就不是各自獨立的存儲區域了,而是共用一個存儲區域。所有「人」的實例對象的「姓名」其實都是指的那一個存儲單元。無論創建10個「人」對象還是100個「人」對象,它們的「姓名」指向的都是內存中的那一個存儲單元。如果被更改了,實際上所有的對象的「姓名」都會改了,因為它們引用的都是內存中的那一個存儲單元。就好像這個變數是屬於類而不是屬於實例對象的。
靜態方法因為不需要實例對象就可以調用,所以當然其中也不可以使用實例對象變數。原因很簡單啊,調用靜態方法的時候怎麼知道實例對象有沒有創建、實例對象變數有沒有初始化過呢。還是拿String類的valueOf()方法舉例。假設valueOf()方法裡面調用了String的一個實例對象str的某個成員變數。
那麼以下這行代碼
String.valueOf(10);
執行的時候,如何確定此時str對象就一定被創建出來並且成員變數都初始化過有值了呢?
『捌』 java 類名 前 加static
static關鍵字表示靜態的意思,那麼什麼是靜態呢,靜態的意思是就是不用實例化,或者說不用new,就可以調用,普通的方法,屬性是要經過new之後才會在內存中出現,才能用.比如:Number nb=new Number();
nb.Add();用法是對象名點方法
而加了static之後你不用new它,它就已經在內存中了,就可以直接用.
用法是類名點方法.Number.get();不過前提get()前面加了static.
還有你要搞清楚,類不可能是靜態的,也就是說類前面不能加static,只有方法和屬性才能加.
『玖』 java的一個類,不加static修飾,默認是靜態的嗎
不是,靜態的是需要加static修飾才是靜態的,有一個特殊的,在介面(Interface)里所有的變數都是static的。因為Interface不能實例化,所以變數默認就是static的,所以我們好多人習慣用Interface去做常量庫。
就是你在介面里定義一個變數 String a="a"; 其實他默認是 public static String a="a";
因為他不能實例化,那麼他定義的變數就沒人能用的了,所以就是默認就是公開,靜態的!
『拾』 java中的static
問題不是出在你有沒有加static ,把你的測試代碼發來看看吧
private static int max;相當於你在獲取類對像的時候,max會被同時初始化,值為0;並且max的值的變化會被記錄下來,生命周期是整個應用程序
Compare t=new Compare();
System.out.println(t.max); //0
t.max=2;
System.out.println(t.max); //2
Compare t2=new Compare();
System.out.println(t2.max); //2
不知道你明白了嗎
都用的你的代碼,全沒有加static 結果也是對的