java构造函数及初始化

java构造函数及初始化

ID:40548339

大小:500.85 KB

页数:17页

时间:2019-08-04

java构造函数及初始化_第1页
java构造函数及初始化_第2页
java构造函数及初始化_第3页
java构造函数及初始化_第4页
java构造函数及初始化_第5页
资源描述:

《java构造函数及初始化》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Java构造函数在Java中,构造函数的使用比较简单,但不注意也很容易出现问题。而一旦有了问题,又不好排查,结合个人短期经验,现总结如下。首先,构造函数具有以下几个特点:1)构造函数名与类名相同;2)构造函数不返回任何值,也没有返回类型;3)每一类可以有零个或多个构造方法;4)构造方法在创建对象时自动执行,一般不用显示地直接调用。其次,就上面几个需要说明的特点进一步进行解释:特点一:构造函数名与类名相同。这个很简单,只要知道Java语言是区分大小写即可;特点二:这一特点需要说明,并加以强调。构造函数不返回任何值,也没有返回类型,因此在构造函数前面不可添加各种基本数据

2、类型,也不可添加引用类型。关键问题是,既然构造函数不返回任何值,部分人很可能会在构造函数前面加上void关键字,这正是问题所在。虽然没有返回类型,而且void也表示不返回任何值,但在构造函数前面最好不要添加void关键字。如果构造函数是无参的,编译没有问题,否则,则会有错误。例如下例所示:publicclassMyTest{inti;Strings;publicMyTest(){System.out.println("调用无参构造函数");}publicMyTest(inti){this.i=i;System.out.println("调用单参函数,而且i="+i)

3、;}publicMyTest(inti,Strings){this.i=i;this.s=s;System.out.println("调用双参函数,而且i="+i+",s="+s);}publicstaticvoidmain(String[]args){MyTestt1=newMyTest();MyTestt2=newMyTest(2);MyTestt3=newMyTest(3,"Hello");}}在上例中,三个构造函数进行了重载,这时,在构造函数的前面不可添加void关键字,否则会有编译错误。特点三:每一类可以有零个或多个构造方法。如果类没有构造函数,编译器会自

4、动添加默认的无参构造函数,当调用默认的构造函数时,就会利用构造函数为类的成员变量进行初始化,当然不同的类型其默认的初始值不同。一旦用户定义了构造函数,则不会产生默认的构造函数。当有多个构造函数时,系统会根据产生对象时,所带参数的不同而选择调用不同的构造函数。特点四:构造方法在创建对象时自动执行,一般不用显示地直接调用。构造函数的作用是对类的成员变量进行初始化操作,因此都是在创建类的对象是自动执行。JAVA技术专题综述之构造方法篇类的继承机制使得子类可以使用父类的功能(即代码),并且子类也具有父类的类型。下面介绍类在继承关系上的初始化的顺序问题。示例1:classSu

5、perClass{SuperClass(){System.out.println("SuperClassconstructor");}}publicclassSubClassextendsSuperClass{SubClass(){System.out.println("SubClassconstructor");}publicstaticvoidmain(String[]args){SubClasssub=newSubClass();}}输出结果:SuperClassconstructorSubClassconstructor在子类中只实例化了一个子类对象。从输出

6、结果上看,程序并不是一开始就运行自己的构造方法,而是先运行其父类的默认构造方法。注意:程序自动调用其父类的默认构造方法。示例2:classSuperClass{SuperClass(Stringstr){System.out.println("Superwithastring.");}}publicclassSubClassextendsSuperClass{SubClass(Stringstr){System.out.println("Subwithastring.");}publicstaticvoidmain(String[]args){SubClasssub

7、=newSubClass("sub");}}在JDK下编译此程序不能成功。正如上例中说的:程序在初始化子类时先要寻找其父类的默认构造方法,结果没找到,那么编译自然不能通过。解决这个问题有两个办法:1.在父类中增加一个默认构造方法。2.在子类的构造方法中增加一条语句:super(str);且必须在第一句。这两种方法都能使此程序通过编译,但就本程序来说运行结果却不相同。第1种方法的运行结果是:Subwithastring.第2种方法的运行结果是:Superwithastring.Subwithastring.第2种解决方法实际上是指定编译器不要寻找父类的默认构造方法

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。