java笔记--构造函数

特点:

1 函数名与类名相同
2 不用定义返回值类型
3 没有具体的返回值

作用:

给对象进行初始化

注意:

1 默认构造函数的特点
2 多个构造函数是以重载的形式(方法名相同,参数列表不一样)存在的

定义一个Person类:

class Person{
    private String name;
    private int age;
    //这里主要讲构造函数,忽略getter和setter
    
    //定义一个Person类的构造函数
    Person(){//构造函数而且是空参数的
        name="baby";
        age=1;
        System.out.println("person run");
    }
    //如果有的孩子一出生就有名字:
    Person(String n){
        name=n;
    }
    Person(String n,int a){
        name=n;
        age=a;
    }
    public void speak(){
        System.out.println(name+":"+age);
    }
}

定义一个PersonDemo:

public static void main(String[] args) {
        Person p=new Person();
        p.speak();
        Person p1=new Person("Haha");
        p1.speak();
        Person p2=new Person("Ahah",10);
        p2.speak();

    }

运行:
image.png

构造函数:构建创造对象时调用的函数。
作用:可以给对象初始化。

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

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

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

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

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

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

细节

在Person类中添加方法public void setName (String n){ name=n; }与构造函数Person(String n){ name=n; }不冲突,构造函数只能调用一次,而serName()可调用多。
即在主函数中调用:Person p1=new Person("Haha"); p1.setName("Hehe"); p1.speak();的运行结果是

image.png

构造函数可调用speak()函数,但speak()函数不可调用构造函数,因为构造函数适用于给对象进行初始化的。

若构造函数前加上void则变为普通函数,即void Person(){}为普通函数,而且运行出错,因为找不到默认构造函数。所以一般函数名首字母用小写字母表示,而构造函数首字母大写。

构造函数可以有return ;但是不常见,因为return可以起校验作用,当你在定义对象的时候,往对象里传的值都是来自于客户,比如通过网页的形式输入密码,而这个地方通常都有校验,所以在值已经正确的情况下就没必要控制了。

你可能感兴趣的:(java笔记--构造函数)