面向对象--构造方法
构造方法:
构造方法的目的是为对象中的数据进行初始化。
格式:
- 方法名与类名相同
- 没有返回值类型,连void都没有
- 没有具体的返回值
程序示例
/*
同一个Java文件中的多个类只能有一个public修饰的类
开发遵循的原则:高内聚,低耦合
*/
class Student {
private String name;
private int age;
Student(){
System.out.println("这是无参的构造方法");
}
//getXxx()和setXxx()方法
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
public void show() {
System.out.println("姓名:" + name + ",年龄:" + age);
}
}
public class StructureDemo1 {
public static void main(String[] args) {
//创建对象
Student s = new Student();
// s.show();
}
}
那我们就要开始思考了:
我们在学习构造方法之前,也是new对象出来,现在知道了,内部一直都是调用一个
无参的构造方法,但是呢,我们在类中并没有去写出来构造方法,所以问题是我们一直
用的构造方法来自哪里呢?
注意:
- 如果我们没有给出构造方法,JVM就会自动的提供一个无参的构造方法给我们。
- 如果我们给出了构造方法,JVM就不会再提供默认的无参构造方法了。
如果我们没有给出无参构造方法,却给出了其他的带参构造方法,JVM就不再会提供默认的无参构造方法
只要我们给出了构造方法,无论是有参还是无参,JVM就永远不会再提供无参的构造方法 - 构造方法在同一个类中也是可以发生重载的。(方法名一致,参数列表不一样,与返回值无关)
构造方法的作用:
可以在创建对象的时候给对象的成员变量进行赋值
给对象的成员变量进行赋值的两种方式:
- 使用类提供的公共的setXxx()方法给成员变量进行赋值
- 使用带参数的构造方法给私有的成员变量进行赋值,
注意形参的变量名和成员变量名一样的时候,需要配合this关键字一起使用
程序示例
class Structure {
private String name;
private int age;
Structure() {
System.out.println("这是我们自己写的无参构造方法");
}
Structure(String name) {
System.out.println("这是我们自己写的带name参数的带参构造方法");
this.name = name;
}
Structure(int age){
System.out.println("这是我们自己写的带age参数的带参构造方法");
this.age = age;
}
Structure(String name,int age){
System.out.println("这是我们自己写的带所有成员变量的参数的带参构造方法");
this.name = name;
this.age = age;
}
public void show() {
System.out.println("姓名:" + name + ",年龄:" + age);
}
}
public class StructureDemo2 {
public static void main(String[] args) {
Structure s1 = new Structure();
//能看到地址值说明咱们的对象已经被new了出来
System.out.println(s1);
System.out.println("=======================");
//创建第二个对象
Structure s2 = new Structure("李玉伟");
s2.show(); //李玉伟,0
System.out.println("=======================");
//创建第三个对象
Structure s3 = new Structure(17);
s3.show();//null,17
System.out.println("=======================");
//创建第四个对象
Structure s4 = new Structure("张梦云",18);
s4.show();
}
}