Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中从另一个类访问静态变量_Java_Class_Static_Public - Fatal编程技术网

在java中从另一个类访问静态变量

在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) {

我在我的多线程服务器中实现了一个作为链表的队列。我想从另一个类访问此队列。两个类都在同一个包中。我尝试将这个队列作为公共静态队列,并通过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;
    }

您可以使用符号
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;
    }
}