从java中的另一个类访问静态变量
Posted
技术标签:
【中文标题】从java中的另一个类访问静态变量【英文标题】:Accesing static variable from another class in java 【发布时间】:2012-05-04 00:08:48 【问题描述】:我在多线程服务器中将队列实现为链表。我想从另一个班级访问这个队列。两个类都在同一个包中。我尝试将此队列设为公共静态并通过 getter 访问它,但没有成功有人可以告诉我确切的问题是什么。
这是我的代码: 队列声明:
public static Queue<Request> q=new ConcurrentLinkedQueue<Request>();
public static void setQ(Queue<Request> q)
Connection.q = q;
public static Queue<Request> getQ()
return q;
访问队列:
Queue<Request> queue=new ConcurrentLinkedQueue<Request>();
queue=Connection.getQ();
在连接线程中为队列添加值
q.add(r);
【问题讨论】:
请贴出你代码的相关部分 您遇到的实际问题是什么?解释“没有成功”。是编译问题还是运行时问题? 注意在多线程程序中使用非线程安全队列。如果您还没有,请查看BlockingQueue,它可能会对您有所帮助。 如果您的问题已经得到解答,或者不再有效,请“打勾”以选择最合适的答案,以便所有人都知道问题已得到解决。谢谢。 【参考方案1】:您可以使用ClassName.memberName
表示法直接访问另一个类的public static
成员:
public class Foo
public static String bar = "hi there";
public class Thing
public static void main(String[] args)
System.out.println(Foo.bar); // "hi there"
public static
数据成员通常不是一个好主意(除非他们有 final
),但如果你需要一个,这就是你的做法。
【讨论】:
嗨 T.J.请问在这种情况下,Foo本身是否成为Foo.bar中的一个对象?我来自 javascript,在使用 Math.PI 时,每个人都说 Math 是一个数学对象,但在 Java 中,我遇到的人只是说“你可以通过类名访问静态变量”,所以我很困惑。谢谢! @Hang -Foo
不是 Java 中的对象,不是。 (如您所知,它在 JavaScript 中将是一个对象——特别是构造函数。)类是 Java 中的一等概念。 有一个对象代表类Foo
(Class
的一个实例,您可以通过Foo.class
访问),但Foo
本身并不是一个对象。
感谢您的回复 T.J.!那么如果 Foo.bar 既不是对象也不是类,我们应该怎样称呼 Foo 呢?似乎很难在任何来源中明确找到这个答案......
@Hang - 这只是类名。 JLS 中的更多内容:docs.oracle.com/javase/specs/jls/se9/html/jls-6.html
哦,明白了!我在 6.1 中看到它。声明。我感谢您的帮助! :D【参考方案2】:
你应该可以直接访问,或者使用静态getter方法...
如果这是你的队列类...
public class Queue
public static LinkedList myList = new LinkedList();
public static ListedList getMyList()
return myList;
然后您可以通过调用Queue.myList
或Queue.getMyList()
访问您的列表——两者都会做同样的事情。使用 getter 方法的好处是您可以控制对列表的访问,例如通过创建方法 synchronized
,防止对列表的调用无序。
【讨论】:
我试过这两件事。但我让队列空了。以下是我的代码的 sn-ps。在服务器类中,我正在创建连接类对象并在新线程中创建新连接。在连接中,我将队列声明为: 能否将您的代码粘贴到您的问题中,以便正确格式化。 队列声明:public static Queue以上是关于从java中的另一个类访问静态变量的主要内容,如果未能解决你的问题,请参考以下文章