new 对象时的暗执行顺序
为什么称为暗执行顺序,因为当我们在new 对象时,其不是简简单单的new一个完事,它要首先检查父类的,静态的,非静态的等代码,就好像我们结婚生孩子一样,要先到祖宗那里,公安局那里,左邻右舍那里,告诉他们,我们要结婚了.下面来看其本质:
这里有一个父类一个子类:
class Father{
    {
        System.out.println("父类非静态代码块");
    }
    static{
        System.out.println("父类静态代码块");
    }
    public Father(){
        System.out.println("父类构造器");
    }
    public static void method(){
        System.out.println("父类静态方法");
    }
    public void method2(){
        System.out.println("父类非静态方法");
    }
}
class Son extends Father{
    {
        System.out.println("子类非静态代码块");
    }
    static{
        System.out.println("子类静态代码块");
    }
    public Son(){
        System.out.println("子类构造器");
    }
    public static void method(){
        System.out.println("子类静态方法");
    }
    public void method2(){
        System.out.println("子类非静态方法");
    }
}
当new Son()时,会打印:
  父类静态代码块
  子类静态代码块
  父类非静态代码块
  父类构造器
  子类非静态代码块
  子类构造器
可能你会总结出这样的规律:先父后子,先静态后非静态最后才是构造器,但这是不准确的,因为按这个原则还有一种执行顺序:
  父类静态代码块
  父类非静态代码块
  父类构造器
  子类静态代码块
  子类非静态代码块
  子类构造器
所以观察了细微问题后,对规律再做总结,就像我们写论文一样,用目录层级完美诠释它们的执行顺序:
1.静态代码块:
1.1 父的
1.2 子的
2.父其他
2.1 父非静态代码块
2.2 父构造器
3.子其他
3.1 子非静态代码块
3.2 子构造器
即:总体原则是静态代码块--->父其他--->子其他.
你记住了吗?
new 对象时的暗执行顺序的更多相关文章
- 运行page页面时的事件执行顺序
		
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...
 - 转:运行page页面时的事件执行顺序及页面的回发与否深度了解
		
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...
 - AngularJS指令嵌套时link函数执行顺序的问题
		
今天研究指令嵌套时,发现子指令的link函数先于父指令的link函数执行. 这样和预想的顺序不一样. 也就是说,如果子指令的某个scope变量依赖于父指令传来的参数时,可能一直是undefinded比 ...
 - java对象实例化  静态块,对象块,构造函数执行顺序
		
public class TestA { public static void main(String []args) { new B(); } } class A { static { System ...
 - java类的初始化块/执行顺序,实例化对象数据赋值
		
java里初始化一个类的对象,通过初始化快或者构造方法进行数据赋值.与其相关的执行代码有这么几种: 静态初始化块 初始化块 构造方法 静态初始化块 静态初始化块只在类加载时执行一次,同时静态初始化块只 ...
 - 当C#中带有return的TryCatch代码遇到Finally时代码执行顺序
		
编写的代码最怕出现的情况是运行中有错误出现,但是无法定位错误代码位置.综合<C#4.0图解教程>,总结如下: TryCatchFinally用到的最多的是TryCatch,Catch可以把 ...
 - Javascript动态加载Html元素到页面Dom文档结构时执行顺序的不同
		
我们有时会通过ajax动态获取一段Html代码,并且将这段代码通过javascript放到页面的Dom结构中去. 而很多时候通过ajax动态获取的Html代码中也包含javascript代码,有一点需 ...
 - C++-理解构造函数、析构函数执行顺序
		
先初始化序列中的函数调用,如果基类构造函数为非引用传递,则引起参数的拷贝构造 再: 先类内的成员构造函数(拷贝/默认),再类的构造函数:先基类,再派生类: 本文主要说明对象创建时构造函数的执行顺序,对 ...
 - java中的静态代码块等执行顺序
		
http://www.cnblogs.com/naruto469/p/3608459.html public class Print { 2 3 public Print(String s){ 4 S ...
 
随机推荐
- postman设置token关联参数,其他接口直接读取token变量
			
问题描述:有一个登录接口获取token,其他接口再次访问时都要带上token 解决方案: 步骤一:在登录接口访问后设置postman的环境变量,例如设置环境变量名:token,值为登录接口访问成功后, ...
 - mybat使用注解的方式如@Select写sql
			
package com.polymer.app.mapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibati ...
 - 解决安卓UI刷新卡屏,只显示最后一处刷新的问题
			
---恢复内容开始--- 错误1 安卓的机制决定了只有UI线程(也就是主线程)才能更新UI界面 否则会导致UI界面混乱的问题 这就说明了在new Thread中直接showImage是会报“出现非主线 ...
 - 从Excel、CSV文件获取数据
			
#region 从Excel获取数据 /// <summary> /// 从Excel获取数据 /// </summary> /// <param name=" ...
 - Python—迭代器与生成器
			
迭代器与生成器 生成器(generator) 先来了解一下列表生成器: list = [i*2 for i in range(10)] print(list)>>>>[0, 2 ...
 - CSS 选择器 选择 拥有多个类名 的元素
			
今天开发的时候,碰到这个连起来的类名. 才想起来,这个类似于 <div class="node hide"></div> 连起来写,表示找到 拥有这两个类 ...
 - Spring搭建练习遇到的坑
			
1.Error:(7, 23) java: cannot find symbolsymbol: class ProceedingJoinPointlocation: class com.how2jav ...
 - PHP爬虫
			
使用PHP的curl扩展抓取页面数据 PHP的curl扩展是PHP支持的允许你与各种服务器使用各种类型的协议进行连接和通信的库. 本程序是抓取知乎的用户数据,要能访问用户个人页面,需要用户登录后的才能 ...
 - Android stdio 报错 error invoking main method
			
打开Android stdio失败 报错:error invoking main method 想想前一天做了什么事?? 昨天把企图把Android Stdio文件包移盘,但是中途截止了,也就是说移动 ...
 - 2018-北航-面向对象-前三次OO作业分析与小结
			
基于度量的程序结构分析 由于平时使用了NetBrains出品的IDEA作为IDE,在分析程序的时候我使用了IDEA的插件Metrics Reloaded.然而在使用时发现不懂得很多分析项目的含义,因此 ...