zoukankan      html  css  js  c++  java
  • 动手动脑(类与对象作业再次提交)

    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();

          

     

        }

    }

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

  • 相关阅读:
    HDU 3681 Prison Break 越狱(状压DP,变形)
    POJ 2411 Mondriaan's Dream (状压DP,骨牌覆盖,经典)
    ZOJ 3471 Most Powerful (状压DP,经典)
    POJ 2288 Islands and Bridges (状压DP,变形)
    HDU 3001 Travelling (状压DP,3进制)
    POJ 3311 Hie with the Pie (状压DP)
    POJ 1185 炮兵阵地 (状压DP,轮廓线DP)
    FZU 2204 7
    POJ 3254 Corn Fields (状压DP,轮廓线DP)
    ZOJ 3494 BCD Code (数位DP,AC自动机)
  • 原文地址:https://www.cnblogs.com/19950216z/p/4915491.html
Copyright © 2011-2022 走看看