簡體   English   中英

Java靜態關鍵字用法

[英]Java static keyword usage

為什么此代碼不起作用?

HelloWorld.java:5: error: non-static method add(int,int) cannot be
referenced from a static context System.out.println(add(1,2));
  1. 我知道如果我將靜態方法添加到add方法中,它可以工作,但是為什么我們必須使用靜態方法呢? 如果此代碼是用C語言編寫的,則可以,對嗎?
  2. 如果您不添加靜態添加方法,我還可以通過哪些其他方法“測試”主添加方法?

     public class HelloWorld { public static void main (String []args) { System.out.println(add(1,2)); } public int add (int x, int y) { return x+y; } } 

您必須將add(int, int)方法設為靜態

public static int add(int x, int y) {
    return x + y;
}

或者你可以做

public static void main(String[] args) {
    HelloWorld test = new HelloWorld();
    System.out.println(test.add(1, 2));
}

這樣做的原因是因為您試圖從靜態方法中調用它。 可以使用靜態方法而無需創建對象的實例(如第一種情況)。 在第二種情況下, add可以是非靜態的,因為我們實際上是在創建對象的實例,因此可以訪問它的非靜態方法。

是的,main方法在靜態上下文中運行。 如果要運行不帶static關鍵字的方法,則需要實例化包含該方法的類。 像這樣:

public class HelloWorld {

    public static void main(String []args){ 

        HelloWorld helloWorld = new HelloWorld();    
        System.out.println(helloWorld.add(1,2));

    }

    public int add(int x, int y){
        return x+y;
    }
}

static方法不需要從對象的上下文中調用; 其他方法也可以。 如果要add為非靜態,請嘗試以下操作:

public class HelloWorld {

    public static void main (String []args) { 
        HelloWorld h = new HelloWorld();
        System.out.println(h.add(1,2));
    }

    public int add (int x, int y) {
        return x+y;
    }
}

但是,由於HelloWorld沒有任何數據成員,因此確實沒有任何理由這樣做。

當您要按類而不是按實例訪問對象時,使用static關鍵字。 例如,假設您有一個想要在應用程序運行時保持不變的變量:

class example_static{
  public final static int var= 6;
}

如果要使用它,只需調用其類和變量:

class example{
    public...main{
     System.out.println(String.valueOf(example_static.var));
    }
}

如果您想要一個好例子,只需檢查Math類,可以使用許多static方法,因為這樣做是多余的:

Math math = new Math(); //Eww

因此,使用靜態方法就可以擺脫它,而直接調用方法並直接使用Class作為引用即可:

Math.methodCall(1+1);

注意

您不能從靜態方法(與變量相同)中調用非靜態方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM