Java 引用同一数据包中的类中的值
我有两门课,main和timex。我想在timex类中显示变量的值,但我总是得到0的答案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
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的变化值。