12

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

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

4

11 回答 11

13

你的第二个例子恰到好处。this引用在构造函数中可用,这意味着构造函数是针对某个对象执行的 - 当前正在创建的对象。

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

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

foo.bar(42);

被翻译成:

bar(foo, 42);

其中第一个参数名为this。另一方面,static方法按原样调用:

Foo.bar(42);

翻译为:

bar(42);

Foo这里只是一个几乎不存在于源代码中的命名空间。

于 2012-10-17T17:59:18.497 回答
0

构造函数是非静态的。每个方法的第一个参数都是隐式的this(静态除外),构造函数就是其中之一。

于 2012-10-17T18:00:03.837 回答
0

构造函数不是静态函数。当您创建Test test =new Test();一个新Test对象时,然后在该对象上调用构造函数(我的意思是this指向新创建的对象)。

于 2012-10-17T18:00:13.257 回答
0

这里的new关键词是诀窍。您正确地注意到,一般来说,如果您在没有对象的情况下调用它,则方法是静态的。然而,在这种特殊情况下(即,以new关键字开头)编译器知道调用构造函数。

于 2012-10-17T18:00:31.740 回答
0

new运算符返回对其创建的对象的引用。

new Test(); // creates an instance.

在操作员实例化对象System.out.println(this);后调用new

于 2012-10-17T18:03:48.027 回答
-1

两者都不。

方法可以分为两种类型:静态/非静态方法,也就是类/实例方法。

但是构造函数不是方法。

于 2012-10-17T19:00:56.830 回答
-1

不是静态的。阅读构造函数http://www.javaworld.com/jw-10-2000/jw-1013-constructors.html

于 2012-10-17T18:01:41.603 回答
-1

构造函数既不是静态的(使用类名调用)也不是在创建对象时执行的非静态的。

于 2020-01-03T10:48:16.053 回答
-1

当我们谈论静态类时,我们会想到用类名调用方法,但是在构造函数的情况下,构造函数在创建对象时被初始化所以这证明是非静态的。

于 2019-09-20T10:35:58.433 回答
-2

静态:Temp t= new Temp();

运算符在堆区域中创建内存并将其隐式new传递给构造函数。然后它初始化一个在调用局部参数变量Temp(this)的类中定义的非静态实例变量。thisthis

class Temp{
    int a;
    Temp this; //inserted by compiler.
    Temp(Temp this){ //passed by compiler
        this.this=this; // initialise this instance variable here. 
        this.a=10;//when we write only a=10; and all the non-static member access by this implicitly.
        return this; // so that we can't return any value from constructor.
    }
}

构造函数是静态的,因为:

  1. 它有助于创建对象。
  2. 它被称为没有对象。
于 2013-09-17T19:16:26.633 回答
-3

构造函数用于初始化对象,具有非静态方法的行为,因为非静态方法属于对象,所以构造函数也是JVM调用的对象的引用初始化对象,由new操作符创建

于 2014-06-22T12:37:08.350 回答