Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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_Object_Static - Fatal编程技术网

Java 如果对象引用是静态的,是否意味着该对象的属性也是静态的?

Java 如果对象引用是静态的,是否意味着该对象的属性也是静态的?,java,object,static,Java,Object,Static,例如,我有一个这样的类: public class StaticObjectReference{ private static StaticObjectReference instance; private Vector queue; public static StaticObjectReference getInstance(){ if(instance == null){ instance = new Stati

例如,我有一个这样的类:

public class StaticObjectReference{
     private static StaticObjectReference instance;
     private Vector queue;

     public static StaticObjectReference getInstance(){
         if(instance == null){
              instance = new StaticObjectReference();
         }

         return instance;
     }

     public Vector getQueue(){
         queue = new Vector();
         return queue;
     }
}
接下来的两个类称为
StaticObjectReference

public class CallerOne{
    Vector queue1;

    public void callObjectInstance1(){
         queue1 = StaticObjectReference.getInstance().getQueue();
    }
}

class CallerTwo{
    Vector queue2;

    public void callObjectInstance2(){
         queue2 = StaticObjectReference.getInstance().getQueue();
    }
}

类CallerOne中的
queue1
是否与类CallerTwo中的
queue2
相同

您正在使用类的同一实例
StaticObjectReference
访问队列,因此是的,它们是相同的队列

请注意这与
实例是静态的这一事实没有直接关系。该类实现了,因此该类只有一个实例


正如Brian指出的,这个实现不是线程安全的。检查wikipedia链接中的线程安全方法。

您使用的是类的相同实例
StaticObjectReference
,因此它们是相同的队列

请注意这与
实例是静态的这一事实没有直接关系。该类实现了,因此该类只有一个实例

正如Brian指出的,这个实现不是线程安全的。检查wikipedia链接中的线程安全方法

如果对象引用是静态的,是否意味着该对象的属性也是静态的

如果你逐字读下去,这个问题就没有意义了。。。这可能是你不确定的根源

术语static(在Java中)表示变量属于类,而不是实例或方法调用。这里标记为
static
的东西是一个变量。变量和变量中包含的值之间的区别至关重要

对象引用不能是静态的。对于对象引用,静态属性不是有意义的属性。这根本没有道理。对象引用是一个值,而不是一个变量

当一个
静态变量持有一个对象的引用时,它(通常)不会使它所包含的对象引用(或它所引用的对象)是静态的。除了术语问题之外,如果您更改
静态变量
,变量最初引用的对象可能会消失。这显然是非静态行为

事实上,
实例
变量和
队列
的静态性是正交问题。如果变量声明为
静态
,则它们是静态的。否则,它们就不是

现在,您的代码确保只有一个
StaticObjectReference
实例。但这是编写类的方式的一个紧急属性,与这两个变量的声明(
static
或其他)无关。我们不会把这个属性叫做“静态性”。我们称之为“独身性”。。。请原谅我滥用英语


1-实际上,它并不总是保证这一点,因为它不是线程安全的

如果对象引用是静态的,是否意味着该对象的属性也是静态的

如果你逐字读下去,这个问题就没有意义了。。。这可能是你不确定的根源

术语static(在Java中)表示变量属于类,而不是实例或方法调用。这里标记为
static
的东西是一个变量。变量和变量中包含的值之间的区别至关重要

对象引用不能是静态的。对于对象引用,静态属性不是有意义的属性。这根本没有道理。对象引用是一个值,而不是一个变量

当一个
静态变量持有一个对象的引用时,它(通常)不会使它所包含的对象引用(或它所引用的对象)是静态的。除了术语问题之外,如果您更改
静态变量
,变量最初引用的对象可能会消失。这显然是非静态行为

事实上,
实例
变量和
队列
的静态性是正交问题。如果变量声明为
静态
,则它们是静态的。否则,它们就不是

现在,您的代码确保只有一个
StaticObjectReference
实例。但这是编写类的方式的一个紧急属性,与这两个变量的声明(
static
或其他)无关。我们不会把这个属性叫做“静态性”。我们称之为“独身性”。。。请原谅我滥用英语



1-事实上,它并不总是保证这一点,因为它不是线程安全的,正如所写的那样。

哦,谢谢。我将尝试运行它并获取queue1和queue2的hashCode(),以确保安全。我刚刚想到了它。除了这是一种不安全且不正确的实现单例的方法外,如果这是多线程的,它可能会生成两个不同的
StaticObjectReference
类实例。但是在我链接的维基百科页面中显示了线程安全选项。是的。。。但值得一提的是,OP不是;)+哦,谢谢。我将尝试运行它并获取queue1和queue2的hashCode(),以确保安全。我刚刚想到了它。除了这是一种不安全且不正确的实现单例的方法外,如果这是多线程的,它可能会生成两个不同的
StaticObjectReference
类实例。但是在我链接的维基百科页面中显示了线程安全选项。是的。。。但值得一提的是,OP不是;)+1您正在以不安全的方式实现一个单例,如果您正在谈论