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

Aru*_*run 9 java

根据标准的book构造函数是一种特殊类型的函数,用于初始化对象.构造函数被定义为函数,而类函数内部只能有两种类型的静态或非静态.我怀疑构造函数是什么?

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
Run Code Online (Sandbox Code Playgroud)

我怀疑的是,如果构造函数是静态方法,那么我们如何经常使用这个内部构造函数

Test(){
    System.out.println(this);
}
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*icz 12

你的第二个例子击中了现场.this引用在构造函数中可用,这意味着构造函数是针对某个对象(当前正在创建的对象)执行的.

原则上,当您创建一个新对象(通过使用new运算符)时,JVM将为其分配一些内存,然后在该新创建的对象上调用构造函数.此外,JVM确保在构造函数之前没有调用其他方法(这就是它的特殊之处).

实际上,在机器级别上,构造函数是一个具有一个特殊隐式this参数的函数.此特殊参数(由运行时传递)使对象和静态方法之间存在差异.换一种说法:

foo.bar(42);
Run Code Online (Sandbox Code Playgroud)

被翻译成:

bar(foo, 42);
Run Code Online (Sandbox Code Playgroud)

其中第一个参数的名称this.另一方面,static方法被称为原样:

Foo.bar(42);
Run Code Online (Sandbox Code Playgroud)

翻译为:

bar(42);
Run Code Online (Sandbox Code Playgroud)

Foo 这里只是源代码中几乎没有的命名空间.