• 构造函数,构造代码块,静态函数的执行顺序


    静态代码块》构造代码块》构造函数》普通代码块

    当调用静态内部列时,并不会引起外部类的初始化

    https://blog.csdn.net/qq_27093465/article/details/75339803

    1:调用类中的字段

    package functionExecutionSequence;
    
    /**
     * @program: GradleTestUseSubModule
     * @author: Yafei Li
     * @create: 2018-09-10 15:22
     **/
    public class ClassA {
        public static void main(String[] args){
    
    //        System.out.println("ClassA");
            System.out.println(ClassC.str);
    //        System.out.println("----------------------------");
    //        ClassC c=new ClassC();
    //        System.out.println(c.str);
        }
    
        static {
            System.out.println("staticClassA");
        }
        {
            System.out.println("contructClassA");
        }
    
        ClassA(){
            System.out.println("contructFunctionClassA");
        }
    
    }
    
    class ClassB{
        static {
            System.out.println("staticClassB");
        }
        {
            System.out.println("contructClassB");
        }
    
        ClassB(){
            System.out.println("contructFunctionClassB");
        }
    }
    
    class ClassC extends ClassB{
        public static String str="ClassC";
        static {
            System.out.println("staticClassC");
        }
        {
            System.out.println("contructClassC");
        }
    
        ClassC(){
            System.out.println("contructFunctionClassC");
        }
    }

    结果: 静态函数中都会执行。

    staticClassA
    staticClassB
    staticClassC
    ClassC

    2:创建对象实例调用对象中的字段。

    package functionExecutionSequence;
    
    /**
     * @program: GradleTestUseSubModule
     * @author: Yafei Li
     * @create: 2018-09-10 15:22
     **/
    public class ClassA {
        public static void main(String[] args){
    
    //        System.out.println("ClassA");
            System.out.println(ClassC.str);
            System.out.println("----------------------------");
            ClassC c=new ClassC();
            System.out.println(c.str);
        }
    
        static {
            System.out.println("staticClassA");
        }
        {
            System.out.println("contructClassA");
        }
    
        ClassA(){
            System.out.println("contructFunctionClassA");
        }
    
    }
    
    class ClassB{
        static {
            System.out.println("staticClassB");
        }
        {
            System.out.println("contructClassB");
        }
    
        ClassB(){
            System.out.println("contructFunctionClassB");
        }
    }
    
    class ClassC extends ClassB{
        public static String str="ClassC";
        static {
            System.out.println("staticClassC");
        }
        {
            System.out.println("contructClassC");
        }
    
        ClassC(){
            System.out.println("contructFunctionClassC");
        }
    }

    执行结果:当调用对象中的属性和行为时,静态代码块都会执行。  构造函数和构造代码块,当创建对象时,才执行。

    但是,静态方法只会执行一次。

    staticClassA
    staticClassB
    staticClassC
    ClassC
    ----------------------------
    contructClassB
    contructFunctionClassB
    contructClassC
    contructFunctionClassC
    ClassC

    3:将类中的字段修改为final修饰。

    package functionExecutionSequence;
    
    /**
     * @program: GradleTestUseSubModule
     * @author: Yafei Li
     * @create: 2018-09-10 15:22
     **/
    public class ClassA {
        public static void main(String[] args){
    
    //        System.out.println("ClassA");
            System.out.println(ClassC.str);
            System.out.println("----------------------------");
    //        ClassC c=new ClassC();
    //        System.out.println(c.str);
        }
    
        static {
            System.out.println("staticClassA");
        }
        {
            System.out.println("contructClassA");
        }
    
        ClassA(){
            System.out.println("contructFunctionClassA");
        }
    
    }
    
    class ClassB{
        static {
            System.out.println("staticClassB");
        }
        {
            System.out.println("contructClassB");
        }
    
        ClassB(){
            System.out.println("contructFunctionClassB");
        }
    }
    
    class ClassC extends ClassB{
        public static final String str="ClassC";
        static {
            System.out.println("staticClassC");
        }
        {
            System.out.println("contructClassC");
        }
    
        ClassC(){
            System.out.println("contructFunctionClassC");
        }
    }

    结果:  则类中的静态方法不会调用

    staticClassA
    ClassC
    ----------------------------
  • 相关阅读:
    模拟4题解 T3奇袭
    模拟4题解 T1礼物
    [BZOJ2427][HAOI2010]软件安装
    [BZOJ4010][HNOI2015]菜肴制作
    deeplearning 重要调参参数分析
    论文阅读笔记八:SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation (IEEE2017)
    向github上提交自己的project
    c++ 链表基础功能实现
    c++实现 给定直角停车位两个点,求取剩余两点坐标。
    matlab转c++代码实现(主要包含C++ std::vector,std::pair学习,包含数组与常数相乘,数组相加减,将数组拉成一维向量,图片的读入等内容)
  • 原文地址:https://www.cnblogs.com/liyafei/p/9620148.html
Copyright © 2020-2023  润新知