Java基础知识八(构造函数)

构造函数:

构造函数定义:

构建创造时用的函数,即对象创建时执行的函数。
构造函数的格式

修饰符 构造函数名(参数列表){
}

构造函数的体现
  1. 构造函数没有返回值类型。也不需要写返回值。因为其是为构建对象的,对象创建完,
    函数就执行结束。
  2. 构造函数名称必须和类型保持一致。
  3. 构造函数没有具体的返回值
class  Person
{
    //Person的成员属性age和name
    private int age;
    private String name;
    //Person的构造函数,拥有参数列表
    Person(int a , String nm)
    {
        //接受到创建对象时传递进来的值,将值赋给成员属性
        age = a;
        name = nm;
    }
}
构造函数的调用:

构造函数
父类的构造函数会优先于子类的构造函数运行
为什么?父类为子类准备一些数据
构造函数的第一句有一个隐藏的super(参数列表)
对于super(参数列表)调用,前提是父类必须有相应的构造函数
this(…)也在第一句 冲突不?不冲突
因为this(…)会转接到其他构造函数,其他的构造函数最终不会再转接回去,第一句只能是super(…)

class  Person
{
    //Person的成员属性age和name
    private int age;
    private String name;
    //Person的构造函数,拥有参数列表
    Person(int a , String nm)
    {
        //接受到创建对象时传递进来的值,将值赋给成员属性
        age = a;
        name = nm;
    }
    public void speak()
    {
        System.out.println("name="+name+",age="+age);
    }
}
class PersonDemo
{
    public static void main(String[] args)
    {
        //创建Person对象
        //Person p = new Person(); 
        //上述代码编译报错,原因是在Person类中没有Person()这样的构造函数
        //创建Person对象,并明确对象的年龄和姓名
        Person p2 = new Person(23,"张三");
        p2.speak();
    }
}

该代码表示创建对象时构造函数的调用。即在创建对象时,会调用与参数列表对应的构造函数。如果创建对象时没有对应的构造函数,那么无法创建该对象。
上述代码图解:
在这里插入图片描述
图解:
1、首先将main主函数压入栈中,执行main函数中的new Person(23,“张三”);
2. 在堆内存中分配一片区域,用来存放创建的Person对象,这片内存区域会有属于自己的内存地址(0x88)。然后给成员变量进行默认初始化(name=null,age=0)。
3. 执行构造函数(这里省略部分知识,后面讲解)中的代码(age = a ; name =nm;),这段代码执行结束后,成员变量age和name的值已经改变。此步骤也为构造函数初始化。执行结束之后构造函数弹栈,Person对象创建完成。将Person对象的内存地址0x88赋值给p2。

默认构造函数:
class  Person
{
    //如果没有显示指定构造函数,编译会在编译时自动添加默认的构造函数
    //Person(){}  //空参数的默认构造函数
}

如果创建对象时不需要明确具体的数据,这是可以不用书写构造函数(不写也有默认构造函数)。

构造函数的细节:

一个类中可以有多个构造函数,多个构造函数是以重载的形式存在的
构造函数中也是有return语句的,用于结束初始化动作。
构造函数是可以被private修饰的,作用:其他程序无法创建该类的对象

构造函数与一般函数的区别:

构造函数:构造函数在对象创建时就执行了,而且只执行一次。
一般函数:一般函数是在对象创建后,需要使用时才被对象调用,并可以被多次调用。

问题
有了构造函数之后可以对对象的属性进行初始化,那么还需要对应的set和get方法吗?
需要相应的set和get方法,因为对象在创建之后需要修改和访问相应的属性值时在,这时
只能通过set或者get方法来操作。

发布了48 篇原创文章 · 获赞 47 · 访问量 5247

猜你喜欢

转载自blog.csdn.net/weixin_45160969/article/details/103312281