java中main方法new的对象变量为什么可以在匿名子类中调用?
如果是联想成定义一个子类,并在子类中调用其他类的static成员倒是合理,但为什么我的b1是非static的却依然可以,说明匿名子类和非匿名子类应该还是有那么一点区别的?
在这里做个记录
package com.atguigu03.threadsafemore.singleton;
/**
* @Description
* @authr CodePerWorld Email:
* @date
*/
public class BankTest {
//为什么bank要定义在这里,因为如果定义在main方法里面的话,属于局部变量
//而之后的代码定义类Thread的匿名子类,匿名子类中重写了run方法,
//类中的成员方法怎么能调用其他方法中的局部变量?尽管这个方法是主方法,但他也只是个方法。
//所以要定义在主类中,作为成员变量并且要声明为statci随着类的加载而加载,才能给static的main方法调用。
//但是 第一个b1我没有设置成static,那么问题来了,为什么我在main方法中new的对象可以在类的成员方法中调用!
public Bank b1 = null;
static Bank b2 = null;
public static void main(String[] args) {
BankTest bankTest = new BankTest();
// Bank b1 = null;
// Bank b2 = null;
Thread thread1 = new Thread(){
@Override
public void run() {
bankTest.b1 = Bank.getInstance();
}
};
Thread thread2 = new Thread(){
@Override
public void run() {
b2 = Bank.getInstance();
}
};
thread1.start();
thread2.start();
try {
thread1.join();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
try {
thread2.join();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println(bankTest.b1);
System.out.println(b2);
System.out.println(bankTest.b1 == b2);
}
}
class Bank{
public Bank bank = null;
private static Bank instance = null;
private Bank(){
}
public static Bank getInstance(){
if (instance == null) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
instance = new Bank();
}
return instance;
}
}