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

时间:2012-10-17 17:57:44

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

11 个答案:

答案 0 :(得分:12)

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

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

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

foo.bar(42);

被翻译为:

bar(foo, 42);

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

Foo.bar(42);

转换为:

bar(42);

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这里的new关键字就是诀窍。你是正确的,注意到一般来说,如果你在没有对象的情况下调用它,方法就是静态的。但是在这种特殊情况下(即前面有new关键字),编译器知道调用构造函数。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

new Test(); // creates an instance.

System.out.println(this);运算符实例化对象

之后调用new

答案 6 :(得分:0)

静态:     Temp t = new Temp();

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

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. 无对象调用。

答案 7 :(得分:0)

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

答案 8 :(得分:-1)

都不是。

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

但构造函数不是方法。

答案 9 :(得分:-1)

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

答案 10 :(得分:-3)

构造函数用于初始化对象并具有非静态方法的行为,因为非静态方法属于对象,因此构造函数也是由JVM调用以使用对象的引用初始化对象,由新运营商