簡體   English   中英

為什么這個基本的Java程序無法編譯

[英]Why this basic java programme is not compiling

編譯此程序時出現錯誤:

class ArraysInMethods {
    public static void main(String[] args) {
        int array[]={1,6,2,5,3,8,9,0,5};
        Add5(array);
        for(int y : array){
            System.out.println(y);
        }
    }
    public void Add5(int x[]){
        for(int counter=0; counter < x.length; counter++){
            x[counter]+=5;
        }
    }
}

我收到以下錯誤

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
        Cannot make a static reference to the non-static method Add5(int[]) from the type ArraysInMethods
        at ArraysInMethods.main(ArraysInMethods.java:6)

然后,將您的Add5方法Add5靜態:

 public static void Add5(int x[]){
        for(int counter=0; counter < x.length; counter++){
            x[counter]+=5;
        }
    }

基本上,這意味着只能從靜態方法中調用靜態方法,而Java中的main方法是靜態的。

編輯:為什么你必須這樣做? 因為類的靜態成員不存在類的實例,所以非靜態成員不存在。 如果您在未創建試圖調用非靜態方法的類實例(有效)的情況下調用靜態方法,則該方法將無效,因為沒有類的實例就不會存在非靜態方法。

靜態方法和變量在類級別,可以使用類名的引用來調用,而非靜態方法在對象級,可以使用類的對象來調用。

您可以做兩件事。

  1. 將方法更改為靜態

    類ArraysInMethods {

     public static void main(String[] args) { int array[]={1,6,2,5,3,8,9,0,5}; Add5(array); for(int y : array){ System.out.println(y); } } public static void Add5(int x[]){ for(int counter=0; counter < x.length; counter++){ x[counter]+=5; } } 

    }

  2. 創建類的對象,然后使用該對象調用類的方法。

    類ArraysInMethods {

     public static void main(String[] args) { int array[]={1,6,2,5,3,8,9,0,5}; new ArraysInMethods().Add5(array); for(int y : array){ System.out.println(y); } } public void Add5(int x[]){ for(int counter=0; counter < x.length; counter++){ x[counter]+=5; } } 

    }

static方法可以調用Java中的static方法。

Add5()不是static方法,因此出現了編譯時異常。

 package com.org.test; class ArraysInMethods {  
     public static void main(String[] args) {  
         int array[]={1,6,2,5,3,8,9,0,5};  
         Add5(array);  
         for(int y : array){  
             System.out.println(y);  
         }   
     }  
     public static void Add5(int x[]){  
         for(int counter=0; counter < x.length; counter++){  

             x[counter]+=5;
         }
      }
 }

暫無
暫無

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

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