- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
publicclass
publicclassSample1 {
}
publicclass Sample2 {
public Sample2(int a) {
System.out .println(My Constructor);
Java 构造方法
一、构造方法及其作用
new 一个对象的时候要用到构造函数,例如 Hello hello = new Hello();这时调用的是
Hello 的无参数构造方法;Hello hello = new Hello(hi)这; 个是调用Hello 有参数构造方法,
如果 Hello 类中已经有了一个有参数的构造方法,这时再使用 Hello hello = new Hello(); 来创建对象的时候就会出错,这就是为什么强调写了有参数的构造方法就最好加一个无参数的构造方法.
特点:
1、构造方法名一定与类同名
2、构造方法无返回值类型(void 也不行),不能被 static、final、synchronized、abstract、native 等修饰。因为构造方法用于初始化一个新建的对象,所以用 static 修饰没有意义。多个线程不会同时创建内存地址相同的同一个对象,因此用 synchronized 修饰没有必要。
3、构造方法可以没有(默认一个无参构造方法),也可以有多个构造方法,他们之间构成重载关系,表达对象的多种初始化行为
4、如果定义有参构造函数,则无参构造函数将被自动屏蔽
5、构造方法不能被继承,但子类可以通过super 调用父类的构造方法
6、构造方法不能手动调用,在创建类实例的时候自动调用构造方法
作用:
在多数情况下,初始化一个对象的最终步骤是去调用这个对象的构造方法。构造方法负责对象的初始化工作,为实例变量赋予合适的初始值。
二、默认构造方法
在 JAVA 中如果不写构造方法的话,会默认加上一个无参数的构造方法,但是如果已经有了一个有参数的构造方法,那么无参数的构造方法就不会默认被加上。此时创建无参数对象时,报错。
}
}
publicclass Sample3 {
public Sample3() {
System.out .println(My Default Constructor);
}
}
// 可以调用Sample1类的默认构造方法来创建Sample1对象:
Sample1s1 = newSample1(); // 合法
// Sample2类没有默认构造方法,因此以下语句会导致编译错误: Sample2 s2 = new Sample2(); // 编译出错
// Sample3类显式定义了默认构造方法,因此以下语句是合法的。Sample3 s = newSample3();
三、构造方法的调用
构造方法被调用的几种方式:
当前类的其他构造方法,通过 this 语句调用它用 this(参数列表)的形式,不可以直接使用类名进行调用,必须作为构造方法的第一条语句;
注意:只能在一个构造方法中用this 语句来调用类的其他构造方法(不能通过方法名直接调用),而不能在实例方法中用this 语句来调用类的其他构造方法(在实例方法中利用 new 语句调用)。
以下构造方法是非法的: public Employee(){ String name=无名氏;
this(name); //编译错误,this 语句必须作为第一条语句
}
以下对构造方法的调用方式是非法的:
public Employee() { String name= 无名氏;
Employee(name); //编译错误,不能通过方法名来直接调用构造方法
}
当前类的子类的构造方法通过super 语句调用它,必须为第一条语句;
在程序中通过 new 语句调用它。
提示:构造方法是点不出来的。
publicclassPerson {
publicclassPerson {
private String name;
privateintage;
public Person() {
this(Dick, 12);
}
public Person(String n) {
this(n, 12);
}
public Person(String n, int a) {
name = n; age = a;
}
}
this(参数)
子类调用父类的构造方法
首先要说明的是由于先有父类后有子类,所以生成子类对象之前首先要调用父类的构造方法。当子类的构造方法没有用 super 语句显式调用父类的构造方法,那么通过这个构造方法创建子类对象时,Java 虚拟机会自动先调用父类的默认构造方法。当子类的构造方法没有用 super 语句显式调用父类的构造方法,而父类又没有提供默认构造方法时,将会出现编译错误。
假如父类有带参数
文档评论(0)