码迷,mamicode.com
首页 > 移动开发 > 详细

Android-Java构造代码块&构造方法隐式三行

时间:2019-02-02 21:52:18      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:一个   操作   height   public   super   style   owa   com   vat   

构造代码块:

描述Teacher对象/实体:

package android.java.oop06;

public class Teacher {

    private int id = 007;
    private String name = "零零发";
    private int age = 98;
    private float height = 1.78F;


    /**
     * 静态代码块:当前Teacher类,被加载进内存时 就会执行此静态代码块里面的主体{}
     * 可以说是最先执行的,可以在这里做一些静态成员的初始化工作
     */
    static {
        System.out.println("静态代码块:当前Teacher类,被加载进内存时 就会执行此静态代码块里面的主体{}");
        System.out.println("");
    }


    /**
     * 构造代码块:每一个构造函数,的第三行执行者 就是构造代码块;
     * 构造代码块可以给成员变量字段进行初始化工作等;
     */
    {
        System.out.println("构造代码块 被所有构造方法的第三行执行者 执行了...");
        showAllValue();
    }


    /**
     * 构造函数是专门给对象实例化用的:
     *      new Teacher();      --->        public Teacher(){}
     *      ...
     *
     * 就算不写构造函数 也会默认有一个无参构造函数;
     * 一旦写了 无参构造函数/有参构造函数 后 默认隐式的那个构造函数就不见了
     */
    public Teacher() {
        System.out.println("无参构造函数,我被new Teacher()实例化了");
        showAllValue();
        return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
    }


    /**
     * 构造函数是专门给对象实例化用的:
     *      new Student(9);     --->        public Student(int value){}
     *      ...
     *
     * 就算不写构造函数 也会默认有一个无参构造函数;
     * 一旦写了 无参构造函数/有参构造函数 后 默认隐式的那个构造函数就不见了
     */
    public Teacher(int value) {
        System.out.println("有参构造函数,我被new Teacher(int类型的值)实例化了 value:" + value);
        showAllValue();
        return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
    }


    /**
     * 构造函数是专门给对象实例化用的:
     *      new Student("刘俊", true); ---> public Student(String value1, boolean value2){}
     *      ...
     *
     * 就算不写构造函数 也会默认有一个无参构造函数;
     * 一旦写了 无参构造函数/有参构造函数 后 默认隐式的那个构造函数就不见了
     */
    public Teacher(String name, boolean isSuccess) {
        System.out.println("无参构造函数,我被new Student(String类型的值, boolean类型的值)实例化了 name:" + name + " isSuccess:" + isSuccess);
        showAllValue();
        return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
    }


    // 打印所有的成员变量值
    private void showAllValue() {
        System.out.println("id:" + id + "\nname:" + name + "\nage:" + age + "\nheight:" + height + "\n");
        return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
    }
}

 

main测试方法:

package android.java.oop06;

public class Demo01 {

    public static void main(String[] args) {

        // new Teacher();      --->        public Teacher(){}
        Teacher teacher1 = new Teacher();


        // new Student(9);     --->        public Student(int value){}
        Teacher teacher2 = new Teacher(9988);


        // new Student("刘俊", true); ---> public Student(String value1, boolean value2){}
        Teacher teacher3 = new Teacher("毛对皮", true);

    }

}

 

执行结果:

分析打印执行的结果中,每次调用构造方法,构造方法都会,先调用构造代码块,这是为什么呢,等结束完(构造方法隐式三行)就明白了;

技术图片

 

 




 

 

 

 

构造方法隐式三行

  1.分析打印执行的结果中,每次调用构造方法,构造方法都会,先调用构造代码块,这是为什么呢?;

    解释:因为在所有构造方法中,【第三行】隐式的 会调用构造代码块;

  2.为什么构造代码块中打印的成员变量是有值得呢?

    解释:因为【第二行】给所有成员变量赋值了,所以构造代码块可以打印成员变量的值;

  3.为什么构造方法中打印的成员变量是有值得呢?

    解释:因为【第二行】给所有成员变量赋值了,所以构造方法可以打印成员变量的值;

package android.java.oop06.teacher;

public class Teacher {

    private int id = 007;
    private String name = "零零发";
    private int age = 98;
    private float height = 1.78F;


    /**
     * 构造代码块:每一个构造函数,的第三行执行者 就是构造代码块;
     * 构造代码块可以给成员变量字段进行初始化工作等;
     */
    {
        System.out.println("构造代码块 被所有构造方法的第三行执行者 执行了...");
        showAllValue();
    }

    
    /**
     * 每一个构造函数/所有构造函数都是这样的
     * 就以此构造函数为例:来介绍隐式 第一行 第二行 第三行 执行操作
     *                        隐式的第一行、第二行、第三行、执行操作是默认执行的,是看不到的 隐式的
     */
    public Teacher() {
        // 【第一行】super();  调用父类的 无参构造方法
        /**
         * 【第二行】
         *  给所有成员属性赋值 例如:一开始这些成员变量的值是id=0 name=null age=0
         *  就是执行了【第二行】才会去执行-->给id=赋值为007  name=赋值为="零零发" age=98)
         */
        // 【第三行】调用-->(构造代码块)
        
        System.out.println("无参构造函数,我被new Teacher()实例化了");
        showAllValue();
        return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
    }

    
    /**
     * 每一个构造函数/所有构造函数都是这样的
     * 就以此构造函数为例:来介绍隐式 第一行 第二行 第三行 执行操作
     *                        隐式的第一行、第二行、第三行、执行操作是默认执行的,是看不到的 隐式的
     * @param value
     */
    public Teacher(int value) {
        // 【第一行】super();  调用父类的 无参构造方法
        /**
         * 【第二行】
         *  给所有成员属性赋值 例如:一开始这些成员变量的值是id=0 name=null age=0
         *  就是执行了【第二行】才会去执行-->给id=赋值为007  name=赋值为="零零发" age=98)
         */
        // 【第三行】调用-->(构造代码块)

        System.out.println("有参构造函数,我被new Teacher(int类型的值)实例化了 value:" + value);
        showAllValue();
        return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
    }

    
    /**
     * 每一个构造函数/所有构造函数都是这样的
     * 就以此构造函数为例:来介绍隐式 第一行 第二行 第三行 执行操作
     *                        隐式的第一行、第二行、第三行、执行操作是默认执行的,是看不到的 隐式的
     * @param name
     * @param isSuccess
     */
    public Teacher(String name, boolean isSuccess) {
        // 【第一行】super();  调用父类的 无参构造方法
        /**
         * 【第二行】
         *  给所有成员属性赋值 例如:一开始这些成员变量的值是id=0 name=null age=0
         *  就是执行了【第二行】才会去执行-->给id=赋值为007  name=赋值为="零零发" age=98)
         */
        // 【第三行】调用-->(构造代码块)

        System.out.println("无参构造函数,我被new Student(String类型的值, boolean类型的值)实例化了 name:" + name + " isSuccess:" + isSuccess);
        showAllValue();
        return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
    }


    // 打印所有的成员变量值
    private void showAllValue() {
        System.out.println("id:" + id + "\nname:" + name + "\nage:" + age + "\nheight:" + height + "\n");
        return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
    }
}

 

 

 

 

Android-Java构造代码块&构造方法隐式三行

标签:一个   操作   height   public   super   style   owa   com   vat   

原文地址:https://www.cnblogs.com/android-deli/p/10349233.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!