博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于java类执行的顺序
阅读量:6280 次
发布时间:2019-06-22

本文共 3627 字,大约阅读时间需要 12 分钟。

hot3.png

之前面试或做题的时候总是会遇到问一个子类继承一个父类后,里面各自有静态代码块,构造器,方法等的执行顺序的问题,总是感觉好像是什么什么样,现在自己来写个例子就知道了:

父类:

public class FatherDemo {		public static int f1 = 3;		private static String name = "father";		public FatherDemo(){		System.out.println("===f1:"+f1+"=====name:"+name+"========");		System.out.println("========我是Father类==无惨构造器=============");	}			public FatherDemo(String name){		System.out.println("===f1:"+f1+"=====name:"+name+"========");		System.out.println("========我是Father类==带参构造器=============");		this.name = name;		System.out.println("===f1:"+f1+"=====name:"+name+"========");	}			static{		System.out.println("===f1:"+f1+"=====name:"+name+"========");		System.out.println("========我是Father类==static代码块=============");			}		{		System.out.println("===f1:"+f1+"=====name:"+name+"========");		System.out.println("========我是Father类==代码块=============");			}		public static void mothod0(){		System.out.println("===f1:"+f1+"=====name:"+name+"========");		System.out.println("========我是Father类==static方法mothod0=============");	}	public void method(){		System.out.println("===f1:"+f1+"=====name:"+name+"========");		System.out.println("========我是Father类==method方法=============");	}	}

子类:

public class ChildDemo extends FatherDemo{	public static int f2 = 3;		private static String name = "child";		public ChildDemo(){		System.out.println("===f1:"+f1+"=====name:"+name+"========");		System.out.println("========我是ChildDemo类==无惨构造器=============");	}			public ChildDemo(String name){		System.out.println("===f1:"+f1+"=====name:"+name+"========");		System.out.println("========我是ChildDemo类==带参构造器=============");		this.name = name;		System.out.println("===f1:"+f1+"=====name:"+name+"========");	}			static{		System.out.println("===f1:"+f1+"=====name:"+name+"========");		System.out.println("========我是ChildDemo类==static代码块=============");			}		{		System.out.println("===f1:"+f1+"=====name:"+name+"========");		System.out.println("========我是ChildDemo类==代码块=============");			}	     	public static void mothod0(){		System.out.println("===f1:"+f1+"=====name:"+name+"========");		System.out.println("========我是ChildDemo类==static方法mothod0=============");	}	public void method(){		System.out.println("===f1:"+f1+"=====name:"+name+"========");		System.out.println("===4444=====我是ChildDemo类==method方法=============");	}	}

测试类:

public static void main(String[] args) {	ChildDemo child = new ChildDemo();	child.method();	System.out.println();	ChildDemo demo = new ChildDemo("demo");	demo.method();}

执行结果: ===f1:3=====name:father======== ========我是Father类==static代码块============= ===f1:3=====name:child======== ========我是ChildDemo类==static代码块============= ===f1:3=====name:father======== ========我是Father类==代码块============= ===f1:3=====name:father======== ========我是Father类==无惨构造器============= ===f1:3=====name:child======== ========我是ChildDemo类==代码块============= ===f1:3=====name:child======== ========我是ChildDemo类==无惨构造器============= ===f1:3=====name:child======== ===4444=====我是ChildDemo类==method方法=============

===f1:3=====name:father======== ========我是Father类==代码块============= ===f1:3=====name:father======== ========我是Father类==无惨构造器============= ===f1:3=====name:child======== ========我是ChildDemo类==代码块============= ===f1:3=====name:demo======== ========我是ChildDemo类==带参构造器============= ===f1:3=====name:demo======== ===f1:3=====name:demo======== ===4444=====我是ChildDemo类==method方法=============

由此可以看出,执行的顺序为:

父类静态属性 --》父类静态代码块--》子类静态属性--》子类静态代码块--》父类代码块--》父类无参构造--》子类代码块--》子类无参构造--》子类方法

如上发现父类和子类的静态方法都没有执行,有意思的是当我实例化子类的带参构造的时候,父类的子类的静态代码块就不执行了,而且执行的顺序变为了: 父类代码块--》父类无参构造器--》子类代码块--》子类带参构造器--》子类method方法

转载于:https://my.oschina.net/u/2413597/blog/1815603

你可能感兴趣的文章
类对象定义 二
查看>>
收费视频网站Netflix:用户到底想要“点”什么?
查看>>
MacOS High Sierra 12 13系统转dmg格式
查看>>
关于再次查看已做的多选题状态逻辑问题
查看>>
动态下拉菜单,非hover
查看>>
政府安全资讯精选 2017年第十六期 工信部发布关于规范互联网信息服务使用域名的通知;俄罗斯拟建立备用DNS;Google打击安卓应用在未经同意情况下收集个人信...
查看>>
简单易懂的谈谈 javascript 中的继承
查看>>
iOS汇编基础(四)指针和macho文件
查看>>
Laravel 技巧锦集
查看>>
Android 使用 ViewPager+RecyclerView+SmartRefreshLayout 实现顶部图片下拉视差效果
查看>>
Flutter之基础Widget
查看>>
写给0-3岁产品经理的12封信(第08篇)——产品运营能力
查看>>
ArcGIS Engine 符号自动化配置工具实现
查看>>
小程序 · 跳转带参数写法,兼容url的出错
查看>>
flutter error
查看>>
Flask框架从入门到精通之模型数据库配置(十一)
查看>>
10年重新出发
查看>>
2019年-年终总结
查看>>
聊聊elasticsearch的RoutingService
查看>>
让人抓头的Java并发(一) 轻松认识多线程
查看>>