java 静态和非静态资源之间的关系处理

公共厕所比喻
  1. 静态资源(公共厕所)

    • 静态方法 / 变量就像公共厕所里的设施(卫生纸、洗手液)
    • 所有人(所有对象)都可以直接使用(调用)
    • 它们属于整个类,而不是某个特定的对象
  2. 非静态资源(用户家里的东西)

    • 非静态方法 / 变量就像用户家里的私人物品(比如家里的擦屁股纸)
    • 只有特定的用户(对象实例)才能使用
    • 它们与具体的对象实例绑定
  3. 访问限制

    • 用户(对象)→ 公共厕所(静态资源)

      • 你可以随时去公共厕所用里面的纸(对象可以调用静态方法)
      • 这很合理,因为公共厕所是共享的
    • 公共厕所管理员(静态方法)→ 用户家里(非静态资源)

      • 管理员不能随便跑到你家拿你的纸(静态方法不能直接访问非静态资源)
      • 除非管理员知道你家地址(创建对象实例),然后才能去你家拿纸
    • 用户(对象)→ 自己家里(非静态资源)

      • 你可以随时用自己家里的纸(非静态方法可以访问非静态变量)
      • 这是因为你拥有这个家(对象实例)
为什么要这样设计?

Java 语言这样设计是为了避免 "混乱":

  • 如果公共厕所管理员可以随便进用户家里拿东西,会侵犯隐私
  • 如果静态方法可以直接访问非静态资源,会导致逻辑混乱:
    "我应该用哪个用户家里的纸?如果用户还没回家(对象还没创建)怎么办?"
补充说明

当你在静态方法中需要使用非静态资源时,就像管理员需要用户家里的纸:

  • 管理员必须先知道用户的地址(创建对象)
  • 然后才能去用户家里拿纸(通过对象引用调用非静态方法)
    public class Paper {
        // 非静态变量 - 用户家里的纸
        private String type;
        
        // 非静态方法 - 用户使用纸
        public void wipe() {
            System.out.println("使用" + type + "擦屁股");
        }
        
        // 静态方法 - 公共厕所管理员
        public static void helpCustomer() {
            // 错误!管理员不能直接用用户家里的纸
            // wipe();
            
            // 正确做法:先找到一个用户
            Paper userPaper = new Paper();
            userPaper.type = "柔软的卫生纸";
            
            // 然后才能用这个用户家里的纸
            userPaper.wipe();
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值