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

不能从静态上下文java中引用非静态变量[重复]

易刚捷
2023-03-14

我知道这个问题已经被问了很多很多次,我也读过很多答案,但是我不知道如何解决我的问题。以下是我的代码:

public class Circle
{
    public int diameter;
    public int xPosition;
    public int yPosition;
    public String color;


    public Circle()
    {
        diameter = 30;
        xPosition = 20;
        yPosition = 60;
        color = "blue";
    }

    public void toString()
    {
        System.out.println("The diameter of the circle is " + Circle.diameter);
        System.out.println("The x position of the circle is " + Circle.xPosition);
        System.out.println("The y position of the circle is " + Circle.yPosition);
        System.out.println("The colour of the circle is " + Circle.color);
    }


   public static void main(String[] args)
   {
        Circle c1 = new Circle();
        c1.toString();

   }

}

我最初确实通过更改来解决此问题:

public class Circle
{
    public int diameter;
    public int xPosition;
    public int yPosition;
    public String color;
}

public class Circle
{
    public static int diameter;
    public static int xPosition;
    public static int yPosition;
    public static String color;
}

虽然这确实有效,但我觉得这不是一个好方法。我读过一些关于实例变量的内容,但我不知道如何做到这一点。

谢谢

共有2个答案

韦欣德
2023-03-14

由于静态变量和方法连接到类本身而不是它的实例,因此它们使用类名调用,例如:

================================================================================

class ABC{
public static int a;

public void A()
{
   System.out.println("The value of a is: "+a);
}

public class test
{
   ABC.a = 10;
   ABC.A();
}

您不需要将变量更改为静态变量

只需使用< code>this操作符调用变量。

周超英
2023-03-14

问题与< code>toString()函数有关:

    System.out.println("The diameter of the circle is " + Circle.diameter);
    System.out.println("The x position of the circle is " + Circle.xPosition);
    System.out.println("The y position of the circle is " + Circle.yPosition);
    System.out.println("The colour of the circle is " + Circle.color);

您正在使用类引用来引用非静态变量。只需将圆圈替换为此内容即可。查看了解实例和类成员教程

编辑:

奇怪的是,它不让我使用名称 toString(),因为“圆圈中的 toString() 不能覆盖对象中的字符串()”。它适用于任何其他名称

是的,因为toString()方法是在Object类中声明的,它是所有java类的超类。此方法的返回类型为String,而您使用的是void。因此,要么您必须将返回类型更改为String,要么将函数名称更改为其他任何名称。

 类似资料:
  • 我最近开始用Java编码,我有一个关于轮盘赌/挖掘游戏(终端)的问题。 每次尝试使用“bank.amount”购买特定商品时,都会出现以下错误: 这是我的shop.java文件 如果你需要更多的代码(例如,我的主类或银行类),请随时问我!

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

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

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

  • 错误来自此行板状态 addme = 新板状态(); 由于某种原因,它所指向的非静态变量是“新”的。我不清楚如何修复这个错误,因为new不应该是一个变量,也不是。 查看stackoverflow记录,该错误通常来自非静态方法,通常通过将该方法设为静态或完全绕过该方法来解决。T 下面的代码是为了引用这个语句前后发生的事情。 }……

  • 我试图从main方法中的类调用方法,但我一直得到这样的错误:我不能从静态上下文调用非静态变量。 多谢了。