为什么我无法访问makeRange方法

时间:2015-10-23 16:38:34

标签: java eclipse

我刚刚开始使用java,我在我的超类中使用Range()内的方法创建了一个类makeRange但是当我尝试访问该方法时会抛出错误。这有什么不对吗?

这是我的代码......

public class iAmRichard {

        class Range{
            int[] makeRange(int upper, int lower){
                int[] ary = new int[(upper - lower)+1];
                for(int i = 0; i > ary.length; i++ ){
                    ary[i] = lower++;

                }
                return ary;
            }

        }

    public static void main(String[] args) {
            int foo[];
            Range fui = new Range();
            foo = Range.(here do not apear makeRange method)

4 个答案:

答案 0 :(得分:1)

你在这里创建一个名为Range的内部类。我不相信这就是你打算做的,但我会按照说明回答。

您在静态上下文中引用此类,并且不能使用静态上下文引用内部类。要解决此问题,您需要对Range进行更改:将其设为static

public class iAmRichard {

    static class Range {

    }
}

此外,您已经获得了Range的实例,因此您需要做的就是使用它。

foo = fui.makeRange(1, 10);

如果您选择仅创建一个名为Range的类,则根本不需要处理任何内部类,我认为这将是更清晰的方法。

public class Range {
    int[] makeRange(int upper, int lower) {
        int[] ary = new int[(upper - lower) + 1];
        for (int i = 0; i > ary.length; i++) {
            ary[i] = lower++;

        }
        return ary;
    }
    public static void main(String[] args) {
        int foo[];
        Range fui = new Range();
        foo = fui.makeRange(1, 10);
    }

}

答案 1 :(得分:0)

要在不创建实例的情况下访问方法,必须将其声明为静态。在您的情况下,您还必须将类Range声明为静态。

或者您可以使用已有的实例进行一些更改:

iAmRichard richard=new iAmRichard();
Range fui=richard.new Range();
foo = fui.makeRange(...);

请注意,您需要一个iAmRichard实例来创建一个Range。

答案 2 :(得分:0)

由于调用是以静态方式从静态块进行的(没有实例用于调用makeRange方法),我们需要让被调用的方法是静态的,或者我们需要类的对象来调用实例方法。

答案 3 :(得分:0)

静态地,您可以使用此示例来访问您的方法。这里有一个link,有关静态方法的更多信息。

public class IAmRichard {

public static void main(String[] args) {
        int foo[];
        foo = Range.makeRange(10,1);
    }

    static class Range{
        static int[] makeRange(int upper, int lower){
            int[] ary = new int[(upper - lower)+1];
            for(int i = 0; i > ary.length; i++ ){
                ary[i] = lower++;

            }
            return ary;
        }
    }
}