(19)构造函数、构造代码块、this用法
一、构造函数特点
①函数名与类型相同②不用定义返回值类型③不可写‘return语句’
二、运行时间
建立对象时,就运行与之对应构造函数
三、作用
对对象初始化
四、细节
当一个类没有定义构造函数时,系统会默认给该类加入一个空参数列表的构造函数
当在类中自定义一个构造函数后,系统就不会给加构造函数了
五、构造函数和一般函数的区别
①写法不同
②构造函数在对象建立时,就运行,给对象初始化,而一般方法是对象调用才执行,是给对象添加对象具备的功能
③一个对象建立,构造函数只运行一次,而一般方法对象可以调用多次
六、什么时候定义构造函数
当分析事物时,该事物必须具备的一些特性或者行为,那么僵这些内容定义在构造函数中
七、构造代码块
①作用:给对象初始化,优先于构造函数运行
②和构造函数区别:
构造代码块是给不同对象进行共性初始化的
构造函数是给对应的对象初始化的(重载)
{
初始化语句;
}
八、举个栗子
/*
* 定义构造函数
*复习重载
*/
public person() {
System.out.println("A:name="+name+","+"age="+age);
}
public person(String name) {
this.name=name;
System.out.println("B:name="+name+","+"age="+age);
}
public person(String name,int age) {
this.age=age;
this.name=name;
System.out.println("C:name="+this.name+","+"age="+age);//红字更有助于理解
this.show();//加上this.更容易理解
}
public void show(){
System.out.println(this.name);
}
/*
* 构造代码块:所有该类对象的共性
* 无论有没有名字,年龄
*/
{
System.out.println("cry啦啦啦啦啦啦");
}
九、this关键字
①this:看上去:用于区分局部变量和成员变量同名情况
②this为什么能够解决这个问题?确定当前本类对象
③this代表什么?本类对象。到底代表哪一个对象呢?this代表它所在函数所属对象的引用(简单说:哪个对象在调用这个函数,this就代表哪个对象)
④使用方法一:当有同名赋值时(成员和局部),必须得用this.,其他情况可以省略,写的话,更容易理解(还有使用方法二,见⑥)
⑤举个例子
/*
* 需求:给人定义一个用于比较年龄是否相同的功能,也就是比较年龄是否相同
*注意传参数,传一个即可。
*/
public boolean equAge(person p) {
if(this.age==p.age)
return true;
else
return false;
}
调用:p1.equAge(p2);
⑥使用方法二:
当定义类中功能时,该函数内部要用到该函数的对象时,这时候就用this来表示这个对象
但凡本类功能内部用到了本类对象,则用this (九.⑤例子)
特别的,在构造函数中,有点特殊,如下面例子:this语句只能定义在构造函数的第一行,因为初始化要先执行
⑦this得错误用法:
public person() {
this("hahha");
}
public person(String name) {
this();
this.name=name;
}
调用:
person p=new person(); 会在构造函数中来回不断执行,不能这样做