类和对象的基本认识之构造方法
迪丽瓦拉
2025-06-01 06:47:43
0

        前面我们说了public等的权限范围,现在我们得开始学习构造方法了。那么什么是构造方法呢?构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且 在整个对象的生命周期内只调用一次。听这名字是不是就认为是构造方法将对象的空间开辟出来是吧?其实不是,构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间,开辟空间的是new,而不是构造方法。

        那么构造方法与成员方法的区别是什么呢?也就是说构造方法的特性是什么呢?其特性为:

1. 名字必须与类名相同 2. 没有返回值类型,设置为void也不行 3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次) 4. 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)
class Student{public String name;public int age;public String sex;public Student(String name, int age, String sex) {this.name = name;this.age = age;this.sex = sex;}public void DohomeWork(){System.out.println(this.name+"正在写作业");}
}

这里顺便说一下this是什么,this代表为调用者的地址值,如Student studen = new Student("zhangsan",10,"男");其this就代表者student的地址值,当然student.DonhomWork()其中的this也代表student的地址值,毕竟是student调动的嘛,至于为什么要写this,其实是为了避免参数和成员变量的名字相同而导致赋值错误或其他错误,比如如果构造方法中的this被去掉的话,那么其中赋值就是参数自己赋值给自己,而成员变量没有被赋值的后果,因此this的作用非常重要。

        每个类都必须要有构造方法,但是有时我们会看到一些类没有构造方法,这是怎么回事呢?其实在idea中,如果我们没有给类创建构造方法,那么它就会自动给该类创建一个无参的构造方法,就是上面的构造方法没有参数,同时主体没有任何语句的方法。但是一旦我们创建了一个构造方法,那么它就不会给我们生成默认的构造方法,这就是帮无不帮穷,因此当我们只创建了有参的构造方法,那么我们就不能在创建对象的时候不传参,因为没有这个方法。那么我在创建对象的时候突然想用别的构造方法怎么办?哈哈哈,这就要靠this了,因为this是对象的地址值,因此this可以和对象一样,通过(.)来访问类中的内容,如this.DohomeWork(),this.age等,并且它可以调用构造方法,不过对象是不能的,你不要认为student也能调用构造方法,而它的调用方法是直接在后面接(),里面是参数。如this(),这调用的就是无参构造方法,这个是只能放在构造方法中,并且只能放在第一行,不然就会报错。

public Student(String name, int age, String sex) {this();this.name = name;this.age = age;this.sex = sex;
}

如果我在两个构造函数互相调用它们的构造方法,那岂不是死循环了?应该有人会问的吧?如果真有人这么想的话,那么我只能说,你可真是个小机灵鬼,不过在idea中如果出现这种状况,人家是直接给你报错的,这波人家是在大气层。

        如果成员变量没初始化的话会怎样?我们都知道局部变量如果没有初始化的话,在Java中会报错,那么类中的成员变量呢?它们不会报错,那么它们所存的数据是什么?每个类型的数据的都不一样。byte和short和int都是0,long是0L,boolean是false,float是0.0f,double是0.0,reference是null,char是'\u0000'。

        那么到现在,对象的初始化有几种方法呢?一种是创建的时候通过构造方法来初始化(就是上面的那种),一种是就地初始化,也就是直接在里面初始化:

public String name = "zhangsan";
public int age = 10;
public String sex = "男";

但这样有一个弊端,那就是以后创建对象时,成员变量里的值是固定的(如果你没使用构造方法去初始化的话)。

相关内容