如何从main方法调用非静态方法?

时间:2013-06-08 21:25:44

标签: java static non-static

例如,我正在尝试做这样的事情

public class Test {

    public static void main(String args[]) {

        int[] arr = new int[5];

        arrPrint(arr);
    }

    public void arrPrint(int[] arr) {

        for (int i = 0; i < arr.length; i++)
            System.out.println(arr[i]);

    }
}

我收到一个错误,告诉我无法从静态环境中引用非静态变量。那么,如果这是真的,我怎么能在main中使用非静态方法?

7 个答案:

答案 0 :(得分:14)

你做不到。非静态方法是必须在Test类的实例上调用的方法;在main方法中创建一个Test实例:

public class Test {

    public static void main(String args[]) {
        int[] arr = new int[5];
        arr = new int[] { 1, 2, 3, 4, 5 };

        Test test = new Test();
        test.arrPrint(arr);

    }

    public void arrPrint(int[] arr) {
        for (int i = 0; i < arr.length; i++)
            System.out.println(arr[i]);

    }
}

答案 1 :(得分:3)

您只能使用类实例调用非静态方法,因此您必须使用 new 关键字创建它。

public class Something {

    public static void main(String args[]) {
        Something something = new Something();
        something.method1();

        new Something().method2();
    }

    public void method1() {
    }

    public void method2() {
    }
}

答案 2 :(得分:1)

总之,你不能。由于main是一个特殊情况(即只有一个的入口点),除了静态方法,主要的变量之外你不能有任何其他东西。

答案 3 :(得分:1)

根据您的新示例,解决方案将是:

public class Test {

    public static void main(String args[]) {
        int[] arr = new int[5];
        new Test().arrPrint(arr);
    }

    public void arrPrint(int[] arr) {
        for (int i = 0; i < arr.length; i++)
            System.out.println(arr[i]);

    }
}

或者你可以移动

int[] arr = new int[5];

到静态部分,如

public class Test {

    static int[] arr; 

    public static void main(String args[]) {
        arr = new int[5]; 
        new Test().arrPrint(arr);
    }

    public void arrPrint(int[] arr) {
        for (int i = 0; i < arr.length; i++)
            System.out.println(arr[i]);
    }
}

但是第二个从良好的编程实践中闻起来很糟糕

答案 4 :(得分:1)

non-static - &gt; object

的属性

static method - &gt;这个班的财产。

因此,当方法/变量声明中没有static关键字时,如果没有静态上下文中的任何类实例,则无法调用/引用该方法/变量。

正如其他人建议在main方法中创建主类的新实例(new Test())并调用non-static arrPrint方法。

答案 5 :(得分:0)

需要在类的实例上调用非静态方法。要创建实例,请使用new关键字,如

Test instance = new Test();

现在您可以在像

这样的实例上调用方法
instance.arrPrint(arr);

答案 6 :(得分:0)

new Something()。method1()或new Something()。method2()