为什么我不能调用非静态变量?

时间:2012-03-01 22:33:12

标签: java non-static static

Eclipse说我无法对非静态字段Art.instance进行静态引用。为什么它认为我从静态上下文中调用Art.instance?

TDRenderer本身被调用如下:

renderer = new TDRenderer();

TDRenderer.java:

package towerDefense;

import java.awt.Graphics;
import java.awt.Image;

public class TDRenderer {

    public Art art;

    public TDRenderer()
    {
        art = Art.instance;
    }

    public void render(Graphics g)
    {
        for(int i = 0; i < 32; i++)
        {
            for(int j = 0; j < 24; j++)
            {
                Image itd = (Image)(art.sprites[art.level1.tiles[i][j].type]);
                g.drawImage(itd, itd.getWidth(null), itd.getHeight(null), null);
            }
        }
    }
}

3 个答案:

答案 0 :(得分:4)

并不是说你处于静态环境中; instance不是Art的静态字段,但是将其引用为Art.instance意味着您正在尝试使用它,就好像它是静态的一样。

答案 1 :(得分:0)

您正在调用instance 上的Art媒体资源。

如果它不是静态的(即类变量),则没有值,因为它期望在从Art类实例化的对象内引用。

如果您希望从导入Art的任何位置引用单个值,请将static前缀放在instance声明前面,并在Art声明中为其提供值{1}}文件。如果您要从特定的instance对象访问Art变量,则需要创建一个并引用所创建对象的instance属性。

答案 2 :(得分:0)

    public class TDRenderer {   
     public Art art;

        public TDRenderer()
        {
            art = Art.instance;
        }
//so on..

假设1 - Art.instancestatic个实例。

如果是这样,您应将art的本地变量TDRenderer声明为public static Art art;

那么它是多余的,无用的。为什么不在任何需要的地方直接引用Art.instance?