构造器
构造器没有返回值,名字必须和类名一样
构造器的作用
构造器并不是用来创建对象,而是对对象进行初始化
构造器的建立和使用
1.不能有返回值,void也不能写 2.名字要和类名相同 3.形参列表规则和一般方法的一样
具体例子
!!当创建对象,并且赋值过后,构造器就已经被调用,即Person p1 = new Person(”smith“,80)时已经调用,不需要用.去调用
编译效果图
构造器的细节
一个类可以定义多个构造器,构造器可以重载;重载方法:根据设定不同的形参列表来完成构造器的重载,如:
系统会自动调用构造器
在创建对象空间后,系统再进行调用构造器,先有对象空间再调用构造器
对象不可以主动调用构造器!不能用对象.类名去调用构造器
默认无参构造器
!!!关键
下面这个例子中,自己定义了构造器,对象不能使用无参创建的方法
编译不通过,不能采用无参创建对象的方法
无参构造器可以设置默认值
对象的创建流程
显式初始化在构造器执行前执行,即在类中定义属性先执行
this关键字
该构造器方法体中的name根据就近原则为形参,而不是属性,因此没有任何作用
this.属性名代表是当前对象的属性(系统先创建了对象再使用构造器)
this的理解
this在堆中有一个地址,地址指向自己所在的对象空间,this和dog1指向的地址相同,this也是一个对象,this可以理解为在方法中对象的对象名
this的细节
3.用this访问成员方法
4.this可以访问构造器
this(参数列表);不可以this.构造器名;this调用构造器只能在构造器中调用,不能在成员方法中调用构造器,通过不同的形参列表可以调用不同的构造器;访问构造器的句子必须放在第一条;访问构造器时一定要传入参数,参数要和被访问构造器参数类型对应匹配
如图所示,在构造器T(){}中访问构造器T(String name,int age){},在访问时传入了两个参数
当对象调用f3方法时,两个输出语句输出的内容可能不同;第一个System语句输出的name和num会根据就近原则查找,name查找到成员方法中的局部变量“smith”;而this.name就是访问调用该方法对象的实际name属性
this的应用
方法1(比较方法compareTo中只传入一个对象):
在compareTo的方法中进行的操作是,对象调用该方法后,用this.属性代表当前对象的属性与传入的形参对象属性作比较,若相同则返回ture,否返回false
p1.方法(p2),方法中的this.属性代表了p1的属性
方法2(Compareto方法中传入两个对象):
返回值类型为一个包装类的方法
1.
2.
匿名对象
new Test()是一个匿名对象,没有对象引用,只能用一次,栈中没有对象名指向它,用完即被销毁
复用构造器
调用构造器只能在构造器中调用,而且只能是在构造器第一句话中调用,因此,一个构造器只能服用一次构造器