简体   繁体   English

从类到类访问变量

[英]Access variables from class to class

How do i access some variables from another class? 我如何从另一个类访问一些变量? For example, i have 2 files: 例如,我有2个文件:

Main.java Main.java

package keyboardgame;

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class Main extends Applet implements KeyListener
{

    private static final long serialVersionUID = 1L;
    private static boolean keyboardRightPressed = false;
    private static boolean keyboardLeftPressed = false;
    private static boolean keyboardUpPressed = false;
    private static boolean keyboardDownPressed = false;

    int ballX = 20; 
    int ballY = 20;
    int ballSpeed = 10;

    public void init()
    {
        addKeyListener(this);
    }

    public void keyPressed(KeyEvent e) 
    {
        int keyCode = e.getKeyCode();
        if(keyCode == KeyEvent.VK_RIGHT)
        {
            keyboardRightPressed = true;
            ballX = ballX + ballSpeed;
            repaint();
        }

        if(keyCode == KeyEvent.VK_LEFT)
        {
            keyboardLeftPressed = true;
            ballX = ballX - ballSpeed;
            repaint();
        }

        if(keyCode == KeyEvent.VK_UP)
        {
            keyboardUpPressed = true;
            ballY = ballY - ballSpeed;
            repaint();
        }

        if(keyCode == KeyEvent.VK_DOWN)
        {
            keyboardDownPressed = true;
            ballY = ballY + ballSpeed;
            repaint();
        }
    }

    public void keyReleased(KeyEvent e) 
    {
        int keyCode = e.getKeyCode();
        if(keyCode == KeyEvent.VK_RIGHT)
        {
            keyboardRightPressed = false;
            repaint();
        }

        if(keyCode == KeyEvent.VK_LEFT)
        {
            keyboardLeftPressed = false;
            repaint();
        }

        if(keyCode == KeyEvent.VK_UP)
        {
            keyboardUpPressed = false;
            repaint();
        }

        if(keyCode == KeyEvent.VK_DOWN)
        {
            keyboardDownPressed = false;
            repaint();
        }
    }

    public void keyTyped(KeyEvent e) {
    }


    public void paint(Graphics g)
    {
        g.fillOval(ballX,ballY,20,20);
        g.drawString("Right :"+keyboardRightPressed,0,10);
        g.drawString("Left :"+keyboardLeftPressed,0,20);
        g.drawString("Up :"+keyboardUpPressed,0,30);
        g.drawString("Down :"+keyboardDownPressed,0,40);        
    }

}

KeyThread.java KeyThread.java

package keyboardgame;

public class KeyThread implements Runnable
{

    public KeyThread(String s,int speed)
    {
        name = s;
        time = speed;
    }

    public void run() 
    {
        try
        {
            if(keyboardRightPressed == true)
            {
                ballX = ballX + 10; 
                ballY = ballY + 10;
            }
        }
        catch(Exception e)
        {

        }
    }
}

What do i want is that from KeyThread.java to be able to modify/increment/access values from Main.java especially 我想要的是KeyThread.java中的功能, 尤其是能够修改/增加/访问Main.java中的

int ballX = 20; 
int ballY = 20;

so i can call my thread from Main.java like 所以我可以像这样从Main.java调用我的线程

Thread t5 = new Thread(new KeyThread("Moving Right", ballX = ballX + 1, 20));
t5.start();

How can i do that? 我怎样才能做到这一点? And why is it so hard to do it? 为什么要做那么难?

In order to invoke non-static methods of an object, you need an instance of the class. 为了调用对象的非静态方法,您需要一个类的实例。 For more information, see Objects . 有关更多信息,请参见对象

If you declare your variables public instead of private , you can refer to them as (for example) Main.ballX , but this is generally a bad practice. 如果将变量声明为public而不是private ,则可以将它们称为(例如) Main.ballX ,但这通常是一种不好的做法。 We organize things into classes to keep separate things separate; 我们将事物组织成类,以使单独的事物保持独立; if we start using the members of class A within class B, then class B has a dependency on A that can make it hard to debug and maintain later on. 如果我们开始在类B中使用类A的成员,则类B对A具有依赖性,这会使以后很难调试和维护。 Better would be to provide a "getter" or "accessor" method inside Main (eg getBallX() and setBallX(int x) ) which give the owning class (in this case, Main) better control over its private members. 最好在Main内部提供一个“ getter”或“ accessor”方法(例如getBallX()setBallX(int x) ),以使拥有类(在这种情况下为Main)更好地控制其私有成员。

另外,将其他答案添加到其他内容中,如果频繁执行的任务似乎是在向值添加/减去值,那么诸如adjustBallX(int x)之类的方法可能会很有价值,因此您可以在不增加值的情况下增加/减少值每次调用get()和set()。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM