作为我的 AP 课程的一部分,我正在学习对象、实例、引用等......所以据我所知,引用是一个指向某物的变量:一个值、类等。. . 因此,说对象是对类的引用是否合法?
注意:我知道这是主观的,但我似乎无法在其他任何地方找到这样的比较。
按照通常的参考定义,你不能这么说。正确的是“一个对象是一个类的一个实例。”。
引用的通常定义是指向通常被某个对象占用的内存位置的值。指针和引用之间的区别在于您可以对前者进行指针运算,但不能对后者进行。
例如在以下代码片段中:
SomeClass o = new SomeClass();
SomeClass foo = o;
SomeClass
是类,并且是对该关键字的特定调用返回o
的实例的引用。为 的新实例分配内存并调用其构造函数对其进行初始化。是对同样由.引用的实例的另一个引用。换句话说,和指向同一个对象但不是同一个引用。SomeClass
new
new SomeClass()
SomeClass
foo
SomeClass
o
o
foo
对象不是类的引用,而是类的实例。
正如其他人所说,一个类就像一个蓝图。当您基于类创建对象时,计算机通过分配内存来“构建”一个对象,以基于您的类创建“部分”(变量)。
因此,该对象不是对类的引用,这意味着该对象只是将您重定向到该类。
对象是类的一个实例。
不,这不是一个有效的陈述。一个对象是一个类的实例,而不是一个类的引用。当你有类似的东西时:
MyClass var = new MyClass();
然后var
是对MyClass
分配给它的实例的引用 ( new MyClass()
)。这个实例又是一个对象。
对象是类实例或数组。
引用值(通常只是引用)是指向这些对象的指针,以及一个特殊的空引用,它不引用任何对象。
Object foo = new Object();
foo
是对类的特定具体实例的引用,Object
而不是对类本身的引用。
Class bar = Object.class;
bar
是对Object
类的引用。
对象实际上是类的一个实例。假设我们有 String 类。String 类型的对象是String 类的实例,而不是该类本身。给定String s="foo"
,s
的值将是对 String 类实例的引用。
现在,每个类都有一个java.lang.Class
与之关联的对象,String.class
对 java.lang.Class 实例的引用也是如此。
来自 JLS:
对象是类实例或数组。
引用值(通常只是引用)是指向这些对象的指针,以及一个特殊的空引用,它不引用任何对象。
不,这就像说你今天早上吃的炒鸡蛋是对炒鸡蛋的抽象概念的引用。
请记住,aclass
是一个蓝图,但它本身并不是一个实际的具体对象。只有当您通过new
关键字实例化对象时才会发生这种情况。