当前位置: 首页 > 面试题库 >

java为什么不能从静态环境引用非静态变量?

盛跃
2023-03-14
问题内容

java为什么不能从静态环境引用非静态变量?


问题答案:

你必须了解一个类与该类实例之间的区别。如果你在街上看到汽车,即使你看不到哪种型号或类型,也将立即知道它是汽车。这是因为你将看到的与“汽车” 类进行了比较。该类包含与所有汽车相似的类。可以将其视为模板或想法。

同时,你看到的汽车是“汽车”类的一个实例,因为它具有你期望的所有属性:有人驾驶它,它有引擎,车轮。

因此,该班级说“所有汽车都有颜色”,而实例说“这辆特定的汽车是红色的”。

在OO世界中,你定义类,并在类内部定义type字段Color。当实例化该类时(创建特定实例时),将为该颜色保留内存,并且可以为该特定实例指定颜色。由于这些属性是特定的,因此它们是非静态的。

静态字段和方法与所有实例共享。它们用于特定于类而不是特定实例的值。对于方法,这通常是全局辅助方法(如Integer.parseInt())。对于字段,通常是常量(例如汽车类型,即你的集合有限且不经常更改的东西)。

为了解决你的问题,你需要实例化类的实例(创建对象),以便运行时可以为该实例保留内存(否则,不同的实例会相互覆盖你不想要的实例)。

在你的情况下,请尝试以下代码作为起点:

public static void main (String[] args)
{
    try
    {
        MyProgram7 obj = new MyProgram7 ();
        obj.run (args);
    }
    catch (Exception e)
    {
        e.printStackTrace ();
    }
}

// instance variables here

public void run (String[] args) throws Exception
{
    // put your code here
}

main()方法创建了它所包含的类的一个实例(听起来很奇怪,但是由于main()是用该类而不是用该实例创建的,所以可以做到这一点),然后调用一个实例方法(run())。



 类似资料:
  • 问题内容: java为什么无法从静态环境引用非静态? 问题答案: 要了解原因,你必须了解两者之间的区别。 实例(非静态)方法适用于特定类型(类)的对象。这些是使用新的创建的,如下所示: 要调用实例方法,请在实例(myObject)上调用它: 但是,只能直接在类型上调用静态方法/字段,如下所示: 前一条语句不正确。也可以使用诸如此类的对象引用来引用静态字段, myObject.staticMetho

  • 可能重复: 不能从静态上下文(java)引用非静态变量 即使在这种情况下,我们也试图从静态方法访问非静态类。但这不会给出任何错误。为什么?

  • 我是Android编码的n00b,今天我想尝试使用定位服务。 我设置了一个简单的类和一个简单的main,只是为了得到经度和纬度。 但当我尝试调用retrive的构造时,long and latitude Android Studio弹出了一个错误: 错误:(33,16)错误:无法从静态上下文引用非静态变量纬度 这是我的位置班

  • 我编写了以下测试代码: 但会出现以下错误: 我如何让我的方法识别我的类变量?

  • 我有一个非常简单的类,我想用它作为另一个类的子类。但当我将其代码放入父类时,我得到: 非静态变量,不能从静态上下文中引用 另一方面,当我将子类GenTest的类代码放在“父类”的类代码之外时,我没有得到这个错误。 为什么会发生这种情况?

  • 问题内容: 我是Java新手,我正在尝试通过递归函数部署斐波那契跟踪,然后计算运行时间。这是我设法编写的代码: 问题是,当我尝试将其转换为字节码时,出现以下错误: 我想知道是什么问题?! 问题答案: 更改 至 并使该方法静态。 或者,改变 至