【Java概念】构造方法、this、super(6)

来源:互联网 发布:谢娜主持过的网络节目 编辑:程序博客网 时间:2024/04/30 18:07

构造方法

package cn.hncu.program.construct;import java.util.Calendar;import org.junit.Test;/** * 项目名:构造方法、this、super * 时间 :2017-9-11 上午8:57:23 */public class Construct {    /*     * <1>【创建一个对象】:new对象,调用构造方法创建堆内存内容,栈内存中创建引用。     */    @Test    public void t1(){        MyDate date = new  MyDate();        date.showString();//通过对象访问成员方法    }    /*     * <2>【初始化】:成员变量初始化、构造器初始化、static初始化     * 1.在一个类中,成员变量首先进行初始化,其次构造器才开始初始化。---初始化顺序     * 2.Java 尽自己的全力保证所有变量都能在使用前得到正确的初始化。     * 3.static类型的成员变量初始化仅发生一次,在Class 对象首次载入的时候。---static成员变量初始化     * 4.static初始化块:     */    @Test    public void t2(){        //两次生成的随机数是相同的,这是因为:static初始化仅发生一次,在Class 对象首次载入的时候。        new Initialization().showStatic();//0.8631562390021554        new Initialization().showStatic();//0.8631562390021554        System.gc();    }    /*     * <3>【对象创建过程】:     * 1.类型为MyDate的对象首次创建时,或者首次访问其类的static方法/static字段时,     *   Java解释器必须首先找到MyDate.class(在事先设置好的路径里找)。     * 2.找到MyDate.class(它会创建一个Class对象),它的所有static初始化模块都会运行。     *   因此static初始化仅发生一次,在Class对象首次载入的时候。     * 3.创建一个new MyDate()时,MyDate对象的构建进程首先会在堆内存(Heap)里为一个MyDate对象分配足够多的存储空间。     * 4.在堆内存中为所有的基本数据类型设置默认值。     * 5.进行字段定义的时候所发生的所有初始化都会执行。     * 6.执行构建器(继承的时候比较复杂)。     *      * <4>【子类继承父类时的构建器创建】:     * 1.一个子类继承父类后,如果父类含有一个有参构造方法,子类不写任何的构造方法,编译期会出错。     * 2.这是因为,在父类中,父类的有参构造方法覆盖了空参构造方法,从而创建子类的时候无法调用父类的     *   空参构造方法,因此编译期会出错。不管是继承抽象类还是普通类都会出错,因此子类必须自己写     *   与父类参数相同的有参构造方法。     */}/* * 构造方法演示: */class MyDate{    private int year;    private int month;    private int day;    /*     *【构造方法】:     *1.名称和类名完全相同,没有返回类型。     */    public MyDate(int year,int month,int day){        this.year = year;        this.month = month;        this.day = day;    }    public MyDate(MyDate d){        this(d.year, d.month, d.day);    }    /*     * 【构造方法】:     * 1.空参构造方法,当不写构造方法的时候,Java会自动帮我们添加一个默认的构造方法。     *   但当我们自己写了有参构造方法,Java不会帮我们添加了,因此此时要使用默认构造方法得自己手动添加。     * 2.默认构造方法:空参、空方法体---仅仅是开内存并初始化所有成员变量。       * 3.构造方法 执行了两步:1)开内存(堆内存)并初始化所有成员变量,2)执行构造方法内部的代码。     * 4.由系统调用,构造方法是回调用方法。     * 5.构造方法调用构造方法由this调用。--this(1970, 1, 1);     * 【关于构造方法说明】:     * 6.构造方法在一个对象被new时执行。     * 7.一个类可以定义多个构造方法,构造方法可以被重载。     * 8.构造方法必须与类同名,方法可以与class同名。     *      */    public MyDate(){        this(1970, 1, 1);        //super();---9.【super】是调用父类里的构造方法,但是super和this必须都在第一行,因此不能同时出现。    }    /*     * 【this】:     * 1.this指代的是 当前对象。     * 2.this.year指代当前对象中的成员变量。---当前对象就是当前类所对应的类--即当前类MyDate     * 3.this语句只能放在构造方法的第一行。     *      */    public void setYear(int year){        this.year = year;    }    public void showString(){        System.out.println(year+","+month+","+day);    }    @Override    public String toString() {        return "MyDate [year=" + year + ", month=" + month + ", day=" + day                + "]";    }}class Initialization{    /*     * 【static成员变量】     */    public static double d = Math.random();    /*     * 【static块】:     * 要给静态变量赋值,同时无法用一行赋值代码即要写多行代码,这时通常用静态块来完成。     */    static{        Calendar c = Calendar.getInstance();        int year = c.get(Calendar.YEAR);        year = (int) (year + d);    }    public void showStatic(){        System.out.println(d);    }}
原创粉丝点击