我刚刚开始使用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)
答案 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;
}
}
}