其五 关于构造器
2015-06-30 10:13
246 查看
曾经在写C#项目反编译程序集的时候会发现,类下面会发现一个与类名同名的函数,此函数不仅无函数,还没有函数实体。而且在印象中自己并没有定义过此函数。后来才知道,这是构造器,是编译器自动添加上去的。
C++引用了构造器(constructor)的概念,Java在此基础上添加的"垃圾回收器".构造器是一种方法,是在“创建对象时自动"调用的特殊方法,完成为对象分配存储空间,并调用相应的构造器等初始化工作。
构造器必须与类名相同,不带任何参数的构造器叫默认构造器。通常在没有声明构造器的情况下,编译器会自动生成默认构造器,此默认构造器中不包含任何方法,形如Constructor(){}。实例化对象时调用此默认构造器,一旦重载构造器,实例化对象时则应调用重载构造器。
构造器的初始化
数据的自动初始化发生在任何方法(包括构造器)被调用之前。在类的内部,变量定义的先后顺序决定了初始化的顺序。static关键字声明的变量只能作用于域,而不能是局部变量。对于静态数据的初始化,是先初始化静态对象,而后是非静态对象。即在类内部静态对象初始化优先级高于非静态对象。
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声明,但构造器也可以看作是静态方法。
相关文章推荐
- 钥匙串(Keychain)服务编程指南-iOS部分
- C++ Custom Control控件向父窗体发送对应的消息
- Linux中断(interrupt)子系统之二:arch相关的硬件封装层
- android 适配器的使用
- Java实现读取文件夹下(包括子目录)所有文件的文件名
- UNIX环境高级编程(第15章 进程间通信)
- SQLServer获取随机数据
- iOS 得到系统的IP地址
- php生成CSV文件
- THUSC2015
- 编写一个学生和教师数据输入和显示程序,学生数据有编号,姓名,班号,和成绩,教师数据有编号,姓名,职称和部门。要求将编号,姓名输入显示设计成一个类person,并作为学生数据类t和教师数据操作类的基类
- 华为荣耀3c root 与 还原
- FTP服务器的搭建
- VC工程的cuda配置
- 完整的Android源码截屏事件的捕获--5.0
- boost::flat_map性能测试
- php mod_rewrite.so
- IBM MobileFirst Platform的前世今生(一):前世Worklight
- Cordys API文档浏览记 001
- angular学习