调用void函数时出错

时间:2014-04-08 19:05:17

标签: java

public class Makakiesmarkou {

void swap(int i, int j, int[] arr) {
    int t = arr[i];
    arr[i] = arr[j];
    arr[j] = t;
}

public void MySort(int[] T)
{
    for(int m=0; m<T.length-1; m++)
    {
        int j=m;
        for(int k=m+1; m<T.length-1; k++)
        {
            if(T[k]<T[j])
                j=k;
        }
        swap(T[j], T[m], T);
    }
}

public static void main(String[] args) {

    int[] pin= new int[50];
    MySort(pin);
    System.out.println(Arrays.toString(pin));
}

}

我在主类中调用MySort时的错误是#34;非静态方法MySort [int []]无法从静态上下文中引用&#34;

我做错了什么?

2 个答案:

答案 0 :(得分:1)

你可以做Salah所说的,或者你可以实例化你的课程并在那上面打MySort

public static void main(String[] args) {

    int[] pin= new int[50];
    Makakiesmarkou m = new Makakiesmarkou();
    m.MySort(pin);
    System.out.println(Arrays.toString(pin));
}

答案 1 :(得分:0)

您需要将方法的声明更改为静态,如:

public static void MySort(int[] T)

在将类加载到JVM时初始化的静态变量另一方面,实例变量对每个实例具有不同的值,并且在使用new()运算符或使用Class.newInstance()运算符创建对象的实例时创建它们反射像{{1}}。

因此,如果您尝试访问非静态变量而没有任何实例编译器会抱怨,因为这些变量尚未创建,并且在创建实例并且它们与任何实例关联之前它们不存在。所以在我看来,只有在静态上下文中禁止非静态或实例变量才有意义的理由是不存在实例。

了解更多here