Java中单例模式中为何静态成员变量可以访问非静态方法?比如:单例模式的唯一实例。由此引发的一些思考。

第一次写CSDN博客,记录下自己发现的一个关于单例模式的一个小发现。
为何静态成员变量可以访问非静态方法。比如:单例模式的唯一实例。

引子:单例模式的一个简单例子

你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

问题:可以看出:instance作为一个静态变量(instance)被实例化后就可以调用非静态方法(nonStaticMethod)了。

在这里插入图片描述

根据我们的常识理解:
1、类的静态成员是在类加载的时候初始化的,可以利用类或类的实例对象去调用;
2、反过来,类的静态成员(静态变量或静态方法)是不能访问非静态的类成员(普通变量和方法)的,因为:非静态的类成员属于对象,类对象实例化才会加载。那么,单例模式中的静态成员变量是如何访问非静态方法的呢?

分析:其实,静态成员变量被实例化就有了新名字"静态对象"。因此,要弄清楚上面的问题,我们就需要知道静态成员变量和静态对象的区别?

从生命周期看:
1、静态成员变量: 在类加载的时候,类加载完成,就分配完空间;直到类被卸载时空间被回收。静态对象是静态成员变量被实例化的一个对象,他拥有静态的属性:属于类,类的实例对象共享;同时具备对象的属性,可以调用对象自身的方法和属性(不论是静态成员,还是非静态成员)。
2、非静态成员: 创建对象的时候分配空间; 对象变为垃圾空间被回收的时候被销毁

结论:为何单例模式中的静态变量可以访问非静态方法?

1、静态变量被实例化后,就变成了静态对象,静态对象也是对象,当然可以调用对象中的静态方法和非静态方法了。
2、需要注意的是:静态对象是全局唯一的,一旦静态对象引用改变了。则所用利用类.静态对象.调用的方法都会改变。

备注。1


  1. 第一次发博客,内容可能有点乱。后续不断完善。 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值