这个一直是我一个没弄懂的问题
什么是是JAVA构造函数每创建一个类的实例都去初始化它的所有变量是乏味的。如果一个对象在被创建时就完成了所有的初始工作,将是简单的和简洁的。因此,Java在类里提供了一个特殊的成员函数,叫做构造函数(Constructor)。一个构造函数是对象被创建时初始对象的成员函数。它具有和它所在的类完全一样的名字。一旦定义好一个构造函数,创建对象时就会自动调用它。构造函数没有返回类型,即使是void类型也没有。这是因为一个类的构造函数的返回值的类型就是这个类本身。构造函数的任务是初始化一个对象的内部状态,所以用new操作符创建一个实例后,立刻就会得到一个清楚、可用的对象。
构造方法是一种特殊的方法,具有以下特点。
(1)构造方法的方法名必须与类名相同。
(2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
(4)构造方法不能由编程人员调用,而要系统调用。
(5)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。
(6)构造方法可以重载,以参数的个数,类型,或排列顺序区分。
java构造函数的执行过程
类初始化时构造函数调用顺序:
(1)初始化对象的存储空间为零或null值;
(2)调用父类构造函数;
(3)按顺序分别调用类成员变量和实例成员变量的初始化表达式;
Rmb r=new Rmb();
public Dollar(){
System.out.println("Dollar is construct!");
}
public static void main(String[] args){
new Dollar();
}
}
classMoney{
public Money(){
System.out.println("Money isconstruct");
}
}
class Rmb{
public Rmb(){
System.out.println("RMB isconstruct");
}
}
输出结果:
Money is construct
RMB is construct
Dollar is construct!
JAVA 与C#构造函数执行顺序的不同之处
public static voidmain(String[] args){
Child child = new Child();
}
}
class Parent
{
Parent()
{
System.out.println("to construct Parent.");
}
}
class Child extends Parent
{
Child()
{
System.out.println("to construct Child.");
}
Delegatee delegatee = newDelegatee();
}
class Delegatee
{
Delegatee()
{
System.out.println("to construct Delegatee.");
namespace ConsoleApplication1
{
public class Test
{
public static voidMain(String[] args)
{
Child child =new Child();
}
}
class Parent
{
public Parent()
{
Console.WriteLine("toconstruct parent");
}
}
class{
public Child()
{
Console.WriteLine("toconstruct Child.");
}
Del egatee delegatee = newDelegatee();
}
class Delegatee
{
public Delegatee()
{
Console.WriteLine("toconstruct Delegatee.");
}
}
}
结果是
to construct Delegatee.
to construct Child.
to construct Parent.
总结:
被依赖的先构造,依赖于人的后构造。JAVA 是跨层依赖优先于同层依
赖构造,而C#是同层依赖优先于跨层依赖.