在java中从另一个类访问静态变量
我在我的多线程服务器中实现了一个作为链表的队列。我想从另一个类访问此队列。两个类都在同一个包中。我尝试将这个队列作为公共静态队列,并通过getter访问它,但没有成功,有人能告诉我确切的问题是什么 这是我的代码: 队列声明:在java中从另一个类访问静态变量,java,class,static,public,Java,Class,Static,Public,我在我的多线程服务器中实现了一个作为链表的队列。我想从另一个类访问此队列。两个类都在同一个包中。我尝试将这个队列作为公共静态队列,并通过getter访问它,但没有成功,有人能告诉我确切的问题是什么 这是我的代码: 队列声明: public static Queue<Request> q=new ConcurrentLinkedQueue<Request>(); public static void setQ(Queue<Request> q) {
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;
}
您可以使用符号
ClassName.memberName
直接访问另一个类的公共静态成员:
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
),但如果您需要,这就是您的方法。您应该能够直接访问,或者使用静态getter方法
如果这是您的队列类
public class Queue {
public static LinkedList myList = new LinkedList();
public static ListedList getMyList(){
return myList;
}
}
然后,您可以通过调用Queue.myList
或Queue.getMyList()
来访问您的列表-两者都将执行相同的操作。使用getter方法的好处是,您可以控制对列表的访问,例如通过使方法同步化,防止对列表的调用出现故障。请发布代码的相关部分。那么您遇到的实际问题是什么?解释“没有成功”。是编译问题还是运行时问题?请注意在多线程程序上使用非线程安全队列。如果您尚未回答,请查看,这可能会对您有所帮助。如果您的问题已得到回答,或者不再有效,请“勾选”以选择最合适的答案,以便所有人都知道问题已得到解决。谢谢。我试过两种方法。但我的队伍是空的。下面是我的代码片段。在服务器类中,我创建连接类对象并在新线程中创建新连接。在连接中,我将队列声明为:请将您的代码粘贴到您的问题中,以便正确格式化。队列声明:publicstaticqueue q=newconcurrentlinkedqueue();public static void setQ(Queue q){Connection.q=q;}public static Queue getQ(){return q;}在线程的运行方法中向队列添加值:getQ().add(r); 以这种方式访问队列:queue queue=new ConcurrentLinkedQueue();queue=Connection.getQ();嗨,T.J.我可以问一下,在这种情况下,Foo本身是否成为Foo.bar中的一个对象?我来自JavaScript,当使用Math.PI时,每个人都说Math是一个数学对象,但在Java中,我遇到的人只是说“可以通过它的类名访问静态变量”,所以我感到困惑。谢谢@Hang-Foo
在Java中不是一个对象,不是。(正如您所知,它在JavaScript中可能是一个对象,特别是一个构造函数。)类在Java中是一个一流的概念。有一个对象表示类Foo
(您可以通过Foo.class
访问class
的实例),但是Foo
本身不是对象。感谢您的回复t.J。!那么,如果Foo.bar中的Foo既不是对象也不是类,那么我们应该怎么称呼它呢?似乎很难在任何源代码中明确找到这个答案…@Hang-这只是类名。更多关于JLS:哦,抓住你了!我在6.1中看到了它。声明。我感谢你的帮助!:D
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 class Queue {
public static LinkedList myList = new LinkedList();
public static ListedList getMyList(){
return myList;
}
}