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


    构造代码块:

    描述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 + "
    name:" + name + "
    age:" + age + "
    height:" + height + "
    ");
            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 + "
    name:" + name + "
    age:" + age + "
    height:" + height + "
    ");
            return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
        }
    }

     

  • 相关阅读:
    Latex (1)
    linux/unix command
    函数类型和函数指针类型(摘自 linux c编程一站式学习)
    emacs 剪切板
    Centos 常见问题汇总
    makefile(摘自linux_c编程一站式学习)
    [转]DIV布局之三行三列之高度自适应
    ASP.Net新手项目经验谈
    获取中文首字母的方法
    还是不会伪装
  • 原文地址:https://www.cnblogs.com/android-deli/p/10349233.html
Copyright © 2020-2023  润新知