Java 引用同一数据包中的类中的值

Java 引用同一数据包中的类中的值,java,Java,我有两门课,main和timex。我想在timex类中显示变量的值,但我总是得到0的答案 public class mainaxe { public static void main (String arg[]) { timex n = new timex(); int n2 = timex.a; n.timedel(); for(int i=0; i<20; i++) { System.o

我有两门课,main和timex。我想在timex类中显示变量的值,但我总是得到0的答案

public class mainaxe {

    public static void main (String arg[]) {
        timex n = new timex();

        int n2 = timex.a;
        n.timedel();
        for(int i=0; i<20; i++) {
            System.out.println("the time is :" + n2);

            try {
                Thread.sleep(1000);
            }

            catch (InterruptedException e) {}
        }
    }
}
这是我的timex课程:

public class timex extends Thread{
    public static int a;

    public int timedel(){
        for(int i=0; i<200; i++) {
            try {
                Thread.sleep(1000);
                a = a + 5;
            }
            catch (InterruptedException e){}

            // start();
        }
        return a;
    }
}

我想从timex类中获取值,并在我的主类中使用它每隔1秒打印一次值。

如果您想要一个多线程程序,那么在扩展线程的类中,声明一个与以下内容完全相同的方法:

@Override
public void run () {
    // in here, put the code your other thread will run
}
n.start();
现在,在创建此类的新对象之后:

timex n = new timex();
您必须像这样开始线程:

@Override
public void run () {
    // in here, put the code your other thread will run
}
n.start();

这会导致对象开始在新线程中运行其run方法。让主线程在n中调用其他方法对新线程没有任何作用;主线程调用的任何其他方法都将在主线程中执行。因此,您无法通过函数调用与新线程通信。你必须用其他方法来做,比如你试图用变量a

我想你需要这样的东西

Mainaxe.java

package mainaxe;

public class Mainaxe {

    public static void main(String arg[]) {
        Timex n = new Timex();
        n.start();
//        int n2 = Timex.a;
//        n.timedel();
        for (int i = 0; i < 20; i++) {
            System.out.println("the time is :" + Timex.a);

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            }
        }
    }
}
Timex.java

package mainaxe;

public class Timex extends Thread {

    public static int a;

    public Timex() {
        super();
    }

    @Override
    public void run() {
        timedel();
    }

    public int timedel() {
        for (int i = 0; i < 200; i++) {
            try {
                Thread.sleep(1000);
                a = a + 5;
            } catch (InterruptedException e) {
            }

            // start();
        }
        return a;
    }
}

这不是一个正确构造的线程,如果这是你所有的代码,而且你从来没有调用过。从主线程开始,你有比这更深的问题。我必须开始吗?方法..当我引用值a时它不起作用吗?请看这个。设置多线程程序需要做几件事。现在,您只运行一个线程,您的主函数调用timedel并等待它完成。。那就行了。。对于上述问题?只需要这样:完成我的工作另一个评论:在你开始一个不是真正的线程的线程之前,你把n2分配给一个线程。然后线程会修改a,但这根本不会影响n2。谢谢你,我会尝试一下,让你知道。我一直在等待你这样的答复,因为我的问题有效,谢谢你。我将完成我的项目工作,但我想知道我做错了什么。我应该再学习哪个主题!!真的是你救了我一天。我猜线程和构造函数类基本上都有问题。您应该通过添加带有逻辑的run方法,然后调用start来正确启动线程。另一个问题是,当访问n2变量时,应该访问实际更改的变量。因为n2是一个基本的int,所以它没有引用Timex.a的变化值。