默认java构造函数
由于我是java新手,我想知道, 1.当我创建一个空类时,定义了多少默认构造函数?默认java构造函数,java,class,constructor,Java,Class,Constructor,由于我是java新手,我想知道, 1.当我创建一个空类时,定义了多少默认构造函数? 2.是否需要定义复制构造函数,或者它是在C++中自动定义的?< p>如果不做任何构造函数,编译器只会添加一个默认构造函数。它是非参数化构造函数 class SomeClass{ public SomeClass() // all this is implicitly added if you don't specify anything. { super(); } } 从: 编译器自动为任何类提供无参数的默
2.是否需要定义复制构造函数,或者它是在C++中自动定义的?< p>如果不做任何构造函数,编译器只会添加一个默认构造函数。它是非参数化构造函数
class SomeClass{
public SomeClass() // all this is implicitly added if you don't specify anything.
{
super();
}
}
从:
编译器自动为任何类提供无参数的默认构造函数
没有构造函数。此默认构造函数将调用的无参数构造函数
超类。在这种情况下,如果超类不存在,编译器将发出抱怨
有一个无参数构造函数,所以必须验证它是否有。如果你的班级没有
显式超类,然后它有一个对象的隐式超类,它确实有一个
没有参数构造函数
class SomeClass{
public SomeClass() // all this is implicitly added if you don't specify anything.
{
super();
}
}
在Java中,没有复制构造函数。如果显式定义一个构造函数,则这是另一个问题,但编译器永远不会在Java中自动定义这样的东西。只有一个默认构造函数,只有在声明类没有构造函数时才定义。否则,声明的构造函数将是唯一的构造函数。如果不包含构造函数,编译器将插入与
public ClassName() {
super();
}
此外,如果您确实为一个类声明构造函数,并且没有显式定义该超类的构造函数调用,编译器将插入一个与该超类匹配的参数调用
public ClassName extends SuperClassName {
public ClassName(String item, List stuff) {
// no explicit super class constructor called
...
}
}
在编译器中转换为
public ClassName extends SuperClassName {
public ClassName(String item, List stuff) {
// explicit super class constructor call to SuperClassName(item, stuff);
super(item, stuff);
...
}
}
要定义复制构造函数,没有特殊语法,基本上是定义一个以类的另一个实例为参数的构造函数
public ClassName(ClassName other) {
field = other.field;
field2 = other.field2;
field3 = new ArrayList(other.field3);
...
}
没有默认的复制构造函数,实际上没有复制构造函数,只有一个构造函数。如果您决定创建一个或多个似乎是复制对象的对象,那么就这样吧
Java需要较少类型的项的原因在某种程度上与不重载基本运算符有关。如果您没有对=
赋予更多含义,那么您就不需要那么多类型的构造函数来支持不同的对象分配方法
之所以可以如此简单地使用=
,原因之一是Java只传递引用,这有点像指针;但是,它们是强类型的,您不能进行任何指针计算,也不能访问偏移量。因此,它们只适用于赋值和引用传递,这可以防止大多数指针问题
1。创建空类时定义了多少默认构造函数?
一类,如
class MyClass {
}
有一个默认(空)构造函数,其行为类似
...
public MyClass() {
}
...
2。是否需要定义复制构造函数,还是在C++中自动定义?<强> < /p>
Java中没有内置复制构造函数的概念,这有一个根本原因:
在Java中,变量永远不能包含对象(它只能包含对对象的引用)。因此,在执行foo(obj)
时,不需要复制obj
引用的对象
要创建对象的副本,通常需要创建一个构造函数,例如
...
public MyClass(MyClass objToCopy) {
this.field1 = objToCopy.field1;
...
this.fieldN = objToCopy.fieldN;
}
...
或者您依赖于clone()
机制
相关问题:
public ClassName(){super();}
但是如果你自己在类中编写构造函数。。。就像你在课堂上自己写的一样。。从技术上讲,此构造函数不会被称为默认构造函数
我希望你明白了 如果未指定构造函数,则会自动定义一个空构造函数。 只要指定一个或多个构造函数,就只定义这些构造函数
Java中没有复制构造函数,但每个类都是从Object扩展而来的,Object是一个clone()方法 默认构造函数实际上包含一个
super()代码>,不是吗?我会说第二部分“如果你想要一个复制构造函数,你必须自己编写”。@brimborium,对。它隐式地存在于构造函数中,比如public MyClass(){}
。根据JLS,默认构造函数确实包含一个super()代码>。还值得注意的是,如果至少提供了一个构造函数,则不会生成默认构造函数。@aioobe哦,真的吗?但只针对无参数构造函数?请每个问题问一个问题。