Java中,当类创建一个对象时会自动调用该类的构造方法,构造方法分为默认构造方法和带参数的构造方法。
1、 构造方法的定义
(1)构造方法的主要作用是进行一些数据的初始化。
(2)当开发人员没有编写自定义构造方法时,Java会自动添加默认构造方法,默认构造方法没有参数。
(3)当开发人员编写了自定义了有参的构造方法时,默认无参构造方法会被覆盖。若要使用无参构造方法,需要在类中手动添加无参构造方法。
定义构造方法的语法格式如下:
[访问修饰符] 方法名([参数列表]){
//方法体代码
}
-->构造方法没有返回值,void也不写。
-->默认构造方法没有参数,因此参数列表可选。
-->构造方法的方法名与类名相同。
2、 构造方法重载
构造方法重载即在同一个类中可以定义多个重载的构造方法。
3、 this关键字
(1)this关键字是对一个对象的默认引用。每个实例方法内部都有一个this引用变量指向调用这个方法的对象。
(2)this关键字的使用
1)使用this调用成员变量,解决成员变量和局部变量的同名冲突。
2)使用this调用成员方法。
3)使用this调用重载的构造方法,只能在构造方法中使用,且必须是构造方法的第一条语句。
4)因为this是在对象内部指代自身的引用,所以this只能调用实例变量、实例方法和构造方法,不能调用类变量和类方法,也不能调用局部变量。
package com.bdan.demo02;
public class Student {
public String name;
public int age;
public char gender;
public double height;
public double weight;
public String address;
public double money;
//每创建一个类,系统会默认添加一个无参构造方法
/*
* 构造方法:实例化对象的方法(用来创建对象的方法)
* 1)构造方法的方法名与类名相同
* 2)构造方法没有返回值,也不写void
* 3)每创建一个类,系统会默认添加一个无参构造方法
* 4)当你在类中添加了其它的构造方法后,默认的无参构造方法会被覆盖,这时候你要使用无参,你就需要在类中手动添加一个无参构造方法
*/
public Student(){
System.out.println("我是Student类中的无参构造方法");
}
public Student(String name,int age,char gender,double height,double weight,String address,double money ){
//this:当前对象,谁调用我这个构造方法,this就表示谁
this.name=name;
this.age=age;
this.gender=gender;
this.height=height;
this.weight=weight;
this.address = address;
this.money=money;
}
public Student(String name, char gender, double height, double weight,
String address, double money) {
//在一个构造方法中通过this去调用其它构造方法的时候,this代码需要写在第一行
// System.out.println("dsajfhdsaf");
this();
System.out.println("dsajfhdsaf");
this.name = name;
this.gender = gender;
this.height = height;
this.weight = weight;
this.address = address;
this.money = money;
}
public void m1(){
System.out.println("我是Student类中的m1()方法");
}
public void m2(){
// m1();
this.m1();
System.out.println("我是Student类中的m2()方法");
}
}
package com.bdan.demo02;
public class Test {
public static void main(String[] args) {
//创建Student类对象
Student stu1 = new Student();
//给对象属性赋值
stu1.name = "zhangsan";
stu1.age = 23;
stu1.gender = '男';
stu1.height = 182.5;
stu1.weight = 76.2;
stu1.address = "安徽合肥";
stu1.money = 9864.3;
//上面一个一个给属性赋值,比较麻烦,能不能一次到位进行赋值?
//通过有参构造方法给对象的属性赋值
Student stu2 = new Student("lisi", 24, '女', 168,49, "安徽合肥", 9999.3);
System.out.println(stu2.name);
System.out.println(stu2.age);
Student stu3 = new Student("王五", 21, '男', 185, 78, "安徽合肥", 9999);
stu3.m2();
System.out.println("---------------");
Student stu4 = new Student("王五二", '男', 185, 78, "安徽合肥", 9999);
}
}