[英]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));
如果您不添加靜態添加方法,我還可以通過哪些其他方法“測試”主添加方法?
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.