构造方法

                                        构造方法

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

那么,创建对象就要明确属性值,那怎么解决呢?也就是在创建对象的时候就要做的事情,当使用new关键字创建对象时,怎么给对象的属性初始化值呢?这就要学习Java另外一门小技术,构造方法。

 

 构造方法的格式:

 

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

 

{

 

}

 

构造方法的体现:

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

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

3构造方法没有具体的返回值。

class Person {
    // Person的成员属性age和name
    private int age;
    private String name;

    // Person的构造方法,拥有参数列表
    Person(int a, String nm) {
        // 接受到创建对象时传递进来的值,将值赋给成员属性
        age = a;
        name = nm;
    }
}

这就是一个person类的构造方法,调用了person类的私有成员,

接下来看一看内存图解

 

 

 图解说明:

1、首先会将main方法压入栈中,执行main方法中的 new Person(23,"张三");

2、在堆内存中分配一片区域,用来存放创建的Person对象,这片内存区域会有属于自己的内存地址(0x88)。然后给成员变量进行默认初始化(name=nullage=0)。

执行构造方法中的代码(age = a ; name = nm;,将变量a对应的23赋值给age,将变量nm对应的张三赋值给name,这段代码执行结束后,成员变量agename的值已经改变。执行结束之后构造方法弹栈,Person对象创建完成。将Person对象的内存地址0x88赋值给p2。

好了,我们再来看一下super关键字

 

super关键字可以调用父类构造方法,进行相应的初始化动作,我觉着这是他最大的作用

this和super很像,this指向的是当前对象的调用,super指向的是当前调用对象的父类。类加载完毕,创建对象,父类的构造方法会被调用(默认自动无参),然后执行子类相应构造创建了一个子类对象,该子类对象还包含了一个父类对象。该父类对象在子类对象内部。this super只能在有对象的前提下使用,不能在静态上下文使用。

 

class Country {
    String name;
    void value() {
       name = "China";
    }
}
  
class City extends Country {
    String name;
    void value() {
    name = "Shanghai";
    super.value();      //调用父类的方法
    System.out.println(name);
    System.out.println(super.name);
    }
  
    public static void main(String[] args) {
       City c=new City();
       c.value();
       }
}

 

运行结果:

Shanghai
China

这里不仅调用了子类的方法,也调用了父类的方法,需要注意的是,若没有super,则第二个输出结果为null;

 

posted @ 2018-04-03 14:56  坑神欲哭无泪  阅读(104)  评论(0编辑  收藏  举报