为什么这个基本java程序没有编译

为什么这个基本java程序没有编译,java,arrays,methods,Java,Arrays,Methods,编译此程序时出现错误: 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[]

编译此程序时出现错误:

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;
        }
    }
}
现在,将Add5方法设置为静态:

 public static void Add5(int x[]){
        for(int counter=0; counter < x.length; counter++){
            x[counter]+=5;
        }
    }
基本上,这意味着只能从静态方法中调用静态方法,而Java中的主方法是静态的

编辑: 你为什么要这么做?因为类的静态成员不存在类的实例,而非静态成员不存在。如果您在不创建类的实例的情况下调用静态方法,而该类的实例将尝试调用非静态方法,那么它将无法工作,因为没有类的实例,非静态方法就不存在。

静态方法可以在java中调用静态方法

Add5不是静态方法,所以编译时异常出现

 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;
         }
      }
 }

静态方法和变量位于类级别,可以通过引用类名来调用,而非静态方法位于对象级别,可以使用类的对象来调用

你可以做两件事

将方法更改为static

类排列方法{

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;
    }
}
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;
    }
}
}

创建类的对象并使用该对象调用类的方法

类排列方法{

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;
    }
}
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呢?编译器错误消息中对此进行了解释,但我会在我的答案中添加解释。给我5分钟。好的,请给我解释一下。我会非常感谢你的。提前谢谢,对不起!我是个新手这是我的第一个问题。我不知道那个按钮,所以误按了一下。