⑴ java中使用靜態方法
編程時我們心裡一定要清楚靜態方法和類的非靜態方法方法的區別:
最根本區別從編譯角度來說吧:
1)靜態(static)方法是編譯時直接載入載入到內存中(離cpu最近的一塊內存區域也稱為堆棧),比如程序的public static main(args []){}方法,你能實例話嗎?
靜態方法不能被實例化,也不允許被實例化!
現在很多Java集成工具邊寫邊編譯的
因此 你可以通過「類名」+「.」+「靜態方法的名()」來調用
2)非靜態方法(類的非靜態方法)通過關鍵字 「new」 字來實例化一個對象(object),這個對象放在 內存的另一塊區域 堆(heap)中。
也就是說編譯時,非靜態方法必須先實例化類的一個對象,通過「對象名」+「非靜態方法名()」來調用;
public class Student
{
private String name;
/************************************************************
*下面兩個方法是類的非靜態方法封裝 屬性name,看一下在 main()
*如何調用
************************************************************/
public set(string init_name)
{
this.name = init_name;
}
publc String get()
{
return this.name;
}
//構造函數
public Student(){}
public Student(String init_name)
{
this.name = init_name;
}
//下面是一個靜態方法,看一下它在main()中如何調用
public static void PrintClassName()
{
System.out.print("該類的名字:Student");
}
}
//MainClass類
pubic class MainClass
{
public static void main(args[])
{
//先調用靜態方法,不需要實例化對象
Student.PrintClassName();
//現在調用非靜態方法,一定要實例化對象
Student stu1 = new Student();
stu1.set("Join");
String stu1_name = stu1.get();
}
}
⑵ java靜態方法與非靜態方法有什麼區別
靜態方法可以直接用類名點出來方法,而普通方法需要創建類的對象後才能調用! 靜態的方法和變數會調用時在內存生成一個唯一的標示,你可以理解成在物理內存中給靜態一個位子,這樣的話在調用的時候可以直接找到,而且會節省內存,但是如果你聲明的靜態過多的話那麼每一個都會在內存有一個位子,那麼你就沒有資源運行別的,會報內存溢出! 普通方法是由java的gc機制(垃圾回收機制)來控制,可能同一個對象或變數在使用的過程中,這個時間的在內存佔了一個位子,而上個時間的還沒有從內存中刪除,這樣的話就可能有2個一樣的在內存中,這個2個一樣東西只是內容值一樣,但是內存值不一樣,你可以用"=="和"equals"來查看(這個只適用對象和String類型).java的gc機制會根據運行時的內存狀態來自動清除一些用不到變數或對象,就算你手動調用gc也是一樣的!
⑶ Java 中 靜態方法與非靜態方法的區別
靜態方法和實例方法的區別主要體現在兩個方面:
在外部調用靜態方法時,可以使用"類名.方法名"的方式,也可以使用"對象名.方法名"的方式。而實例方法只有後面這種方式。也就是說,調用靜態方法可以無需創建對象。
靜態方法在訪問本類的成員時,只允許訪問靜態成員(即靜態成員變數和靜態方法),而不允許訪問實例成員變數和實例方法;實例方法則無此限制。
下面幾個例子展示了這一區別。
1、調用靜態方法示例。
//-----------文件名hasStaticMethod.java,程序編號1-----------------public
class hasStaticMethod{//定義一個靜態方法public static void
callMe(){System.out.println("This is a static method.");}}
下面這個程序使用兩種形式來調用靜態方法。
//-----------文件名invokeStaticMethod.java,2-----------------
public class invokeStaticMethod{
public static void main(String args[]){
hasStaticMethod.callMe(); //不創建對象,直接調用靜態方法
hasStaticMethod oa = new hasStaticMethod(); //創建一個對象oa.callMe(); //利用對象來調用靜態方法}}
程序3.36兩次調用靜態方法,都是允許的,程序的輸出如下:
This is a static method.This is a static method.
允許不創建對象而調用靜態方法,是Java為了減少程序員調用某些常用方法時的麻煩,而允許程序員按照傳統的C語言中使用函數的方式來使用方法。典型的例子是前面某些程序中使用"Math.ramdon()"來獲取隨機數。
2、靜態方法訪問成員變數示例。
//-----------文件名accessMember.java,程序編號3.37-----------------class
accessMember{private static int sa; //定義一個靜態成員變數private int ia;
//定義一個實例成員變數//下面定義一個靜態方法static void statMethod(){int i = 0;
//正確,可以有自己的局部變數sa = 10; //正確,靜態方法可以使用靜態變數otherStat(); //正確,可以調用靜態方法ia =
20; //錯誤,不能使用實例變數insMethod(); //錯誤,不能調用實例方法}static void otherStat(){}
//下面定義一個實例方法 void insMethod(){int i = 0; //正確,可以有自己的局部變數sa = 15;
//正確,可以使用靜態變數ia = 30; //正確,可以使用實例變數statMethod(); //正確,可以調用靜態方法}}
本例其實可以概括成一句話:靜態方法只能訪問靜態成員,實例方法可以訪問靜態和實例成員。之所以不允許靜態方法訪問實例成員變數,是因為實例成員變數是屬於某個對象的,而靜態方法在執行時,並不一定存在對象。同樣,因為實例方法可以訪問實例成員變數,如果允許靜態方法調用實例方法,將間接地允許它使用實例成員變數,所以它也不能調用實例方法。基於同樣的道理,靜態方法中也不能使用關鍵字this。
main()方法是一個典型的靜態方法,它同樣遵循一般靜態方法的規則,所以它可以由系統在創建對象之前就調用。
⑷ java 靜態方法static
返回是1雖然在getInstance() ;里設置了a.i = 2 ;但是 a和a1並不是一個對象,i也不是靜態變數,所以getInstance() 並沒有對a1的i進行修改。
靜態方法可以不用new對象就可以執行,常用語創建單例對象。
靜態方法不是靜態變數,但是靜態方法要用的全局變數必須為靜態的。
⑸ java中的靜態方法有什麼作用
作用:
靜態屬於類內存必須配內存空間,空間直由靜態佔用內存管理器。由於靜態沒調用,靜態存儲空間收所都聲明靜態,佔用量內存空間系統變慢普通,象調用內存並直起配內存調用候,才其配存儲空間其沒調用,存儲空間內存管理;其收釋放沒用空間提高系統運行速率。
⑹ java靜態方法怎麼寫
舉例:
publicclassXXX{
publicstaticvoidhelp(){
System.out.println("Welcome!");
}
}
其中的help方法就是靜態的。主要是加了「static」關鍵字。
⑺ java靜態方法
內存會不會增多和靜態方法沒關系好把!! 內存增加是在方法內處理的時候消耗的內存。
你不會是說使用方法的內存把, 靜態方法只有一個,多次調用或多線程同時調用也是使用的那一個方法!
⑻ java中,什麼是靜態方法
首先靜態方法是用static來修飾的
靜態方法就是可以不通過生成類的實例直接來調用的
舉個簡單的例子:
class
A
{
public
static
void
a()
{
System.out.println("A被調用");
}
public
void
b()
{
System.out.println("B被調用");
}
}
假設你要調用方法a和方法b
如果調用方法a可以直接A.a();就可以了
不需要先
A
aa
=
new
A();aa.a();
但是調用b則必須A
aa
=
new
A();aa.b();
還有在繼承裡面要注意:
如果B繼承自A
而且B中和A中都包含相同的函數
如果是實例方法則是被B覆蓋掉的
如果是靜態方法則是被B隱藏掉的
這一點
在上溯機制中可能遇到
最後還有一點靜態方法調用的方法一定也要是靜態的
⑼ java中static的用法
static可以修飾變數(屬性)、方法、代碼塊和內部類
static屬性:屬於這個類所有,即由該類創建的所有對象共享同一個static屬性。可以對象創建後通過對象名.屬性名和類名.屬性名兩種方式來訪問。也可以在沒有創建任何對象之前通過類名.屬性名的方式來訪問。
static方法:也可以通過對象名.方法名和類名.方法名兩種方式來訪問
static代碼塊:當類被第一次使用時(可能是調用static屬性和方法,或者創建其對象)執行靜態代碼塊,且只被執行一次,主要作用是實現static屬性的初始化。
static內部類:屬於整個外部類,而不是屬於外部類的每個對象。不能訪問外部類的非靜態成員(變數或者方法),.可以訪問外部類的靜態成員
⑽ java中什麼是靜態方法
靜態方法是使用static關鍵字來修飾的方法,如:
public
class
Dog{public
static
void
show(){}}
這里的show()就是一個靜態方法,它有全局方法的特點。
靜態方法的調用不需要對象,可以用類名直接調用,如:
Dog.show();
當然,使用對象也是可以調用它的,如:new
Dog().show();