2012-10-17 87 views
7

按标准书构造器,其用于初始化objects.As构造的功能的特殊类型被定义为一个功能和类函数内只能有两点式静态或者非static.My怀疑是构造函数是什么?构造是静态或非静态

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); 
} 

使用这会给测试@ 12aw212意味着这必须是不static..Kindly阐述

+0

不完全确定你在问什么,但构造函数在java中不是静态的(尽管存在静态块)。构造函数设置初始使用的对象,并在实例化时调用。 – Ben

+2

从什么时候构造函数是静态的? –

+0

什么“标准书”?所有[JLS](http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.8)都表示“在所有其他方面(除名称外) ,构造函数声明*看起来就像*一个没有结果类型的方法声明“(我强调)。如果你的书有不同的说法,那么定义是错误的。没有什么说'构造函数是一种特殊类型的函数',所以静态/非静态问题甚至不会出现。这不是一个真正的问题。 – EJP

回答

12

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

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

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

foo.bar(42); 

被翻译成:

bar(foo, 42); 

,其中第一个参数被命名为this。在另一方面static方法被称为-是:

Foo.bar(42); 

翻译为:

bar(42); 

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

+0

我明白了你的意思,但是你可以详细说明它的意思,我们可以说构造函数是非静态的,它是一个特殊的特殊处理 – Arun

+0

@Arun:构造函数是普通的方法,除非:(1)它们不是虚拟的(它没有多少意义)(2)JVM在new操作符后自动调用它们;(3)在构造函数 –

+0

之前不能调用任何方法。谢谢你。 – Arun

0

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

0

构造函数不是静态的功能。当你做Test test =new Test();Test对象被创建,然后调用构造函数是对象(我的意思是this指向新创建的对象)上。

0

这里的new关键字的伎俩。一般来说,如果您在没有对象的情况下调用它,则说明方法是静态的。然而,在这种特殊情况下(即在new关键字之前)编译器知道调用构造函数。

0

new操作者返回到它创建的对象的引用。

new Test(); // creates an instance. 

System.out.println(this);new操作者已经实例化的对象

-1

既不之后被调用。

方法可以分为2种类型:静态/非静态方法,又称类/实例方法。

但构造函数不是方法。

0

Static: 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. 它被称为没有对象。
+0

解释得很好,谢谢! –

-3

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