ant*_*nis 147 java constructor default-constructor
究竟什么是默认构造函数 - 你能告诉我以下哪一个是默认构造函数,以及它与其他构造函数的区别是什么?
public Module() {
this.name = "";
this.credits = 0;
this.hours = 0;
}
public Module(String name, int credits, int hours) {
this.name = name;
this.credits = credits;
this.hours = hours;
}
Run Code Online (Sandbox Code Playgroud)
Sto*_*ica 239
他们都不是.如果您定义它,它不是默认值.
除非您定义另一个构造函数,否则默认构造函数是自动生成的无参数构造函数.任何未初始化的字段都将设置为其默认值.对于您的示例,它看起来像假设类型是String,int和int,并且类本身是公共的:
public Module()
{
super();
this.name = null;
this.credits = 0;
this.hours = 0;
}
Run Code Online (Sandbox Code Playgroud)
这完全一样
public Module()
{}
Run Code Online (Sandbox Code Playgroud)
和根本没有构造函数完全相同.但是,如果定义至少一个构造函数,则不会生成默认构造函数.
参考:Java语言规范
如果类不包含构造函数声明,则隐式声明没有形式参数且没有throws子句的默认构造函数.
从技术上讲,默认初始化字段不是构造函数(默认或其他).但是,我留下答案是因为
Jim*_*Jim 33
如果未在类中定义任何构造函数,则会创建默认构造函数.它只是一个没有参数的构造函数.编辑:除了调用super()
public Module(){
}
Run Code Online (Sandbox Code Playgroud)
小智 19
如果您没有在类中明确定义至少一个构造函数,则编译器会自动生成默认构造函数.你已经定义了两个,所以你的类没有默认的构造函数.
每Java语言规范第三版:
8.8.9默认构造函数
如果类不包含构造函数声明,则会自动提供不带参数的默认构造函数...
小智 7
Java提供了一个默认构造函数,它不带任何参数,并且在没有提供显式构造函数时不执行特殊操作或初始化.
隐式默认构造函数采取的唯一操作是使用super()调用来调用超类构造函数.构造函数参数为您提供了一种为对象初始化提供参数的方法.
下面是包含2个构造函数的多维数据集类的示例.(一个默认构造函数和一个参数化构造函数).
public class Cube1 {
int length;
int breadth;
int height;
public int getVolume() {
return (length * breadth * height);
}
Cube1() {
length = 10;
breadth = 10;
height = 10;
}
Cube1(int l, int b, int h) {
length = l;
breadth = b;
height = h;
}
public static void main(String[] args) {
Cube1 cubeObj1, cubeObj2;
cubeObj1 = new Cube1();
cubeObj2 = new Cube1(10, 20, 30);
System.out.println("Volume of Cube1 is : " + cubeObj1.getVolume());
System.out.println("Volume of Cube1 is : " + cubeObj2.getVolume());
}
}
Run Code Online (Sandbox Code Playgroud)
一般术语是,如果您不在对象中提供任何构造函数,则会自动放置一个名为default constructor的无参数构造函数.
如果你确实定义了一个与放置的构造函数相同的构造函数,如果你不提供它,它通常被称为无参数构造函数.虽然有些程序员喜欢将此显式定义的无参数构造函数称为默认构造函数,但这是一个约定.但是,如果我们通过命名,如果我们明确定义一个,而不是它默认.
按照文档
如果类不包含构造函数声明,则隐式声明没有形式参数且没有throws子句的默认构造函数.
例
public class Dog
{
}
Run Code Online (Sandbox Code Playgroud)
将自动修改(通过添加默认构造函数),如下所示
public class Dog{
public Dog() {
}
}
Run Code Online (Sandbox Code Playgroud)
当你创建它的对象时
Dog myDog = new Dog();
Run Code Online (Sandbox Code Playgroud)
调用此默认构造函数.
默认构造函数是指在没有任何程序员定义的构造函数的情况下由编译器自动生成的构造函数。
如果程序员没有提供构造函数,编译器会隐式声明一个默认构造函数,该构造函数调用super(), ,没有 throws 子句,也没有形式参数。
例如
class Klass {
// Default Constructor gets generated
}
new Klass(); // Correct
-------------------------------------
class KlassParameterized {
KlassParameterized ( String str ) { //// Parameterized Constructor
// do Something
}
}
new KlassParameterized(); //// Wrong - you need to explicitly provide no-arg constructor. The compiler now never declares default one.
--------------------------------
class KlassCorrected {
KlassCorrected (){ // No-arg Constructor
/// Safe to Invoke
}
KlassCorrected ( String str ) { //// Parameterized Constructor
// do Something
}
}
new KlassCorrected(); /// RIGHT -- you can instantiate
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
366431 次 |
| 最近记录: |