Java类--对象的构造及初始化

目录

如何初始化对象

构造方法

this引用的作用--2

This引用作用--3

默认初始化

就地初始化

如何初始化对象

通过前面的学习,我们知道,在java方法内部中定义一个局部变量必须初始化,否则编译失败。

    public static void main(String[] args) {
        int a;
        System.out.println(a);//java: 可能尚未初始化变量a
    }

给a赋值就是给a初始化

public static void main(String[] args) {
        int a = 10;
        System.out.println(a);//10
    }

如果是对象,我们先定义一个狗类

public class Dog {
    //成员属性
    public String name;//姓名
    public int age;//年龄

    //成员方法
    public void bark() {
        System.out.println("汪汪!");
    }
}

实例化一个对象并不给他初始化

    public static void main(String[] args) {
        Dog dog1 = new Dog();
        System.out.println(dog1);//Dog@1b6d3586
        System.out.println(dog1.name);//null
        System.out.println(dog1.age);//0
    }

我们没有给字段初始化,编译也能通过并且正常输出,这是为什么呢?

构造方法

构造方法是非常特殊的一个方法。作用:对对象中的成员进行初始化,不负责给对象开辟空间 。完成一个对象的构造分两步 1.分配内存 2.调用合适的构造方法。在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。当调用完成构造方法之后,对象才产生了

【注意】1.方法名必须和类名相同    2.没有返回值类型 设置成void也不行。构造方法之间是可以构成方法的重载的即方法名相同,参数列表不同。如下例:

    //构造方法
    public Dog() {
        System.out.println("这是没有参数的构造方法");
    }
    public Dog(String name,int age) {
        this.name = name;
        this.age = age;
        System.out.println("这是带有两个参数的构造方法");
    }

如果你觉得麻烦,可以鼠标右键-->Generate-->Constructor-->你想要创建带几个参数的构造方法都可以,如果是没有参数的构造方法,需要你自己敲。

有了这两个构造方法之后,我们再运行以下代码,会发现,输出结果发生了变化:

如果用户没有定义构造方法,编译器会生成一份默认的构造方法,生成的默认构造方法一定是不带参数的。这也是上述我们不给字段初始化程序却能正常运行的原因

但是当我们把不带参数的构造方法删除,只留一个带两个参数的构造函数时,运行代码就会报错

这是因为,一旦用户定义构造方法,编译器则不再生成不带参数的构造方法了。

this引用的作用--2

还记得this引用的第一个作用吗?不记得的话记得回去复习一下哦。(提示:在上面的代码中,有用到this的第一个用法哦。)

第二个作用:可以通过this调用其他构造方法来简化代码。【注】只能在构造方法内部使用,且只能在第一行 不能形成环    this();

    public Dog() {
        this("旺财",2);
        System.out.println("这是不带参数的构造方法");
    }

this(); 你只需要在括号里输入数据,系统会自动匹配对应的构造方法。

运行结果:

【注】不能形成环!!

    public Dog() {
        this("旺财",2);
        System.out.println("这是不带参数的构造方法");
    }
    public Dog(String name,int age) {
        this();
        this.name = name;
        this.age = age;
        System.out.println("这是带有两个参数的构造方法");
    }

编译不通过。

This引用作用--3

在成员方法中调用其他方法  this.方法名

    public void bark() {
        System.out.println(this.name+"汪汪!");
    }
    public void eat() {
        this.bark();
        System.out.println(this.name+"正在吃饭!");
    }
    public static void main(String[] args) {
        Dog dog1 = new Dog("旺财",2);
        dog1.eat();
    }

输出结果: 

调用语句的在方法中的位置没有要求,位置不同只影响输出顺序。

默认初始化

上面我们说过,用户没有定义构造方法,编译器会生成一份默认的构造方法,生成的默认构造方法一定是不带参数的。这也是上述我们不给字段初始化程序却能正常运行的原因。这个默认的构造方法会给创建的对象赋默认值。

数据类型默认值
byte0
int0
short0
long0L
fioat0.0f
double0.0
char'\u0000'
booleanfalse
引用型null

就地初始化

在生命成员变量时,直接赋值。

public class Dog {
    //成员属性
    public String name = "团圆";//姓名
    public int age = 3;//年龄
…………

但我们不建议这样初始化。

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值