一.构造函数的规则

1.构造方法是用来在对象实例化时初始化对象的成员变量的,以完成对象的初始化工作。

2.构造方法与类名相同且没有返回值(返回值也不能为void型)。如:public 构造方法名( ) { }

3.构造方法和new一起操作,在对象实例化时被系统自动调用,且只运行一次,不能被对象直接调用。

4.当没有自定义构造方法时,系统会自动添加无参的构造方法。

5.当有自定义构造方法,无论是有参、无参的构造方法,系统都不会再自动添加无参的构造方法。

6.构造方法不能被继承,因此,它不能被重写,但是能被重载,可以定义多个不同的参数个数或参数类型的构造方法。

7.当有父类时,子类在实例化对象时,会先执行父类的构造方法,然后执行子类的构造方法。其中,父类的构造方法可以有0个或多个。

(1)如果父类没有写构造方法,子类可以写super();也可以不写(系统会默认调用super();)。

(2)如果父类写了一个无参构造方法和多个有参构造方法,子类会默认调用无参构造方法,如果想调用某个有参构造方法,需在第一行写上super(参数);进行显式调用。

(3)如果父类有有参构造方法,却没有无参构造方法,子类的每一个构造方法都必须在第一行显示地用super(参数);去调用。

(4)如果父类和子类都没有写构造函数,编译器会为父类和子类分别生成一个默认的无参构造函数。默认构造函数的修饰符只跟当前类的修饰符有关(如一个类被定义为public,那么它的构造方法也是public)。

二.this关键字

类的成员属性和方法,是提供了一个模子,设定有哪些东西。用此类实例化一个对象,那么此对象就具备了这些属性和方法。带参构造方法,即把参数值赋值给这个类的成员属性,该对象具有了当前属性值,如果类的成员属性名与带参构造方法的参数名相同,那么由于就近原则,参数值赋值不到成员属性那里。

public class Constructor {
String name;
public Constructor(String name){
this.name=name; //如果这里用name=name;就近原则,参数值赋给了局部变量name,但是成员属性name不会被赋值,对象的属性值为null
}
public static void main(String[] args){
Constructor c=new Constructor("小c");
System.out.println(c.name);
}
}
//结果:小c

this在类中代表当前对象,可通过this 关键字完成当前对象的成员属性、成员方法和构造方法的调用。如:this.name=name;     this.method();     this();

this();//表示调用本类中的无参构造方法,可在有参构造方法中被调用,其它情况构造方法间也不能互相调用;构造方法不能在普通方法中被调用,普通方法可以在构造方法中被调用,可以用this.method();也可以method();。

super(); //调用父类的无参构造函数

this();和super();均只能放在构造方法第一行。

例1

public class Test {
String name;
public Test(){
System.out.println("父类的无参构造方法");
}
public Test(String name){
this.name=name;
System.out.println(name+"的有参构造");
}
} public class ChildTest extends Test { public static void main(String[] args){
ChildTest c=new ChildTest();
System.out.println(c.name);
} public ChildTest(){
super("父类");
System.out.println("子类无参构造方法");
}
} //运行结果:
父类的有参构造
子类无参构造方法
父类

子类继承了父类的属性,对象有其属性值。

例2

public class Test {
public Test(){
System.out.println("construct");
}
public void Test(){
System.out.println("call Test");
}
public static void main(String[] args){
Test t=new Test(); //调用构造函数
t.Test(); //调用Test方法
}
} //运行结果
construct
call Test

普通方法可以与构造方法同名,但建议不要将类名作为普通方法名。

this小结:

Java中,this用来指向当前实例对象,它区分了对象的成员变量与方法的形参,当一个方法的形参与成员变量的名字相同时,就会覆盖成员变量。(就近原则)

构造方法:

创建对象时,如Animal one=new Animal();   或者Animal one = new Animal("one",2);

相应的会选择调用无参构造方法或者有参构造方法,构造方法都是用来初始化对象的,有参构造方法的参数作用可以把对象的实参传给形参,形参值赋值给成员属性,使得当前对象拥有赋值后的属性值。成员属性是这个类共同拥有的,该类实例化对象后,把值赋值给成员属性,当前对象即拥有赋值后的属性值。

最新文章

  1. Dijkstra 算法
  2. C++模板分离
  3. Openjudge 1.13.37:乒乓球
  4. maven打包不执行测试用例
  5. js调用soapWebService服务
  6. Spring定时任务的几种实现
  7. angular 控制器之间的通信
  8. Import SHA2 SSL cert to Windows IIS7
  9. 为Hadoop配置Win8.1授时服务器
  10. 一个月时间整理《深入浅出Node.js》
  11. COB工艺流程及基本要求
  12. [BZOJ 4832][lydsy 4月赛] 抵制克苏恩
  13. 一个JS效果竟然要研究一天,我是不是不适合做前端?
  14. php&&页面静态化
  15. httpclient的主要业务代码逻辑(图解)
  16. 猪年设计素材:一波免费猪猪icon已为你备好
  17. hdu2642二维树状数组单点更新
  18. python 全栈开发,Day16(函数第一次考试)
  19. Python重要基础点
  20. DB2 的事务日志

热门文章

  1. Mybatis学习--日志
  2. luogu2622开灯问题2
  3. 微服务理论之六:ESB与SOA的关系
  4. seaweedfs安装配置使用
  5. Lua虚拟机初始化
  6. 一 vue开发环境搭建
  7. kafka 基础知识梳理(转载)
  8. java中的equals方法
  9. 问题:OAuth1.0;结果:OAuth1.0协议
  10. win10系统-javac不是内部或外部命令