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 ...
随机推荐
- JavaScript基础二
1.7 常用内置对象 所谓内置对象就是ECMAScript提供出来的一些对象,我们知道对象都是有相应的属性和方法 1.7.1 数组Array 1.数组的创建方式 字面量方式创建(推荐大家使用这种方式, ...
- 版本管理工具Git(3)VS2013下如何使用git
Git系列导航 版本管理工具Git(1)带你认识git 版本管理工具Git(2)git的安装及使用 版本管理工具Git(3)VS下如何使用git VS下创建项目 vs中新建项目MyGitTest201 ...
- linux c使用socket进行http 通信,并接收任意大小的http响应(五)
http.c data2.c http_url.c http.h data2.h http_url.h主要实现的功能是通过URL结构体来实现HTTP通信,你可以把这三个文件独立出来,作为HTTP通信模 ...
- unity中鼠标左键控制摄像机视角上下左右移动
enum RotationAxes { MouseXAndY, MouseX, MouseY } RotationAxes axes = RotationAxes.MouseXAndY; //@Hid ...
- jsp页面错误
错误提示:The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path. 解决办法:在build ...
- sql 中取整,四舍五入取整,向下取整,向上取整。
SELECT round(52.45, 0) AS round4, round(52.54, 0) AS round5, round(52.45, 1) AS round41, round(52.54 ...
- python基础——元组
元组运算符 与字符串一样,元组之间可以使用 + 号和 * 号进行运算.这就意味着他们可以组合和复制,运算后会生成一个新的元组. Python 表达式 结果 描述 len((1, 2, 3)) 3 计算 ...
- Java语法基础学习DaySixteen(多线程)
一.多线程的创建 1.作用 程序需要同时执行两个或多个任务时需要多线程. 程序需要实现需要等待的任务时,如用户输入.文件读写操作.网络操作.搜索等,需要多线程. 需要一些后台运行的程序时,需要多线程. ...
- java中的Iterator和ListIterator的区别
(一)iterator迭代器 Collection的iterator方法返回一个实现了一个Iterator接口的对象 Iterator接口中包含三个方法: 1)E next() 2)boolean h ...
- linux (centOS)安装jdk+tomcat+nginx
一..安装jdk, 下载jdk有两种方式: 1.直接去官网找相应版本下载:http://www.oracle.com/technetwork/java/javase/downloads/index.h ...