构造方法的作用
构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法。
格式:public 类名称(参数类型 参数名称){方法体;}
特别要注意:
1、构造方法的名称必须和所在的类名称完全一样,就连大小写也要一样。
2、构造方法不要写返回值类型,连void都不能写。
3、构造方法不能return一个具体的返回值。
4、如果没有编写任何构造方法,那么编译器将会默认一个内容空白的构造方法,也没有参数;即public 类名称(){}
第一个例子,没有参数的构造方法,直接在方法体里面加内容
package cn.itcast.day0601.demo03;
public class Demo02Student {
public Demo02Student(){//没有参数的构造函数
System.out.println("我是一名学生");
}
}
调用:
package cn.itcast.day0601.demo03;
public class Demo02UseStudent {
public static void main(String[] args) {
Demo02Student stu = new Demo02Student();//这里new对象时,其实也是在调用构造方法。
//会自动调用没有参数的构造函数
}
}
运行结果:
再举个有参数的构造方法
私有变量可以直接在构造函数里面赋值,但要用还是要getter。要修改就要有setter。
package cn.itcast.day0601.demo03;
public class Demo02Student {
private String name;
private int age;
public Demo02Student(){//没有参数的构造函数
System.out.println("我是一名学生");
}
public Demo02Student(String name,int age){//这是有参数的构造函数。
this.name = name;//将参数传递过来的name给成员变量name
this.age = age;//将参数传递过来的age给成员变量age。
}
//为了方便修改和调用私有变量,我们来写上setter和getter
public void setName(String str){
name = str;
}
public String getName(){
return name;
}
public void setAge(int a){
age = a;
}
public int getAge(){
return age;
}
}
创建对象调用:
package cn.itcast.day0601.demo03;
public class Demo02UseStudent {
public static void main(String[] args) {
Demo02Student stu = new Demo02Student();//这里new对象时,其实也是在调用构造方法。
//会自动调用没有参数的构造函数
System.out.println("======================");
System.out.println("直接在创建对象的时候赋值");
Demo02Student stu1 = new Demo02Student("冠军",18);
System.out.println("姓名:"+stu1.getName());
System.out.println("年龄:"+stu1.getAge());
System.out.println("=======================");
System.out.println("有setter,就是为了方便我们修改:");
stu1.setName("必胜");
System.out.println("姓名:"+stu1.getName());
System.out.println("年龄:"+stu1.getAge());
}
}
注意了:一旦我们编写了至少一个构造方法(就是你一旦自己编写了构造方法),那么编译器将不再赠送。。
举个例子:
package cn.itcast.day0601.demo03;
public class Demo02Student {
private String name;
private int age;
// public Demo02Student(){//没有参数的构造函数
System.out.println("我是一名学生");
}
public Demo02Student(String name,int age){//这是有参数的构造函数。
this.name = name;//将参数传递过来的name给成员变量name
this.age = age;//将参数传递过来的age给成员变量age。
}
//为了方便修改和调用私有变量,我们来写上setter和getter
public void setName(String str){
name = str;
}
public String getName(){
return name;
}
public void setAge(int a){
age = a;
}
public int getAge(){
return age;
}
}
上面我把定义自己定义的那个无参数的构造方法注释掉了。接下来创建对象来使用:
package cn.itcast.day0601.demo03;
public class Demo02UseStudent {
public static void main(String[] args) {
Demo02Student stu = new Demo02Student();//这里new对象时,其实也是在调用构造方法。
//会自动调用没有参数的构造函数
System.out.println("======================");
System.out.println("直接在创建对象的时候赋值");
Demo02Student stu1 = new Demo02Student("冠军",18);
System.out.println("姓名:"+stu1.getName());
System.out.println("年龄:"+stu1.getAge());
System.out.println("=======================");
System.out.println("有setter,就是为了方便我们修改:");
stu1.setName("必胜");
System.out.println("姓名:"+stu1.getName());
System.out.println("年龄:"+stu1.getAge());
}
}
此时运行结果如下:
从上面的错误中,我们知道了,当你自己定义了构造方法后,编译器将不在赠送构造方法。
再举个例子强化一下:
package cn.itcast.day0601.demo03;
public class Demo02Student {
//我这里啥都不写
}
创建对象来调用它:
package cn.itcast.day0601.demo03;
public class Demo02UseStudent {
public static void main(String[] args) {
Demo02Student stu = new Demo02Student();//这里new对象时,其实也是在调用构造方法。
}
}
运行结果:
这里更加体现了,当你没有编写构造方法时,编译器就自动赠送给了你一个public Demo02Student(){}这样空白的构造方法,因此你运行也就不会出错啦。
学好构造函数,学好重载,学好java。