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

构造函数是静态的还是非静态的

步兴为
2023-03-14
问题内容

按照标准书,构造函数是用于初始化对象的一种特殊类型的函数。由于构造函数被定义为一个函数,并且内部类函数只能具有两种类型的静态或非静态类型。我怀疑是什么构造函数?

1.)As constructor is called without object so it must be static

  Test test =new  Test();//Test() is being called without object
   so must be static

我的疑问是如果构造函数是静态方法,那么我们如何在构造函数内部频繁使用此方法

Test(){
    System.out.println(this);
}

输出是否Test@12aw212意味着构造函数是非静态的?


问题答案:

您的第二个例子很重要。this引用在构造函数中可用,这意味着构造函数是针对某个对象(当前正在创建的对象)执行的。

原则上,当您创建新对象时(使用new运算符),JVM将为其分配一些内存,然后在该新创建的对象上调用构造函数。JVM还确保在构造函数之前不会调用其他任何方法(这使得它变得特别)。

实际上,在机器级别,构造函数是具有一个特殊的隐式this参数的函数。该特殊参数(运行时传递)使对象方法和静态方法有所不同。换一种说法:

foo.bar(42);

转换为:

bar(foo, 42);

第一个参数命名为this。另一方面,static方法按原样称为:

Foo.bar(42);

转换为:

bar(42);

Foo 这只是源代码中几乎不存在的名称空间。



 类似资料:
  • 本文向大家介绍C#静态构造函数?相关面试题,主要包含被问及C#静态构造函数?时的应答技巧和注意事项,需要的朋友参考一下 最先被执行的构造函数,且在一个类里只允许有一个无参的静态构造函数 执行顺序:静态变量>静态构造函数>实例变量>实例构造函数  

  • 问题内容: Python中是否有诸如静态构造函数之类的东西? 如何在Python中实现静态构造函数? 这是我的代码…当我这样调用App时不会触发。该不是静态构造函数或静态初始化。 我必须这样称呼它,它每次都会实例化App类: 这是我的课: 每次调用的问题是重新创建了App对象。我的“真实” App类很长。 问题答案: 提示:任何引用都将需要实例化该类。您可以这样做: 但是,来吧,这似乎有很多不足。

  • 问题内容: 我有一个枚举类型类: 如您在上面看到的,我定义了一种具有value的类型。它包含一个特定于常数的主体。在其主体中,我尝试调用 ,但出现编译错误: 无法静态引用非静态方法printMe()。 为什么会出现此错误?我的意思是我在体内重写了一种抽象方法。为什么在范围内?如何摆脱它? 我知道在上添加关键字可以解决问题,但是我想知道是否还有其他方法可以保持非静态状态吗? 另一个问题,与上面的问题

  • 问题内容: Android示例中的“登录”实现为非静态内部类。但是,根据Commonsguys的观点,此类应该是静态的,并且使用对外部活动的弱引用参见this。 那么正确的实现方式是什么?静态还是非静态? Commonsguy实现 https://github.com/commonsguy/cw- android/tree/master/Rotation/RotationAsync/ 从Googl

  • 问题内容: 直到几周前,我还以为我知道何时创建字段和方法或。例如,当一个字段(例如另一个类的对象)对于该类的任意数量的对象是唯一的时,应将其设置为。 但是几周后,我读到了有关JVM垃圾收集的信息。 我知道字段永远不会被垃圾收集,并且始终保持在内存中,除非类加载器本身是垃圾收集的。 但是,如果我不创建该字段,至少它将被垃圾回收。 因此,在使字段/方法静态化与否之间似乎有一条 很细的界限 。 有人可以