构造函数

构造函数的概述:
    特点:
    1:函数名与类名相同
    2:不用定义返回值类型
    3:没有具体的返回值
    作用:
    给对象进行初始化。
    注意:
    1:默认构造函数的特点
    2:多个构造函数是以重载的形式存在的是
public class Person{
    private int age;
    private String name;

    //定义一个Person类的构造函数
    Person(){//构造函数,而且是空参数的。
        name="baby";
        age=1;
        System.out.println("Person...run");

    }

    //如果孩子一出生就有名字
    Person(String name){
        name=name;
    }
}


class  ConsDemo{
    Person  p=new Person();//使用了,空参数的构造函数。

    Person  p1=new Person("张三");//p1这个对象一创建出来,就定义了,名字为"张三"的人。

} 
 构造函数:构建创造对象时调用的函数。作用:可以给对象进行初始化
创建对象都必须要通过构造函数初始化。

 一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数的构造函数
 如果在类中定义了指定的构造函数,那么类中的默认构造函数就没有啦。

一般函数和构造函数有什么区别呢?

 构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化
一般函数:对象创建后,需要函数功能时才调用

构造函数:对象创建时,会调用只调用一次
一般函数:对象创建后,可以被调用多次

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

构造函数之重载

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

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

构造函数可以有多个,用于对不同的对象进行针对性的初始化。
多个构造函数在类中是以重载的形式来体现的。

重载,函数名相同,参数列表不同
class  Person{
        int age;
        String name;
        //定义一个Person类的构造函数
        Person(){ //构造函数,而且是空参数的
        }

        Person(String name){//构造函数,有一个字符串类型参数传递
            name=name;
        }

        Person(int age;String name){//构造函数,有一个int类型和String类型的参数传递
            age=age;
            name=name;
        }

        public  void speak(){
            System.out.println(name+":"+age);
        }


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

    }
}

构造函数在内存中的变化

    class Demo{
        public static void main(String[] args){
            Person p=new Person(10,"小强");
            p.speak();
        }
    }

上面这句代码

首先main函数进栈,然后,在堆中,产生地址,里面name,age会默认初始化null,0,
然后,在栈中Person这个构造函数就会进栈,传递2个参数进来,分别是小强,10,
然后,就在栈中找name ,age两个定义变量,找不到就去堆中找,找到啦,就赋值上去。
然后Person这个构造函数,就出栈。然后speak就进栈,打印完之后,也就出栈啦内存中的变化。

构造函数的细节

class Demo{

    private String name;
    private int  age;
    //void Six1(){}这是一个一般函数,只是方法名和类名一样

    Six1(){
        name="baby";
        age=1;
        System.out.println("Person run");
    }

    Six1(String n){
        name=n; 
    }
    Six1(String n,int a){
        name=n;
        age=a;
    }
    public void setName(String n){
        name=n;
    }
    /*
     构造函数和setName方法不冲突,因为,一个
     是用来初始化,另外一个是用来重新赋值 

     构造函数可以调用一般函数。

     一般函数调用构造函数,就需要new 一个对象出来
     这样做很多余

     在类中写了构造函数那么,默认的构造函数
     就没有啦

     构造函数中有return
     * */


    public  void speak(){
        System.out.println(name+":"+age);
    }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值