java中main方法new的对象变量为什么可以在匿名子类中调用?

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值