java static 方法区 单例 全局变量

1735 2022-07-07 15:01

在面向对象的语言设计中,没有全局变量。全局变量是不可扩展的。是非面向对象的。解决的是储存关键步骤参数承上启下的问题。

全局变量的意义在于,程序开始运行后,在程序的任何地方都可以存取一个或多个全局盒子里的内容。方便了程序的内部交互以及过程数据的存取。但是很明显,一旦有程序使用全局变量,那么这个程序本身也就被限制死了。不能拓展、不能被其他程序调用。否则,全局变量就要归并。有多少个程序,就要归并多少个全局变量。且不说变量名称是否冲突的问题。越来越多的中间态、传递数值将变得无法区分主次、无法交接、无法管理。

而面向对象程序中有些事情是一定要统一的。比如计数的程序、比如流程交接时候的流水线号。这个计数必须是全局统一的。这个商品在某一条流水线上的具体的分段,将拥有全局唯一的标识。那么就要用到单例。

其实全局需要操作的都是一个方法,比如计数,并不一定要求非要固定的人去计数,但是任意短时间内计数的一定是一个人(比如每个空姐都可以计数,但是手中的数客器只能有一个),这个方法负责存取那个非常重要的变量(存储全局唯一编号或者序号的变量)。而这个方法是可以让多个人调用的。所以这个方法可以说是一个操作固定在了固定的岗位上。谁在岗,谁就可以操作。像一个岗位,或者说袖标。只不过这个袖标能带的人只有一个。获得了这个权限,才能进行加1的操作。

对应关系是,这种序号的变量,对应着一个操作,这个操作对应着一个对象,这个对象是单例的。调用这个对象的加1的方法,就会有阻塞。而这个对象可以不是一个操作者的类。这个对象可以仅有两个方法:1.获得单例的方法以及2.加1的方法。由于方法不能独立存在,而对象是可以放到方法区共享的。所以单例的是对象而不是方法。而变量仅仅就是个存取、写入擦除的记录板。变量是不具备对象这种自主能动性的。

方法区里存储的静态变量,是一个引用。表明这个堆里存放的东西不能被回收,并且全局唯一。jvm方法区

jvm

全部评论

·