zoukankan      html  css  js  c++  java
  • 深入了解Java程序执行顺序

    先看代码:
    class Parent {     
        public static String p_StaticField = "父类--静态变量";    
        public String p_Field = "父类--变量";      
        // 下面这些是干什么的?解释以下,不是很明白 
        static {    
             System.out.println(p_StaticField);    
             System.out.println("父类--静态初始化块");    
         }      
        // 下面这是干什么的?不明白?为什么这么写     
         {    
             System.out.println(p_Field);    
             System.out.println("父类--初始化块");    
         }      
        public Parent() {    
             System.out.println("父类--构造器");    
         }    
    }       
    public class SubClass extends Parent {    
        public static String s_StaticField = "子类--静态变量"; 
        public String s_Field = "子类--变量";    
        // 静态初始化块    
        static {    
             System.out.println(s_StaticField);    
             System.out.println("子类--静态初始化块");    
         }    
         {    
             System.out.println(s_Field);    
             System.out.println("子类--初始化块");    
         }        
        public SubClass() {    
             System.out.println("子类--构造器");    
         }       
        public static void main(String[] args) { 
           new Parent();
          System.out.println("-------------------");
           new SubClass(); 
           System.out.println("-------------------");
           new SubClass();  
         }    

    程序的运行结果为:
    父类--静态变量
    父类--静态初始化块
    子类--静态变量
    子类--静态初始化块
    父类--变量
    父类--初始化块
    父类--构造器
    -------------------
    父类--变量
    父类--初始化块
    父类--构造器
    子类--变量
    子类--初始化块
    子类--构造器
    -------------------
    父类--变量
    父类--初始化块
    父类--构造器
    子类--变量
    子类--初始化块
    子类--构造器

    class A {
        public A() {
            System.out.println("A的构造方法");
        }
    
        public static int j = print();
    
        public static int print() {
            System.out.println("A print");
            return 521;
        }
    }
    
    public class B extends A {
        public B() {
            System.out.println("B的构造方法");
        }
    
        public static int k = print();
    
        public static int print() {
            System.out.println("B print");
            return 522;
        }
    
        public static void main(String[] args) {
            System.out.println("main start");
            B b = new B();     
            System.out.println("------------------------");
            A a = new B();
        }
    }

    输出:

    A print
    B print
    main start
    A的构造方法
    B的构造方法
    ------------------------
    A的构造方法
    B的构造方法

  • 相关阅读:
    解决org.openqa.selenium.WebDriverException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms org.springframework.beans.BeanInstantiation
    jsp学习---css基础知识学习,float,position,padding,div,margin
    jsp学习---mvc模式介绍和el表达式,jstl标签库的使用入门
    java 查询 mongodb 中的objectid
    jsp学习---使用jsp和JavaBean实现超简单网页计算器
    jsp学习--JavaBean定义和在Jsp中使用JavaBean
    jsp学习--如何定位错误和JSP和Servlet的比较
    jsp学习--JSP运行原理,九大隐式对象和JSP常用标签
    jsp学习--基本语法和基础知识
    android开发学习---layout布局、显示单位和如何进行单元测试
  • 原文地址:https://www.cnblogs.com/huangjianping/p/7182085.html
Copyright © 2011-2022 走看看