Java 使可变变量可以跨许多其他未连接的对象访问

Java 使可变变量可以跨许多其他未连接的对象访问,java,static,Java,Static,在Java中,我如何使一个可变对象可以跨多个未连接的对象访问,而无需a)创建可变静态字段/方法,或B)将同一对象传递到多个层,或者哪一个被认为是可维护性、可读性等方面的最佳实践 我在桌面应用程序中经常遇到两种情况: GUI中的用户/会话数据。用户在应用程序开始时登录,稍后我将在JPanel中的JLabel中需要用户名,在JFrame中的另一个面板中的另一个面板中。将会话数据传递到五层或六层的构造函数中似乎很荒谬,但我讨厌这样一种想法,即在静态变量中保存这些信息的对象到处都被访问 数据库访问。我有

在Java中,我如何使一个可变对象可以跨多个未连接的对象访问,而无需a)创建可变静态字段/方法,或B)将同一对象传递到多个层,或者哪一个被认为是可维护性、可读性等方面的最佳实践

我在桌面应用程序中经常遇到两种情况:

GUI中的用户/会话数据。用户在应用程序开始时登录,稍后我将在JPanel中的JLabel中需要用户名,在JFrame中的另一个面板中的另一个面板中。将会话数据传递到五层或六层的构造函数中似乎很荒谬,但我讨厌这样一种想法,即在静态变量中保存这些信息的对象到处都被访问


数据库访问。我有一个对象来访问数据库,然后各种对象都需要访问数据库。这些类基本上是不相关的,并且出于不同的原因需要数据库,因此我求助于
数据库。thisOne().query(“…”)
这个问题肯定是一个客观的问题,这可能会引发语言/框架功能战的争论

说到实际问题,您在这里所指的案例是有效的,并且该问题的对应部分仅使用
静态数据回答。你不能简单地拒绝静态是唯一的方法这一事实。他们注定要这样做

有时,您希望拥有对所有对象通用的变量。这是通过“静态”修改器完成的。声明中包含静态修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。类的每个实例都共享一个类变量,该变量位于内存中的一个固定位置。任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量


让我给你举一个你提到的例子。这就是
会话
。你有没有看过容器中会话管理的源代码?所有属性和值都存储在服务器上的
静态Hashmap
中,以允许它们跨实例(请求、请求上下文等)进行访问

选择B总是更可取的。我认为除了您指定的选项A和B之外,没有其他方法可以做到这一点。