当前位置: 首页 > 面试题库 >

类的对象作为类内的实例变量

吴松
2023-03-14
问题内容

代码:

public class Test2{
    private Test2 subject = new Test2(); //Create Test2 object in Test2
    private int num;
}

问题:

  1. 为什么Java允许执行以上代码,而C ++不允许执行?

  2. 上面的代码是否创建了无数个对象?由于Test2本身包含一个Test2对象,而该对象又包含一个Test2本身具有Test2对象的对象,依此类推。


问题答案:

两种语言之间关于您的问题的主要区别是Java是具有引用语义的语言(原始类型除外),而C ++是具有值语义的语言,该值允许通过引用和指针进行引用语义。

在两种语言中看起来 相似的 语法具有完全不同的含义,在Java中创建 引用Test2 x = new Test2();)时,C
++中的等效构造将使用指针(Test2 *x = new Test2();)。

一个关键的区别是,通过使用指针在值语义之上提供引用语义很简单,但是在(纯)引用语义之上提供值语义是不可能的。该语句的某些含义包括无法控制Java在内存中的对象的布局或数据的位置(对于原始类型和原始类型数组以外的任何对象),而在另一方面,则可以更好地控制对象在C++中,您可以模仿Java对象。



 类似资料:
  • 问题内容: 我对Python 3中的和类有些困惑。也许有人可以消除我的困惑或提供一些其他信息。 我目前的理解是,每个类(除外)都从称为的基类继承。但是每个类(包括)也是该类的一个实例,它是自身的实例,并且也从继承。 我的问题是: 是否有一个原因/设计决策,为什么是的实例并从中继承?对象的/ class是否也可以是对象本身? 类()如何成为其自身的实例? 哪一个是真正的基类或? 我一直认为这将是最“

  • 问题内容: 为什么对象类是Java中的超类? 问题答案: 这是一个好问题。Java选择使单个类成为所有内容的最终父类,以便有一种简单的方法来传递任意对象,而无需知道其类型(即,您可以使用Object的声明类型来引用每个单个项目在类型系统中,甚至使用其包装器类的基本体也是如此。但是,存在诸如C ++之类的OOP语言,没有像Java中那样的通用基类。拥有通用基类的另一个好处是,对于超类,处理超类的逻辑

  • 问题内容: 有没有办法从Java通用类的类型变量中获取Class对象?像这样: 此类型信息在编译时可用,因此不受类型擦除的影响,因此,从理论上讲,应该有一种方法来实现此目的。是否存在? 问题答案: 这有效:

  • 问题内容: 我有一个带有变量StudentID的班级Student: 我希望变量StudentID继续分配给每个Student创建的新ID号。每个ID号都应比上一个创建的ID号大一个,并且应等于已创建的对象总数。现在,每个对象的ID号为1。 问题答案: 将studentID设为静态成员 静态成员将在整个类的每个实例中保留,无论有多少个clas实例。

  • 我有一个抽象类及其具体子类,当我创建子类的对象时,它会自动调用超级构造函数。JVM是否在内部创建抽象类的对象? 那么在JVM中没有对象的情况下构造函数是如何存在的??(对于抽象类) 同样,构造函数在创建对象之后执行,然后不创建抽象类的对象,默认构造函数是如何执行的??(这在Java文档中有所提及)

  • 下面是我收到错误的代码(在“new”之后的第二个“Killer”处)。 这给我带来了不少麻烦,因为我看不出为什么基于Killer的构造函数,这个声明应该有效。 这是杀手班: 我知道这可能有一个简单的解决方案,但到目前为止,我还没有看到。