根据标准书构造函数是一种特殊类型的函数,用于初始化对象。构造函数被定义为函数,而类函数内部只能有两种类型的静态或非静态。我怀疑构造函数是什么?
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
是否意味着构造函数是非静态的?
答案 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)
答案 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.
}
}
构造函数是静态的,因为:
答案 7 :(得分:0)
构造函数在创建对象时既不是静态的(使用类名调用)也不是静态的。
答案 8 :(得分:-1)
都不是。
方法可以分为两种类型:静态/非静态方法,也就是类/实例方法。
但构造函数不是方法。
答案 9 :(得分:-1)
当我们谈论静态类时,我们想到用类名来调用方法,但是在构造函数的情况下,构造函数是在创建对象时初始化的,因此这被证明是非静态的。
答案 10 :(得分:-3)
构造函数用于初始化对象并具有非静态方法的行为,因为非静态方法属于对象,因此构造函数也是由JVM调用以使用对象的引用初始化对象,由新运营商