当前位置: 首页 > 知识库问答 >
问题:

java如何将主数组正确地传递给类构造函数?[副本]

郎曾笑
2023-03-14
public class Test {
    class Foo {
        int[] arr;
        Foo(int[] userInput) {
            arr = userInput;
        }
    }
    public static void main(String[] args) {
        int[] userInput = new int[]{1,2,3,4,5};
        Foo instance = new Foo(userInput);
    }
}

它给了我一个错误

error: non-static variable this cannot be referenced from a static context

我已经搜索了一些答案,但无法解决它。

这是我对这段代码的看法,我将userInput视为指针,编译器分配五个int内存并为userInput分配一个地址,然后我将这个地址(我知道java是值传递)传递给classFoo构造函数,我认为实例字段arr得到了地址值。

这就是我的理解,我错了吗?

共有2个答案

廖永长
2023-03-14

当非静态嵌套类(即Foo)被实例化时,例如使用new Foo(userInput),它们需要存储对其封闭类的this变量的隐式引用(即Test)。由于Foo是在静态main方法的上下文中实例化的,因此没有可用的封闭Test的此类实例。因此,抛出错误。解决此问题的方法是使嵌套类Foo静态,如:

public class Test {
    static class Foo {   // <---- Notice the static class
        int[] arr;
        Foo(int[] userInput) {
            arr = userInput;
        }
    }
    public static void main(String[] args) {
        int[] userInput = new int[]{1,2,3,4,5};
        Foo instance = new Foo(userInput);
    }
}

有关详细信息,请参阅嵌套类留档和为什么我得到“不能从静态上下文引用的非静态变量”?

微生嘉
2023-03-14

由于类Foo是类Test的非静态内部类,没有Test的实例,类Foo的实例就不可能存在。因此,要么将Foo更改为static:

static class Foo {
    int[] arr;
    Foo(int[] userInput) {
        arr = userInput;
    }
}

或者,如果您不想使其成为静态,请更改您通过Test的实例创建Foo实例的方式:

Foo instance = new Test().new Foo(userInput);
 类似资料:
  • 我试图使一个用户类和使用类来处理登录,但从某种原因我的用户类构造函数是读取我的mysqli对象作为一个字符串 这是我的密码 Class.php mysql.php checklogin.php 它给了我这个错误 可捕获的致命错误:在第13行的C:\wamp\www\class.php中,类mysqli的对象无法转换为字符串 我要把头发拔出来了,有什么想法吗?

  • 我创建了一个Author对象,用于构造函数的方法签名:public Book但是,我所做的赋值要求将Author(实例变量)更改为。当然,现在我以前的构造函数不行了。这是密码 如果我上传的方式不令人满意,我对任何不便表示歉意。我还没有学会使用堆栈溢出。 谢谢!

  • 这是我的主要方法,我正在努力重新学习编码,因为我在学校里多次失败。我想从主方法中获取一个数组,并从循环中获取用户输入,然后将其传递给“TestScoresTwo.java”类中的构造函数。然后我想取那个数组,用它来求和,在类中的一个方法中找到平均值,然后返回和。 这是我的测试分数。java类。 当它编译时,我的输出是:“请输入等级数量有”3“输入等级11”等级是11.0“50”等级是50.0“70

  • Java枚举允许您将参数传递给构造函数,但我似乎不能传递数组。例如,下面的代码编译时有错误: 但如果将相同的数据作为数组常量传入,则代码将无法编译: 我也尝试过创建新的int[]数组的变体,比如: 没有运气。我认为问题在于传递一个数组常量。我不确定这是一个需要修正的简单语法,还是在传递这种类型的数据时存在一个潜在的问题。提前道谢。

  • 我正在尝试通过:如果流文件; 在我的主()中,到一个名为“FIFO”的类的构造函数:FIFO(文件); 在FIFO(FIFO.h)的头文件中,我有: 在FIFO.cc,我有: 我一直喜欢(还有更多,我只是粘贴其中一个): 在文件包括从/usr/lib/gcc/x86_64-redhat linux/4.4.7/…/…/…/…/包含/c /4.4.7/bits/localefwd.h: 43,从/u

  • 我试图将构造函数参数动态传递给Springboot框架中的一个bean。我已经使用context.getBean(class,arg...)在Spring中动态传递构造函数参数,但它没有成功获取值并显示默认值。我的代码有什么问题? 项目结构: 应用程序上下文.xml 应用 活动 输出: