为什么一个类的对象需要传入另一个类的构造器进去之后再new一下,才可以被调用直接调用却不行,不能调用的原因是什么?可以调用的机制又是什么?请指教!
```java
public class love {
public static void main(String[] args) {
LoveThread loveThread = new LoveThread();
StopLoveThread stopLoveThread = new StopLoveThread(loveThread);
//为什么一个类的对象需要传入另一个类的构造器进去之后再new一下,才可以被调用
// 直接调用却不行,不能调用的原因是什么?可以调用的机制又是什么?
loveThread.start();
stopLoveThread.start();
}
}
class LoveThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 50; i++) {
System.out.println("我不爱你");
try {
Thread.sleep(200); // 为了使输出速度适中,使线程休眠 200 毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class StopLoveThread extends Thread {
private LoveThread loveThread;
public StopLoveThread(LoveThread loveThread) {
this.loveThread = loveThread;
}
@Override
public void run() {
try {
Thread.sleep(5000); // 等待第 25 次输出后 1 秒钟停止循环
} catch (InterruptedException e) {
e.printStackTrace();
}
loveThread.interrupt(); // 停止循环
System.out.println("我爱你");
}
}
类对象,只有实例化【通过new关键字实例化】才可以使用,否则就是空对象【使用会报空指针】。
不知道你这个问题是否已经解决, 如果还没有解决的话:是值传递。Java的方法调用只支持值传递。当一个对象实例作为参数被传递到方法中时,参数的值就是该对象的引用,就是一个地址,形参是这个地址的一份拷贝。对象的属性可以在被调用的过程中被改变,但是对这个对象引用的改变是不会影响到调用者的,也就是说如果在方法中改变了这个对象的引用,将这个引用指向了一个新的地址,那么传过来的那个引用还是指向原来的地址。