Java学习笔记12(面向对象五:构造方法、this再探)

在开发中,经常需要在创建对象的同时明确对象对的属性值,

比如一个Person对象创建时候就应该有age和name等属性

那么如何做到在创建对象的同时给对象的属性初始化值呢?

这里介绍构造方法:

1.构造方法没有返回值类型,更没有返回值,因为它是构建对象的,对象创建完,方法就执行结束

2.构造方法名必须和类型保持一致

3.构造方法什么时候运行呢?答:在创建对象的时候自动执行,而且只运行一次

定义示例:

public class Person {
    public Person(){
        System.out.println("我是一个空参数的构造方法");
    }
}

运行:

public class Test {
    public static void main(String[] args) {
        Person p = new Person();
    }
}
//输出:我是一个空参数的构造方法

 

构造方法是每个类的必须内容,写或者不写都存在

编译器(javac)在编译的时候会检测是否有构造方法,如果有,执行,如果没有,自动创建一个空参数空内容的构造方法

 

构造方法的赋值:

public class Person {
    private String name;
    private int age;
    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }
}
public class Test {
    public static void main(String[] args) {
        Person p = new Person("张三",18);
    }
}

 

构造方法内存分析:

1.main方法进栈运行,内容只有一行:创建对象

2.堆中开空间存入对象,并带有两个参数

3.两个私有变量跟随进入堆内存,并赋默认值(null,0)

4.对象把自己的地址传给this关键字

5.对象调用自己的构造方法,构造方法进栈运行,并且对象把两个参数传入

6.构造方法用this.的方式访问堆内存的对象并给成员变量赋值

7.构造方法运行结束,对象建立完成,地址传给p

 

构造方法是可以重载的

示例:

public class Person {
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
public class Test {
    public static void main(String[] args) {
        Person p = new Person("张三", 18);
        Person p1 = new Person();
    }
}

 

 

this在构造方法之间的调用:

public class Person {
    private String name;
    private int age;

    public Person() {
        //this()是调用其他的构造方法
        //this()必须写在构造方法第一行
        this("张三", 20);
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
public class Test {
    public static void main(String[] args) {
        Person p1 = new Person("张三", 18);
        Person p2 = new Person();
    }
}

 

内存原理:

1.main方法进栈运行,在堆中开空间创建对象,成员变量跟随并赋默认值

2.对象调用自己的构造方法,调用空参数构造,进栈运行,实参传递

3.调用了有参数构造方法,有参构造方法进栈运行

4.赋值完成有参构造方法结束,空参构造方法结束,然后对象创建完成

5.对象地址传给p1(p2)

 

转载于:https://www.cnblogs.com/xuyiqing/p/8242804.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值