关键要理解private BufferedReader br = new BufferedReader(...);包含的内容!
首先,在在栈区创建了一个br引用,然后,打开操作栈,将操作数的引用放进来,此时,br变成了指向了被开辟数的一个引用!【PS:可能会觉得为什么br不是在堆区,因为声明的缘故,c++里面,称作为正所谓“引用于栈”,你可以整么理解】
所以,当把br作为参数传入tesThread时,传的并非原本声明的那个br 。
我举个简单例子你看下:
//例子
import java.io.*;
public class testThread{
public testThread(BufferedReader br){}
public void start(){}
}
//测试例
import java.io.*;
public class Test {
public static void main(String[]args){
try{
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream(
"E://Test.java"
)
));
new testThread(br).start();
}catch(Exception err){/**举例子,撒也不做*/}
}
}
--------------------------
我们来看看Java的class文件里面的编译:
public class Test extends java.lang.Object{
public Test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return