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

          

     

        }

    }

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

  • 相关阅读:
    CodeSmith实用技巧(十四):使用Progress对象
    .NET设计模式(5):工厂方法模式(Factory Method)
    CodeSmith实用技巧(七):从父模版拷贝属性
    CodeSmith实用技巧(十一):添加设计器的支持
    CodeSmith实用技巧(六):使用XML 属性
    CodeSmith实用技巧(三):使用FileDialogAttribute
    CodeSmith实用技巧(十二):自动执行SQL脚本
    CodeSmith中实现选择表字段的几点想法
    CodeSmith开发系列资料总结
    你真的了解.NET中的String吗?
  • 原文地址:https://www.cnblogs.com/19950216z/p/4915491.html
Copyright © 2011-2022 走看看