Java面向对象之构造函数

在现实生活中,很多事物一出现,就天生具有某些属性和行为。比如人一出生,就有年龄、身高、体重、就会哭;汽车一出产,就有颜色、有外观、可以运行等。这些,我们就可以将这些天然的属性和行为定义在构造函数中,当new实例化对象时,也就具有这些属性和方法了,没必要再去重新定义了,从而加快了编程效率。

构造函数作用:一般用来初始化成员属性和成员方法的,即new对象产生后,就调用了对象了属性和方法。

构造函数与普通函数的区别:

(1)一般函数是用于定义对象应该具备的功能。而构造函数定义的是,对象在调用功能之前,在建立时,应该具备的一些内容。也就是对象的初始化内容。

(2) 构造函数是在对象建立时由 jvm 调用, 给对象初始化。一般函数是对象建立后,当对象调用该功能时才会执行。

(3) 普通函数可以使用对象多次调用,构造函数就在创建对象时调用。

(4) 构造函数的函数名要与类名一样,而普通的函数只要符合标识符的命名规则即可。

(5) 构造函数没有返回值类型。

作用:给对象进行初始化

如下图所示:

public class Person {
    
    String name; //    姓名
    int age; //    年龄
    //    全参构造方法
    Person(String name,int age){
        this.name = name; //     给对象赋予name值
        this.age = age; //    给对象赋予age值
    }
    //    无参构造方法
    Person(){
        
    }
    
    public static void main(String[] args) {
        Person p = new Person("张三",1); 
        /*
             根据创建对象的实参个数,jvm回去寻找合适的构造方法,
             两个实参所有会调用含有两个参数的构造方法.Person(String name,int age)
         */
        System.out.println("姓名: " + p.name + " 年龄: " + p.age); //    name = 张三, age = 1;
        //这个对象创建出来的时候已经有了自己的姓名和年龄
    }

注意:

 1、当类中没有定义构造函数时,系统会指定给该类加上一个空参数的构造函数。这个是类中默认的构造函数。当类中如果自定义了构造函数,这时默认的构造函数就没有了。

2、在一个类中可以定义多个构造函数,以进行不同的初始化。多个构造函数存在于类中,是以重载的形式体现的。因为构造函数的名称都相同。

 3、创建对象时,构造函数已经被调用并执行。

什么时候定义构造函数呢?

在描述事物时,该事物已存在就具备的一些内容,这些内容都定义在构造函数中。

public class Person {

    // 定义一个Person类的构造函数
    public Person() {// 构造函数 而且是空参数的
        System.out.println("无参构造函数");
    }

    public static void main(String[] args) {
        Person person = new Person();
    }
}

输出结果为:无参构造函数

构造函数:构建创造对象时调用的函数  

作用:可以给对象进行初始化

创建对象都必须要通过构造函数初始化。一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数构造函数。

如果在类中定义了指定的构造函数,那么类中的默认构造函数就没有了。一句话:有就用你的,没,哥帮你弄一个空的。

比如:
 

Class Demo{

}

编译能通过 

其实里面默认含有构造函数初始化

Class Demo{

  Demo( ){ }

}

有参构造函数如下:

public class Person {


    // 定义一个Person类的构造函数
    public Person() {// 构造函数 而且是空参数的
        System.out.println("无参构造函数");
    }

    public Person(String message) {// 构造函数 而且是有参数的
        System.out.println("有参构造函数" + message);
    }
}

public static void main(String[] args) {
       Person person = new Person();

       Person message=new Person("已被调用");

   }
}

输出结果为:

无参构造函数
有参构造函数已被调用

. 构造代码块:

{
//初始化内容
}
class Boy {

    String name;
    int age;
    String gender;
    // 构造代码块,给所有对象进行初始化。
    {
        System.out.println("哭。。。");
    }

    Boy() {
        System.out.println("无参构造");
    }

    Boy(String n, int a, String g) {
        name = n;
        age = a;
        gender = g;
        System.out.println("有参构造");
    }

}

class Demo9 {

    public static void main(String[] args) {

        Boy b = new Boy();

        Boy b2 = new Boy("jack", 1, "男");
//输出结果为:
       /* 
        哭。。。
        无参构造
        哭。。。
        有参构造
        */

    }
}

 

具体作用:

  1:给所有对象进行统一初始化。对象一建立就运行并且优先于构造函数

  2:与构造函数区别

    1:构造代码块和构造函数的区别,构造代码块是给所有对象进行统一初始化, 构造函数给对应的对象初始化。

    2:构造代码块的作用:它的作用就是将所有构造方法中公共的信息进行抽取。

 

参考链接:

Java 构造函数的详解

JAVA构造函数(方法)

Java构造函数的深入理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chen_ShengJie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值