Java基础—面向对象之构造方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础—面向对象之构造方法相关的知识,希望对你有一定的参考价值。

一、构造方法的介绍

  开发过程中经常需要在创建对象的同时明确对象的属性,比如员工刚入职公司就要明确他的姓名、年龄等属性信息。

  那么在创建对象就要明确属性值,如何实现呢?也就是在创建对象的时候就要做的事情,当使用new关键字创建对象时,怎么给对象属性初始化值呢?这里就要用到Java的构造方法。

  那么什么是构造方法?从字面理解即为构建创造时用的方法,既对象创建时要执行的方法。既然是对象创建时候要执行的方法,那么只要在new对象时,知道其执行的构造方法是什么,就可以在执行这个方法的时候给对象进行属性赋值。

  构造方法定义语法的格式:

    修饰符  构造方法名(参数列表){}

  构造方法的特点:

    1、构造方法无返回值类型,如:void等。也不需要写返回值,因为它是为构建对象的,对象创建完,方法就执行结束。

    2、构造方法名称必须和本类的名称保持一致。

  构造方法的代码体现:

 1 public class Person {
 2     private String name;
 3     private int age;
 4     
 5     /*
 6      *     定义出Person类无参的构造方法
 7      */
 8     public Person() {
 9         
10     }
11     
12     /*
13      *     定义出Person类含有参数的构造方法
14      */
15     public Person(String name,int age) {
16         //System.out.println("我是一个空参数的构造方法");
17         this.name = name;
18         this.age = age;
19     }

二、构造方法的调用和图解说明

  首先看构造方法是如何执行的呢?在创建对象的时候是如何初始化的呢?

  构造方法是专门用来创建对象,也就是在new对象的时要调用构造方法,如下面的代码体现:

 1 public class Person {
 2     // Person的成员属性age和name
 3     private int age;
 4     private String name;
 5 
 6     // Person的构造方法,拥有参数列表
 7     Person(int a, String nm) {
 8         // 接受到创建对象时传递进来的值,将值赋给成员属性
 9         this.age = a;
10         this.name = nm;
11     }
12 
13     public void speak() {
14         System.out.println("name=" + name + ",age=" + age);
15     }
16 }
17 /*
18  *     测试类PersonDemo
19  * */
20 class PersonDemo {
21     public static void main(String[] args) {
22         // 创建Person对象,并明确对象的年龄和姓名
23         Person p = new Person(23, "张三");
24         p.speak();
25 }

 

  上述代码对创建对象时,对构造方法的调用。既在创建对象时,会调用与参数列表对应的构造方法。

  上述代码的构造方法原理图:

技术分享

  上述原理图说明:

    1、首先会将mian主程序入口方法压栈,执行mian方法中的new(23,"张三");

    2、在堆内存中划分一块区域,用来存放创建Person对象,这片区域内会有属于自己的内存地址0x001,然后给成员变量默认初始值(name=null,age=0)

    3、此时,拥有两个参数的构造方法(Person(String nm , int a))压栈,在这个构造方法中第一行有个隐式的this(),因为构造方法是给对象初始化的,那个对象调用到这个构造方法,this就指向堆中的那个对象。

    4、由于Person(String nm , int a)构造方法中使用了this(nm);构造方法Person(String nm)就会压栈,并将“张三”传递给nm。在Person(String nm , int a)构造方法中同样也有隐式的this,this的值同样也为0x001,这时会执行其中name = nm,即把“张三”赋值给成员的name。当赋值结束后Person(String nm , int a)构造方法弹栈。

    5、程序继续执行构造方法(Person(String nm , int a)中的age = a;这时会将23赋值给成员属性age。赋值结束构造方法(Person(String nm , int a)弹栈。

    6、当构造方法(Person(String nm , int a)弹栈结束后,Person对象在内存中创建才算真正完成,并将0x001赋值给main方法中的引用类型p引用变量。

  

 

以上是关于Java基础—面向对象之构造方法的主要内容,如果未能解决你的问题,请参考以下文章

Java 基础 面向对象之构造方法和关键字

JAVA基础07 面向对象2

Java面向对象之关键字this 入门实例

JavaSE入门学习23:Java面向对象之构造方法

Java基础第十天总结——面向对象(上)

Java基础——面向对象