一尘不染

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

java

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

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意味着构造函数是非静态的?


阅读 395

收藏
2020-12-03

共1个答案

一尘不染

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

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

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

foo.bar(42);

转换为:

bar(foo, 42);

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

Foo.bar(42);

转换为:

bar(42);

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

2020-12-03