概述
一、为什么要引入构造方法。
当创建对象的时候需要对属性值初始化,构造方法,即对象创建时要执行的方法。
要求在实例化的同时,就指定好name,和age的值。这就要用到构造方法。又叫做构造器Constructor.
二、构造方法的定义格式
构造方法在new的时候自动执行。且只执行一次。new一次执行一次。
注意:每个类都有构造方法,即使不写也有,编译时javac会自动检查类是否有构造方法,如果有,就执行,没有就自动添加一个。但是,如果你写了一个带有参数的构造方法,而没有写无参构造方法,就会报错。
如上图:如果不写无参构造方法,就会报错。同时也证明了,构造方法是可以重载的。
三、构造方法的重载
如果构造方法发生了重载,就要创建无参构造方法,否则会报错。
那么在创建对象时,需要通过构造方法来创建对象的,上图说了,只有构造方法结束了,整个对象才算建立完成。因此可以通过不同的构造方法来创建对象。如图:分别用两种构造方法来创建对象。
分析:无参构造方法和实例化之间的关系。
无参构造方法,可以不写,但是最终都会有的,跟是否实例化无关。但是如果权限是private,那么其他类就无法通过无参构造方法实例化,就会报错。如图所示:
四、构造方法和其他方法的区别
1、构造方法只能执行一次,其他方法执行次数没有限制。
2、定义格式不同。构造方法没有返回值,必须与类名相同。
五、this在构造方法之间的调用
首先说一下this的用处。
1、this.区分局部变量和成员变量同名情况。
2、this用在构造方法中,用于调用了有参构造方法。
格式:this(参数列表); 此语句必须写在第一行,才有效。
此语句的意义:减少了代码的书写量。
六、super关键字在构造方法中的应用。
首先要明白super关键字的作用:
1、super是调用父类的成员方法或成员变量。
但是还有一个问题:
也就是说子类对象中,父类的构造方法会先执行。那么为什么要执行父类构造方法呢?
假设,创建了一个父类,含有一个成员属性a=1;含有一个构造方法,将a=5;。因为如果子类创建的对象调用父类的成员变量a时,在不添加super()时,会得到a=1;如果添加super()就会得到a=5;我们都知道,构造方法在创建对象时执行,a应该等于5,故如果不调用super()就会得到错误的值。
2、super()在构造方法中是调用父类构造方法的意思。
当创建子类对象时,父类对象先进内存。这样子类才能自动拥有父类的成员。
3、子类的构造器,无论重载多少个,第一行必须是super();当你不写时表示空参super();是否写参数,要根据父类决定,父类有参数,那么子类的super()必须有参数。
4、构造方法无法继承,自然也没有重写这个概念。
5、super()语句必须是构造方法的第一行代码。
总结一下:其实这些内容说白了,就是在说一句话。
即:如果父类中没有无参构造方法,那么子类必须用super(带参)显示的调用父类的构造方法。
super是父类对象引用,this是本类对象引用。super(),this()都必须放在构造方法的第一行,super()和this()绝不能一块用,super(),this()无参时可以省略不写。
上图很重要。终于明白了为什么有的类没有在有参数构造函数的情况下,没有写无参也可以。问题的关键是对象是有参还是无参来构建的。若用无参对象构建,那么类中必须有无参构造函数,(在类中含有有参构造函数的情况下。)
快捷键:ctrl+T 用于打开继承关系图。
注意:若不确定该类是否是抽象类,可以这样想,该类的方法在做什么?如果方法内容不明确,就是抽象类。
最后
以上就是专注马里奥为你收集整理的java中构造方法的理解,super()与构造方法,无参,有参构造方法,this()与构造方法。一、为什么要引入构造方法。二、构造方法的定义格式三、构造方法的重载四、构造方法和其他方法的区别五、this在构造方法之间的调用六、super关键字在构造方法中的应用。的全部内容,希望文章能够帮你解决java中构造方法的理解,super()与构造方法,无参,有参构造方法,this()与构造方法。一、为什么要引入构造方法。二、构造方法的定义格式三、构造方法的重载四、构造方法和其他方法的区别五、this在构造方法之间的调用六、super关键字在构造方法中的应用。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复