public class StaticTest
{
public static void main(String[] args)
{
System.out.println("\n\t\t如何實現(xiàn)靜態(tài)方法調(diào)用非靜態(tài)方法有哪些\n");
//開始調(diào)用,匿名調(diào)用!
new StaticTest().show();
//創(chuàng)建對象調(diào)用!
StaticTest st=new StaticTest();
st.show();
}
//非靜態(tài)方法!
void show()
{
System.out.println("非靜態(tài)方法show。..!");
}
}
public class StaticTest { public static void main(String[] args) { System.out.println("\n\t\t如何實現(xiàn)靜態(tài)方法調(diào)用非靜態(tài)方法有哪些\n"); //開始調(diào)用,匿名調(diào)用! new StaticTest().show(); //創(chuàng)建對象調(diào)用! StaticTest st=new StaticTest(); st.show(); } //非靜態(tài)方法! void show() { System.out.println("非靜態(tài)方法show。
..!"); }}。
靜態(tài)方法與靜態(tài)變量一樣,屬于類本身,而不屬于那個類的一個對象。
調(diào)用一個被定義為static的方法,可以通過在它前面加上這個類的名稱,也可以像調(diào)用非靜態(tài)方法一樣通過類對象調(diào)用。實例方法必須通過類的實例來使用。
實例方法可以使用類的非靜態(tài)成員,也可以使用類的靜態(tài)成員。類的靜態(tài)方法,靜態(tài)變量是在類裝載的時候裝載的。
但是要特別注意,類的靜態(tài)變量是該類的對象所共有的,即是所有對象共享變量。所以建議盡量少用靜態(tài)變量。
盡量在靜態(tài)方法中使用內(nèi)部變量。 其中static關(guān)鍵字即表示靜態(tài)的。
聲明靜態(tài)方法的語法如下:static返回類型 方法名(參數(shù)列表){//方法體} 靜態(tài)方法與實例方法唯一不同的,就是靜態(tài)方法在返回類型前加static關(guān)鍵字。靜態(tài)方法的調(diào)用有兩種途徑:(1)通過類的實例對象去調(diào)用調(diào)用格式為: 對象名.方法名(2) 通過類名直接調(diào)用調(diào)用格式為: 類名::方法名 我們在使用時要注意:靜態(tài)方法只能訪問類的靜態(tài)成員,不能訪問類的非靜態(tài)成員;非靜態(tài)方法可以訪問類的靜態(tài)成員,也可以訪問類的非靜態(tài)成員;靜態(tài)方法既可以用實例來調(diào)用,也可以用類名來調(diào)用。
#include using namespace std;class CStaticTest{ public: CStaticTest(int a) { this->a = a; } ~CStaticTest(){}static int add(CStaticTest& c1, CStaticTest& c2) { return c1.a + c2.a; }private: int a; };int main() { CStaticTest tmp1(1); CStaticTest tmp2(2); int sum1 = tmp1.add(tmp1, tmp2); int sum2 = CStaticTest::add(tmp1, tmp2);cout << sum1 << endl; cout << sum2 << endl; return 0; } 1. 有靜態(tài)屬性的類,一般會定義靜態(tài)方法。2. 沒有屬性的類,一般會定義靜態(tài)方法,這樣在使用時,通過類名::方法名即可調(diào)用,而不用先定義對象,再調(diào)用,這樣可以省去一行代碼。
package com.text_3;
//靜態(tài)方法不能直接調(diào)用實例方法和變量,但可以間接調(diào)用(即在靜態(tài)方法中創(chuàng)建類的實例,然后調(diào)用)
class Demo_12 {
public static void main(String[] args) {
Circle c=new Circle();
Demo_12 d=new Demo_12();
method1();//此處報錯,靜態(tài)方法不能直接調(diào)用非靜態(tài)方法
d.method1(); //間接調(diào)用,無錯
c.setRadius(5.0); //間接調(diào)用,無錯
}
public void method1(){
method2();
}
public static void method2(){
Circle c=new Circle();
System.out.println("what is radius " +c.getRadius());
}
}
class Circle{
private double radius;
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
}
public class Test {
private int a;
public int getnumber() {
setnumber(8);
return this.a;
}
public int setnumber(int a) {
return this.a = a;
}
public static void main(String args[]) {
Test t = new Test();
// t.setnumber(10);
int a = t.getnumber();
System.out.println(a);
}
}
1、靜態(tài)方法屬于類所有,類實例化前即可使用;
2、非靜態(tài)方法可以訪問類中的任何成員,靜態(tài)方法只能訪問類中的靜態(tài)成員;
3、因為靜態(tài)方法在類實例化前就可以使用,而類中的非靜態(tài)變量必須在實例化之后才能分配內(nèi)存;
4、static內(nèi)部只能出現(xiàn)static變量和其他static方法!而且static方法中還不能使用this等關(guān)鍵字,因為它是屬于整個類;
5、靜態(tài)方法效率上要比實例化高,靜態(tài)方法的缺點是不自動進行銷毀,而實例化的則可以做銷毀;
6、靜態(tài)方法和靜態(tài)變量創(chuàng)建后始終使用同一塊內(nèi)存,而使用實例的方式會創(chuàng)建多個內(nèi)存。
主要區(qū)別:靜態(tài)方法在創(chuàng)建對象前就可以使用了,非靜態(tài)方法必須通過new出來的對象調(diào)用。
如:
public class Per{
public static String getType(){
return "人類";
}
public String getName(){
return "張三";
}
}
上面這個類中的getType方法,在沒有new對象前這就可以這樣用:
String type=Per.getType();//type="人類";
而getName方法則不能這樣使用,編譯都不會通過
getName必須這樣:
Per p=new Per();
String name=p.getName();//name="張三";
當(dāng)然,getType方法也可能通過對象調(diào)用:
String type=p.getType();//type="人類";
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請在一個月內(nèi)通知我們,我們會及時刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁面生成時間:3.314秒