您的位置:首页 > 其它

其五 关于构造器

2015-06-30 10:13 246 查看
曾经在写C#项目反编译程序集的时候会发现,类下面会发现一个与类名同名的函数,此函数不仅无函数,还没有函数实体。而且在印象中自己并没有定义过此函数。后来才知道,这是构造器,是编译器自动添加上去的。

public class Jsstr
{
// Methods
public Jsstr();  //构造器
public static string alert(string strMsg);
public static string alertandrd(string strMsg, string url);
}


C++引用了构造器(constructor)的概念,Java在此基础上添加的"垃圾回收器".构造器是一种方法,是在“创建对象时自动"调用的特殊方法,完成为对象分配存储空间,并调用相应的构造器等初始化工作。

构造器必须与类名相同,不带任何参数的构造器叫默认构造器。通常在没有声明构造器的情况下,编译器会自动生成默认构造器,此默认构造器中不包含任何方法,形如Constructor(){}。实例化对象时调用此默认构造器,一旦重载构造器,实例化对象时则应调用重载构造器。

public class Constructor {

Constructor(int i){
System.out.println("Constructor"+(i));
}

public static void main(String[] args) {
//!new Constructor();  //构造器已经重写,无法再调用默认构造器
new Constructor(1);
}
}
/*output:
Constructor1
*///:~

构造器的初始化

数据的自动初始化发生在任何方法(包括构造器)被调用之前。在类的内部,变量定义的先后顺序决定了初始化的顺序。static关键字声明的变量只能作用于域,而不能是局部变量。对于静态数据的初始化,是先初始化静态对象,而后是非静态对象。即在类内部静态对象初始化优先级高于非静态对象。

public class StaticInitlization{
public static void main(String[] args{
System.out.print("In Main"); //3
}
static Table table=new Table();   //1
static Cupboard cupboard=new Cupboard();  //2    初始化顺序为  1、2、3
}
即便构造器并没有显示使用static声明,但构造器也可以看作是静态方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: