• 动手动脑(类与对象作业再次提交)


    Java字段初始化的规律:

    1有实际参数值的,按实际参数值进行初始化例如obj=new Init(300);

           System.out.println(obj.field);

    2没有给出实际参数值时,找默认的构造函数例如Init obj=new Init();

           System.out.println(obj.field);

    2当多个类之间有继承关系时,创建子类对象导致父类初始化快的执行的程序:

    package com;

    class Father {

    static

    {

         System.out.println("父类静态块");

    }

       public Father() {

       

            System.out.println("父类构造方法");

        }

    }

     

    class Child extends Father {

    static

        {

         System.out.println("子类静态块");

        }

    public Child() {

         

            System.out.println("子类构造方法");

        }

    }

    public class Duo {

    public static void main(String []args) {

        new Father();

            System.out.println("--------------");

            new Child();

        }

    }

    3总结静态初始化块的执行顺序:

    代码如下:package com;

     

    class Root

    {

        static{

           System.out.println("Root的静态初始化块");

        }

        {

           System.out.println("Root的普通初始化块");

        }

        public Root()

        {

           System.out.println("Root的无参数的构造器");

        }

    }

    class Mid extends Root

    {

        static{

           System.out.println("Mid的静态初始化块");

        }

        {

           System.out.println("Mid的普通初始化块");

        }

        public Mid()

        {

           System.out.println("Mid的无参数的构造器");

        }

        public Mid(String msg)

        {

           //通过this调用同一类中重载的构造器

           this();

           System.out.println("Mid的带参数构造器,其参数值:" + msg);

        }

    }

    class Leaf extends Mid

    {

        static{

           System.out.println("Leaf的静态初始化块");

        }

        {

           System.out.println("Leaf的普通初始化块");

        }  

        public Leaf()

        {

           //通过super调用父类中有一个字符串参数的构造器

           super("Java初始化顺序演示");

           System.out.println("执行Leaf的构造器");

        }

     

    }

     

    public class Q

    {

        public static void main(String[] args)

        {

           new Leaf();

          

     

        }

    }

    分析如下:首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕后再去看父类有没有非静态代码块。如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕后接着看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕执行构造方法。总之静态代码块内容优先,然后是父类的非静态代码块和构造方法,做后是子类的非静态代码块和构造方法。

  • 相关阅读:
    课时15.DTD文档声明下(了解)
    Python-01 学习第一节
    常用数据库备份还原命令
    Oracle排除记录集
    存储过程分页语句
    TFS统计编码行数语句
    数据库所有表替换所有列的特定字符串
    MSSQL查询所有数据库表,指定数据库的字段、索引
    统计整个库所有表的记录数
    执​行​o​r​a​c​l​e​函​数​的​四​种​方​法
  • 原文地址:https://www.cnblogs.com/19950216z/p/4915491.html
Copyright © 2020-2023  润新知