要学习Java,你必须理解构造器。因为构造器可以提供许多特殊的方法,这个对于初学者经常混淆。但是,构造器和方法又有很多重要的区别。
我们说构造器是一种方法,就象讲澳大利亚的鸭嘴兽是一种哺育动物。(按:老外喜欢打比喻,我也就照着翻译)。要理解鸭嘴兽,那么先必须理解它和其他哺育动物的区别。同样地,要理解构造器,那么就要了解构造器和方法的区别。所有学习java的人,尤其是对那些要认证考试的,理解构造器是非常重要的。下面将简单介绍一下 ,最后用一个表作了些简单的总结。
功能和作用的不同
构造器是为了创建一个类的实例。这个过程也可以在创建一个对象的时候用到:Platypus p1 = new Platypus();
相反,方法的作用是为了执行java代码。
修饰符,返回值和命名的不同
构造器和方法在下面三个方便的区别:修饰符,返回值,命名。和方法一样,构造器可以有任何访问的修饰: public, protected, private或者没有修饰(通常被package 和 friendly调用). 不同于方法的是,构造器不能有以下非访问性质的修饰: abstract, final, native, static, 或者 synchronized。
返回类型也是非常重要的。方法能返回任何类型的值或者无返回值(void),构造器没有返回值,也不需要void。
最后,谈谈两者的命名。构造器使用和类相同的名字,而方法则不同。按照习惯,方法通常用小写字母开始,而构造器通常用大写字母开始。构造器通常是一个名词,因为它和类名相同;而方法通常更接近动词,因为它说明一个操作。
"this"的用法
构造器和方法使用关键字this有很大的区别。方法引用this指向正在执行方法的类的实例。静态方法不能使用this关键字,因为静态方法不属于类的实例,所以this也就没有什么东西去指向。构造器的this指向同一个类中,不同参数列表的另外一个构造器,我们看看下面的代码:
public class Platypus {
String name;
Platypus(String input) {
name = input;
}
Platypus() {
this("John/Mary Doe");
}
public static void main(String args[]) {
Platypus p1 = new Platypus("digger");
Platypus p2 = new Platypus();
}
}
在上面的代码中,有2个不同参数列表的构造器。第一个构造器,给类的成员name赋值,第二个构造器,调用第一个构造器,给成员变量name一个初始值 "John/Mary Doe".
在构造器中,如果要使用关键字this,那么,必须放在第一行,如果不这样,将导致一个编译错误。
"super"的用法
构造器和方法,都用关键字super指向超类,但是用的方法不一样。方法用这个关键字去执行被重载的超类中的方法。看下面的例子:
class Mammal {
void getBirthInfo() {
System.out.println("born alive.");
}
}
class Platypus extends Mammal {
void getBirthInfo() {
System.out.println("hatch from eggs");
System.out.print("a mammal normally is ");
super.getBirthInfo();
}
}
在上面的例子中,使用super.getBirthInfo()去调用超类Mammal中被重载的方法。
构造器使用super去调用超类中的构造器。而且这行代码必须放在第一行,否则编译将出错。看下面的例子:
public class SuperClassDemo {
SuperClassDemo() {}
}
class Child extends SuperClassDemo {
Child() {
super();
}
}
在上面这个没有什么实际意义的例子中,构造器 Child()包含了 super,它的作用就是将超类中的构造器SuperClassDemo实例化,并加到 Child类中。
编译器自动加入代码
编译器自动加入代码到构造器,对于这个,java程序员新手可能比较混淆。当我们写一个没有构造器的类,编译的时候,编译器会自动加上一个不带参数的构造器,例如:public class Example {}
编译后将如下代码:
public class Example {
Example() {}
}
在构造器的第一行,没有使用super,那么编译器也会自动加上,例如:
public class TestConstructors {
TestConstructors() {}
}
编译器会加上代码,如下:
public class TestConstructors {
TestConstructors() {
super;
}
}
仔细想一下,就知道下面的代码
public class Example {}
经过会被编译器加代码形如:
public class Example {
Example() {
super;
}
}
继承
构造器是不能被继承的。子类可以继承超类的任何方法。看看下面的代码:
public class Example {
public void sayHi {
system.out.println("Hi");
}
Example() {}
}
public class SubClass extends Example {
}
类 SubClass 自动继承了父类中的sayHi方法,但是,父类中的构造器 Example()却不能被继承。
总结
主题
构造器
方法
功能
建立一个类的实例
java功能语句
修饰
不能用bstract, final, native, static, or synchronized
能
返回类型
没有返回值,没有void
有返回值,或者void
命名
和类名相同;通常为名词,大写开头
通常代表一个动词的意思,小写开头
this
指向同一个类中另外一个构造器,在第一行
指向当前类的一个实例,不能用于静态方法
super
调用父类的构造器,在第一行
调用父类中一个重载的方法
继承
构造器不能被继承
方法可以被继承
编译器自动加入一个缺省的构造器
自动加入(如果没有)
不支持
编译器自动加入一个缺省的调用到超类的构造器
自动加入(如果没有)
不支持
|
| | 评论人:looline | 发表时间: Mon Nov 27 15:11:40 CST 2006 | | 不错 |
|
| 评论人:happylinyang | 发表时间: Mon Nov 27 15:39:09 CST 2006 | | 不错,支持一下,[good] |
|
| 评论人:qqset | 发表时间: Tue Nov 28 13:38:27 CST 2006 | | ............... |
|
| 评论人:qqset | 发表时间: Tue Nov 28 13:47:36 CST 2006 | 好
|
|
| 评论人:wujng68 | 发表时间: Tue Nov 28 16:17:29 CST 2006 | | 有用 |
|
| 评论人:zhujiafei | 发表时间: Tue Nov 28 18:21:41 CST 2006 | 你分析的很好。 但是我一直不明白 继承、重载、接口的区别,你能告诉我吗? |
|
| 评论人:chenb | 发表时间: Wed Nov 29 13:25:53 CST 2006 | | 不错 |
|
| 评论人:sonyejin | 发表时间: Wed Nov 29 21:35:33 CST 2006 | | override是覆写,不是重载,翻译错了 |
|
| 评论人:mrou2001 | 发表时间: Wed Dec 06 22:04:43 CST 2006 | | 不错的文章[java] |
|
| 评论人:hdh_1196 | 发表时间: Thu Dec 14 10:19:23 CST 2006 | | 跟c中的有什么区别呢? |
|
| 评论人:suihu | 发表时间: Wed Feb 07 15:58:57 CST 2007 | iew,Zoom In,Ctrl+=,在窗口中 View,Zoom Out,Ctrl+-,在窗口中 帮助,关闭用户帮助托盘,Ctrl+F4,在对话框中 帮助,关闭用户帮助托盘,Ctrl+W,在对话框中 搜索,在工作空间中查找文本,Ctrl+Alt+G,在窗口中 搜索,工作空间中的声明,Ctrl+G,在窗口中 搜索,工作空间中的引用,Ctrl+Shift+G,在窗口中 搜索,打开“搜索”对话框,Ctrl+H,在窗口中 搜索,显示“文件中的出现位置”快速菜单,Ctrl+Shift+U,在窗口中 文件,“新建”菜单,Alt+Shift+N,在窗口中 文件,保存,Ctrl+S,在窗口中 文件,全部保存,Ctrl+Shift+S,在窗口中 文件,全部关闭,Ctrl+Shift+F4,在窗口中 文件,全部关闭,Ctrl+Shift+W,在窗口中 文件,关闭,Ctrl+F4,在窗口中 文件,关闭,Ctrl+W,在窗口中 文件,刷新,F5,在窗口中 文件,属性,Alt+Enter,在窗口中 文件,打印,Ctrl+P,在窗口中 文件,新建,Ctrl+N,在窗口中 文件,重命名,F2,在窗口中 文本编辑,Format,Ctrl+Shift+F,TapestryEditorScope 文本编辑,Jump to Java,Alt+F8,TapestryEditorScope 文本编辑,Jump to Specification,Alt+F7,TapestryEditorScope 文本编辑,Jump to Specification,Alt+F7,编辑 Java 源代码 文本编辑,Jump to Template,Alt+F6,TapestryEditorScope 文本编辑,Jump to Template,Alt+F6,编辑 Java 源代码 文本编辑,Next Attribute,Ctrl+Alt+右箭头,TapestryEditorScope 文本编辑,Next Tag,Ctrl+Alt+向下键,TapestryEditorScope 文本编辑,Open Declaration,F3,TapestryEditorScope 文本编辑,Open Structure,Ctrl+F3,TapestryEditorScope 文本编辑,Previous Attribute,Ctrl+Alt+左箭头,TapestryEditorScope 文本编辑,Previous Tag,Ctrl+Alt+向上键,TapestryEditorScope 文本编辑,Show Outline,Ctrl+O,TapestryEditorScope 文本编辑,上一个词语,Ctrl+左箭头,编辑文本 文本编辑,上滚行,Ctrl+向上键,编辑文本 文本编辑,下一个词语,Ctrl+右箭头,编辑文本 文本编辑,下滚行,Ctrl+向下键,编辑文本 文本编辑,全部展开,Ctrl+Numpad_Multiply,编辑文本 文本编辑,全部折叠,Ctrl+Shift+Numpad_Divide,编辑文本 文本编辑,切换折叠,Ctrl+Numpad_Divide,编辑文本 文本编辑,删除上一个词语,Ctrl+Backspace,编辑文本 文本编辑,删除下一个词语,Ctrl+Delete,编辑文本 文本编辑,删除至行末,Ctrl+Shift+Delete,编辑文本 文本编辑,删除行,Ctrl+D,编辑文本 文本编辑,在当前行上面插入行,Ctrl+Shift+Enter,编辑文本 文本编辑,在当前行下面插入行,Shift+Enter,编辑文本 文本编辑,复位结构,Ctrl+Shift+Numpad_Multiply,编辑文本 文本编辑,复制行,Ctrl+Alt+向下键,编辑文本 文本编辑,将行上移,Alt+向上键,编辑文本 文本编辑,将行下移,Alt+向下键,编辑文本 文本编辑,展开,Ctrl+Numpad_Add,编辑文本 文本编辑,折叠,Ctrl+Numpad_Subtract,编辑文本 文本编辑,改写切换,Insert,编辑文本 文本编辑,文本开头,Ctrl+Home,编辑文本 文本编辑,文本末尾,Ctrl+End,编辑文本 文本编辑,更改为大写,Ctrl+Shift+X,编辑文本 文本编辑,更改为小写,Ctrl+Shift+Y,编辑文本 文本编辑,行末,End,编辑文本 文本编辑,行首,Home,编辑文本 文本编辑,选择上一个词语,Ctrl+Shift+左箭头,编辑文本 文本编辑,选择下一个词语,Ctrl+Shift+右箭头,编辑文本 文本编辑,选择行末,Shift+End,编辑文本 文本编辑,选择行首,Shift+Home,编辑文本 文本编辑,重复行,Ctrl+Alt+向上键,编辑文本 查看,Java 包资源管理器,Alt+Shift+Q,P,在窗口中 查看,Java 声明,Alt+Shift+Q,D,在窗口中 查看,Java 类型层次结构,Alt+Shift+Q,T,在窗口中 查看,Javadoc,Alt+Shift+Q,J,在窗口中 查看,Spring Beans References Search,Ctrl+Shift+G,Editing in Structured Text Editors 查看,变量,Alt+Shift+Q,V,在窗口中 查看,同步,Alt+Shift+Q,Y,在窗口中 查看,备忘单,Alt+Shift+Q,H,在窗口中 查看,控制台,Alt+Shift+Q,C,在窗口中 查看,搜索,Alt+Shift+Q,S,在窗口中 查看,断点,Alt+Shift+Q,B,在窗口中 查看,显示视图 (查看: 大纲),Alt+Shift+Q,O,在窗口中 查看,显示视图,Alt+Shift+Q,Q,在窗口中 查看,显示视图 (查看: 问题),Alt+Shift+Q,X,在窗口中 浏览,%command.ShowInView.name,Alt+Shift+V,在窗口中 浏览,%command.openJavaType.name,Alt+Shift+T,在窗口中 浏览,Open Spring Bean,Alt+Shift+B,在窗口中 浏览,“显示位置”菜单,Alt+Shift+W,在窗口中 浏览,上一个编辑位置,Ctrl+Q,在窗口中 浏览,上一项,Ctrl+,,在窗口中 浏览,下一项,Ctrl+.,在窗口中 浏览,前移历史记录,Alt+右箭头,在窗口中 浏览,后退历史记录,Alt+左箭头,在窗口中 浏览,在层次结构中打开类型,Ctrl+Shift+H,在窗口中 浏览,快速大纲,Ctrl+O,编辑 Java 源代码 浏览,快速层次结构,Ctrl+T,编辑 Java 源代码 浏览,打开声明,F3,在窗口中 浏览,打开外部 Javadoc,Shift+F2,在窗口中 浏览,打开类型,Ctrl+Shift+T,在窗口中 浏览,打开类型层次结构,F4,在窗口中 浏览,打开结构,Ctrl+F3,编辑 Java 源代码 浏览,打开调用层次结构,Ctrl+Alt+H,在窗口中 浏览,打开资源,Ctrl+Shift+R,在窗口中 浏览,转至上一个成员,Ctrl+Shift+向上键,编辑 Java 源代码 浏览,转至下一个成员,Ctrl+Shift+向下键,编辑 Java 源代码 浏览,转至匹配的方括号,Ctrl+Shift+P,编辑 Java 源代码 浏览,转至行,Ctrl+L,编辑文本 源代码,切换 Ant 标记出现,Alt+Shift+O,编辑 Ant 构建文件 源代码,切换标记出现,Alt+Shift+O,编辑 Java 源代码 源代码,切换注释,Ctrl+/,编辑 Java 源代码 源代码,切换注释,Ctrl+7,编辑 Java 源代码 源代码,切换注释,Ctrl+Shift+C,编辑 Java 源代码 源代码,包围方式快速菜单,Alt+Shift+Z,在窗口中 源代码,在文件中重命名,Alt+Shift+R,编辑 Ant 构建文件 源代码,快速辅助 - 在文件中重命名,Ctrl+2,R,编辑 Java 源代码 源代码,快速辅助 - 指定给字段,Ctrl+2,F,编辑 Java 源代码 源代码,快速辅助 - 指定给局部变量,Ctrl+2,L,编辑 Java 源代码 源代码,打开外部文档,Shift+F2,编辑 Ant 构建文件 源代码,显示工具提示描述,F2,编辑 Ant 构建文件 源代码,显示源代码快速菜单,Alt+Shift+S,在窗口中 源代码,格式化,Ctrl+Shift+F,编辑 Ant 构建文件 源代码,格式化,Ctrl+Shift+F,编辑 Java 源代码 源代码,添加 Javadoc 注释,Alt+Shift+J,在窗口中 源代码,添加块注释,Ctrl+Shift+/,编辑 Java 源代码 源代码,添加导入,Ctrl+Shift+M,编辑 Java 源代码 源代码,组织导入,Ctrl+Shift+O,在窗口中 源代码,缩进行,Ctrl+I,编辑 Java 源代码 源代码,除去出现注释,Alt+Shift+U,编辑 Java 源代码 源代码,除去块注释,Ctrl+Shift+\,编辑 Java 源代码 窗口,上一个编辑器,Ctrl+Shift+F6,在窗口中 窗口,上一个视图,Ctrl+Shift+F7,在窗口中 窗口,上一个透视图,Ctrl+Shift+F8,在窗口中 窗口,下一个编辑器,Ctrl+F6,在窗口中 窗口,下一个视图,Ctrl+F7,在窗口中 窗口,下一个透视图,Ctrl+F8,在窗口中 窗口,切换至编辑器,Ctrl+Shift+E,在窗口中 窗口,将活动视图或编辑器最大化,Ctrl+M,在窗口中 窗口,快速切换编辑器,Ctrl+E,在窗口中 窗口,显示标尺上下文菜单,Ctrl+F10,编辑文本 窗口,显示系统菜单,Alt+-,在窗口中 窗口,显示视图菜单,Ctrl+F10,在窗口中 窗口,显示键辅助,Ctrl+Shift+L,在对话框和窗口中 窗口,激活编辑器,F12,在窗口中 编辑,Add Block Comment,Ctrl+Shift+/,Editing in Structured Text Editors 编辑,Format Active Elements,Ctrl+I,Editing in Structured Text Editors 编辑,Format Document,Ctrl+Shift+F,Editing in Structured Text Editors 编辑,Move,Alt+Shift+V,Editing JSP Source 编辑,Occurrences in File,Ctrl+Shift+A,Editing in Structured Text Editors 编辑,Open Selection,F3,Editing in Structured Text Editors 编辑,Quick Fix,Ctrl+1,Editing in Structured Text Editors 编辑,Remove Block Comment,Ctrl+Shift+\,Editing in Structured Text Editors 编辑,Rename,Alt+Shift+R,Editing JSP Source 编辑,Restore Last Selection,Alt+Shift+向下键,Editing in Structured Text Editors 编辑,Run Query command,Ctrl+F9,Editing HQL 编辑,Run SQL,Ctrl+F9,编辑文本 编辑,Select Enclosing Element,Alt+Shift+向上键,Editing in Structured Text Editors 编辑,Select Next Element,Alt+Shift+右箭头,Editing in Structured Text Editors 编辑,Select Previous Element,Alt+Shift+左箭头,Editing in Structured Text Editors 编辑,Show Tooltip Description,F2,Editing in Structured Text Editors 编辑,Toggle Comment,Ctrl+Shift+C,Editing in Structured Text Editors 编辑,“快速差别”开关,Ctrl+Shift+Q,编辑文本 编辑,上下文信息,Alt+?,在窗口中 编辑,上下文信息,Alt+Shift+?,在窗口中 编辑,上下文信息,Ctrl+Shift+Space,在窗口中 编辑,全部选中,Ctrl+A,在对话框和窗口中 编辑,内容辅助,Alt+/,在对话框和窗口中 编辑,切换插入方式,Ctrl+Shift+Insert,编辑文本 编辑,删除,Delete,在窗口中 编辑,剪切,Ctrl+X,在对话框和窗口中 编辑,剪切,Shift+Delete,在对话框和窗口中 编辑,增量查找,Ctrl+J,编辑文本 编辑,增量逆向查找,Ctrl+Shift+J,编辑文本 编辑,复制,Ctrl+C,在对话框和窗口中 编辑,复制,Ctrl+Insert,在对话框和窗口中 编辑,复原上一个选择,Alt+Shift+向下键,编辑 Java 源代码 编辑,快速修正,Ctrl+1,在窗口中 编辑,撤销,Ctrl+Z,在窗口中 编辑,文字补全,Ctrl+Alt+/,编辑文本 编辑,显示工具提示描述,F2,编辑 Java 源代码 编辑,查找上一个,Ctrl+Shift+K,编辑文本 编辑,查找下一个,Ctrl+K,编辑文本 编辑,查找并替换,Ctrl+F,在窗口中 编辑,粘贴,Ctrl+V,在对话框和窗口中 编辑,粘贴,Shift+Insert,在对话框和窗口中 编辑,选择上一个元素,Alt+Shift+左箭头,编辑 Java 源代码 编辑,选择下一个元素,Alt+Shift+右箭头,编辑 Java 源代码 编辑,选择外层元素,Alt+Shift+向上键,编辑 Java 源代码 编辑,重做,Ctrl+Y,在窗口中 运行/调试,Debug on Server,Alt+Shift+D,R,在窗口中 运行/调试,EOF,Ctrl+Z,在控制台中 运行/调试,Profile on Server,Alt+Shift+P,R,在窗口中 运行/调试,Run on Server,Alt+Shift+X,R,在窗口中 运行/调试,下一个内存监视器,Ctrl+Alt+N,在内存视图中 运行/调试,切换内存监视器窗格,Ctrl+T,在内存视图中 运行/调试,切换单步执行过滤器,Shift+F5,在窗口中 运行/调试,切换行断点,Ctrl+Shift+B,在窗口中 运行/调试,单步跳入,F5,调试 运行/调试,单步跳入选择的内容,Ctrl+F5,调试 运行/调试,单步跳过,F6,调试 运行/调试,单步返回,F7,调试 运行/调试,执行,Ctrl+U,在窗口中 运行/调试,显示,Ctrl+Shift+D,在对话框和窗口中 运行/调试,检查,Ctrl+Shift+I,在对话框和窗口中 运行/调试,添加内存块,Ctrl+Alt+M,在内存视图中 运行/调试,继续,F8,调试 运行/调试,调试 Ant 构建,Alt+Shift+D,Q,在窗口中 运行/调试,调试 Eclipse 应用程序,Alt+Shift+D,E,在窗口中 运行/调试,调试 Equinox 框架,Alt+Shift+D,X,在窗口中 运行/调试,调试 JUnit 插件测试,Alt+Shift+D,P,在窗口中 运行/调试,调试 JUnit 测试,Alt+Shift+D,T,在窗口中 运行/调试,调试 Java Applet,Alt+Shift+D,A,在窗口中 运行/调试,调试 Java 应用程序,Alt+Shift+D,J,在窗口中 运行/调试,调试 SWT 应用程序,Alt+Shift+D,S,在窗口中 运行/调试,调试上次启动,F11,在窗口中 运行/调试,转至地址,Ctrl+G,在呈示表内存时 运行/调试,运行 Ant 构建,Alt+Shift+X,Q,在窗口中 运行/调试,运行 Eclipse 应用程序,Alt+Shift+X,E,在窗口中 运行/调试,运行 Equinox 框架,Alt+Shift+X,X,在窗口中 运行/调试,运行 JUnit 插件测试,Alt+Shift+X,P,在窗口中 运行/调试,运行 JUnit 测试,Alt+Shift+X,T,在窗口中 运行/调试,运行 Java Applet,Alt+Shift+X,A,在窗口中 运行/调试,运行 Java 应用程序,Alt+Shift+X,J,在窗口中 运行/调试,运行 SWT 应用程序,Alt+Shift+X,S,在窗口中 运行/调试,运行上次启动,Ctrl+F11,在窗口中 运行/调试,运行至行,Ctrl+R,调试 重构 - Java,内联,Alt+Shift+I,在窗口中 重构 - Java,抽取局部变量,Alt+Shift+L,在窗口中 重构 - Java,抽取方法,Alt+Shift+M,在窗口中 重构 - Java,显示重构快速菜单,Alt+Shift+T,在窗口中 重构 - Java,更改方法特征符,Alt+Shift+C,在窗口中 重构 - Java,移动 - 重构,Alt+Shift+V,在窗口中 重构 - Java,重命名 - 重构,Alt+Shift+R,在窗口中 项目,全部构建,Ctrl+B,在窗口中 |
|
| (责任编辑:包春林)
|