1.构造方法:类中的特殊方法,主要用于创建并初始化对象。
2.特点:构造方法的名称与类名完全相同
没有返回值类型(定义的时候不用写 void;普通方法没有返回值的时候 要写void)
创建对象时,触发构造方法的调用,不可以通过句点手动调用(.方法名)
注意:如果没有在类中显示定义构造方法,则编译器默认提供无参构造方法
示例:1. 演示类中是否有默认的构造方法
packagecom.monv.gouzaofangfa;/** 学生类*/
public classstudent {
String name;//姓名
int age;//年龄
String sex;//性别
double score;//分数//这个是编译器默认提供的构造方法 用一条打印输出来测试在创建对象的时候是否执行该默认的构造方法
publicstudent(){
System.out.println("执行了默认的构造方法。。。");
}//方法
public voidsayHi(){
System.out.println("该学生姓名为:"+name+";年龄为:"+age+";性别为:"+sex+";分数为:"+score);
}
}-----------------------调用------------------------
packagecom.monv.gouzaofangfa;public classTestStudent {public static voidmain(String[] args) {
student monv= newstudent();
}
}----------------------执行结果------------------------执行了默认的构造方法。。。
示例2.构造方法可以做一些初始化的工作(在构造方法中给类的属性赋值)
packagecom.monv.gouzaofangfa;/** 学生类*/
public classstudent {
String name;//姓名
int age;//年龄
String sex;//性别
double score;//分数//这个是编译器默认提供的构造方法 用一条打印输出来测试在创建对象的时候是否执行该默认的构造方法
publicstudent(){//初始化工作 给变量赋初始值
System.out.println("执行了默认的构造方法。。。");
name="魔女";
age= 30;
sex= "女";
score= 96;
}//方法
public voidsayHi(){
System.out.println("该学生姓名为:"+name+";年龄为:"+age+";性别为:"+sex+";分数为:"+score);
}
}----------------------调用---------------------------------
packagecom.monv.gouzaofangfa;public classTestStudent {public static voidmain(String[] args) {
student monv= newstudent();
monv.sayHi();
}
}------------------------结果------------------------------执行了默认的构造方法。。。
该学生姓名为:魔女;年龄为:30;性别为:女;分数为:96.0
3.对象创建的时候都完成了哪些功能( student monv = new student(); )
(1)在内存中开辟一个空间,并赋值属性为默认值(整数:0,小数:0.0 ,字符 :\u0000(空格),布尔: False,其他:null)
(2)调用默认的构造方法 为各个属性赋初始值 来完成初始化
(3)将对象的地址赋值给变量 (把对象地址赋值给monv)
4.构造方法的重载
构造方法也可以重载,遵循重载的规则(根据传入的参数来匹配对应的构造方法)
注意:如果代码中有带参数的构造方法,编译器就不会再默认生成不带参数的构造方法,则要手动添加不带参数的构造方法,否则创建对象调用默认的构造方法会报错
-----------------重载方法---------------------------------
packagecom.monv.gouzaofangfa;/** 学生类*/
public classstudent {
String name;//姓名
int age;//年龄
String sex;//性别
double score;//分数//这个是编译器默认提供的构造方法 用一条打印输出来测试在创建对象的时候是否执行该默认的构造方法
publicstudent(){//初始化工作 给变量赋初始值
System.out.println("执行了默认的构造方法。。。");//name="魔女";//age = 30;//sex = "女";//score = 96;
}public student(String n,inta){
name= n;//把参数n的值给name
age = a;//把参数a的值给age
}public student(String n,int a,String s,doublesc){
name= n;//把参数n的值给name
age = a;//把参数a的值给age
sex = s;//把参数s的值给Sex
score = sc;//把参数sc的值给score
}//方法
public voidsayHi(){
System.out.println("该学生姓名为:"+name+";年龄为:"+age+";性别为:"+sex+";分数为:"+score);
}
}----------------------重载方法调用-----------------------------------
packagecom.monv.gouzaofangfa;public classTestStudent {public static voidmain(String[] args) {
student monv= newstudent();
monv.name="魔女";
monv.age= 30;
monv.sex= "女";
monv.score= 96;
monv.sayHi();
System.out.println("---------------");
student xiaoming= new student("小明", 18);
xiaoming.sayHi();
System.out.println("---------------");
student xiaoli= new student("小李", 20, "男", 95);
xiaoli.sayHi();
}
}--------------------------运行结果-------------------------------执行了默认的构造方法。。。
该学生姓名为:魔女;年龄为:30;性别为:女;分数为:96.0
---------------该学生姓名为:小明;年龄为:18;性别为:null;分数为:0.0
---------------该学生姓名为:小李;年龄为:20;性别为:男;分数为:95.0