构造器
public class Phone04{
//成员变量 修饰符(不写|public) 数据类型 变量名 = 赋值;
public String color;
public String brand;
public double money;
//功能,不被static修饰的方法
//打电话
public void call(){
System.out.println("call ing...");
}
}
new 做的3件事情:
-
1.堆为对象开辟空间,成员变量会跟随对象进入到堆内存中
-
2.调用类型的构造器,为对象初始化信息
-
3.将地址返回给引用
-
构造器|构造函数|构造方法:特殊的方法
-
作用:为对象初始化信息 (对象的成员属性赋值)
注意:
1.构造器没有返回值类型,没有void
2.构造器的名字要与类名保持一致
3.可以有return,不写return,但是不能返回数据,只能提前结束方法的作用
4.没有显示定义构造器,编译器会默认提供一个空构造
5.如果有显示定义任何构造器,编译器就不会为你提供任何构造器
6.构造器无法通过其他方式调用,只能跟随new一起使用
7.构造器不能和abstract,final,static一起使用
-
以后在写自定义模板类时候,一般都存在空构造,按需添加带参构造和使用
public class Demo { //空构造 public Demo(){} public static void main(String[] args) { Cat cat=new Cat(); //()->匹配构造器 /*cat.name="王大锤"; cat.type="加菲猫"; cat.color="彩色"; cat.shout();*/ Cat cat2=new Cat("二锤"); //匹配一个String参数的构造器 cat2.color="hongse"; //如果创建对象的同时就执行为成员属性赋什么值,就可以使用构造器的方式为对象初始化信息 Cat cat3=new Cat("三锤","加肥","粉色"); cat2.shout(); cat3.name="王三锤"; cat3.shout(); cat3.Cat(); } } class Cat{ public String name; public String type; public String color; //空构造 public Cat(){ System.out.println("我是空构造..."); } //重载构造器 public Cat(String catName){ System.out.println("我是一个一个String参数的构造器"); //赋值 name=catName; //name成员属性指你创建哪一个对象的时候调用这个构造器初始化对象信息了,构造器中的成员属性就是哪一个内存空间 } //重载构造器 public Cat(String catName,String catType,String catColor){ System.out.println("我是一个一个String参数的构造器"); //赋值 name=catName; //name成员属性指你创建哪一个对象的时候调用这个构造器初始化对象信息了,构造器中的成员属性就是哪一个内存空间 type=catType; color=catColor; } public void shout(){ System.out.println(name+","+color+","+type+"喵喵喵..."); } public void Cat(){ System.out.println("hehehhe"); } }
关键字this
关键字this : 代表当前对象,存储当前对象的地址
构造器的首行,调用本类中的其他构造器
this(参数列表);
区分同名变量问题:
成员变量和局部变量同名问题
当没有成员和局部同名问题的时候,默认所写的price和brand指代成员变量,因为只有成员变量叫这个名字.相当于price和brand前面金省略了this.
如果存在同名问题,默认就近原则找局部,如果指代成员变量,前面必须添加this.用来区分
注意:
1.两个构造器之间不能相互调用
2.构造器中如果使用this,默认指代当前创建的对象
3.方法中使用this,指代调用成员方法的对象
4.this不能和static一起使用
(this不能用在方法里,static是方法,this是对象)
构造器(可重载)-> 类-> 对象(多个)