一个class去获取另一个class的static变量却一直为空解决方法

版权声明:本博文仅供学习、参考、技术讨论,版权归笔者/译者所有。 https://blog.csdn.net/qq_38025219/article/details/83111715

java static生命周期
Static:

加载:java虚拟机在加载类的过程中为静态变量分配内存。
类变量:static变量在内存中只有一个,存放在方法区,属于类变量,被所有实例所共享
销毁:类被卸载时,静态变量被销毁,并释放内存空间。static变量的生命周期取决于类的生命周期
类初始化顺序:

静态变量、静态代码块初始化
构造函数
自定义构造函数
结论:想要用static存一个变量,使得下次程序运行时还能使用上次的值是不可行的。因为静态变量生命周期虽然长(就是类的生命周期),但是当程序执行完,也就是该类的所有对象都已经被回收,或者加载类的ClassLoader已经被回收,那么该类就会从jvm的方法区卸载,即生命期终止。

更进一步来说,static变量终究是存在jvm的内存中的,jvm下次重新运行时,肯定会清空里边上次运行的内容,包括方法区、常量区的内容。

要实现某些变量在程序多次运行时都可以读取,那么必须要将变量存下来,即存到本地文件中。常用的数据存取格式:XML、JSON、Propertities类(类似map的键值对)等

分析:
把AAA类的main方法放到BBB类的main法中。你两个main方法相当于启动两个程序,两个程序之间不共享内存,BBB类的main方法启动时不会调用AAA的test方法,也就没有初始化静态变量,所以一直是null。
解决:
写在一个类里面,同时用两个main方法不共享内存,无法获取。

猜你喜欢

转载自blog.csdn.net/qq_38025219/article/details/83111715