构造器的执行顺序
1,在没有静态块的情况下,子类的对象创建时,父类的无参构造器-->子类的构造器(产生对象的构造器,如果
是无参则执行的是无参构造器,如果执行的是有参则执行的有参构造器)
现在的父类中只有两个构造器:
- Father.java
- Father {
- public Father(){
- System.out.println("我是父类的无参构造器");
- }
- public Father(String username){
- System.out.println("我是父类有参构造器,传过来的参数是+"+username);
- }
- public class SonDemo extends Father{
- public SonDemo(){
- System.out.println("我是--子类--的无参构造器");
- }
- public SonDemo(String username){
- System.out.println("我是子类的有参构造器,参数是"+username);
- }
- public void sys(){
- System.out.println("我是子类的sys方法");
- }
- public static void main(String[] args) {
- //里面的内容在下面有说明
- }
- }
①,子类使用无参构造器创建对象:
在SonDemo 的main方法中加入创建对象的代码:
- SonDemo son = new SonDemo();
- }
我是父类的无参构造器
我是--子类--的无参构造器
②,子类使用有参构造器创建对象:
SonDemo的main方法中加入
- SonDemo son = new SonDemo("than you ma");
那么控制台打印的结果是:
我是父类的无参构造器
我是子类的有参构造器,参数是than you ma
也就是说在子类调用无参构造器创建对象的时候,在执行它自己的有参构造器之前首先执行父类的无参构造器。
③,在子类中创建父类的对象,使用无参,
- SonDemo son = new SonDemo("than you ma");
- Father ff = new Father();
SonDemo的main方法中加入
我是父类的无参构造器
我是--子类--的无参构造器
我是父类的无参构造器
调用了父类的无参构造器,有参的创建对象调用的是有参构造器。
总结:在创建子类对象的时候,首先会调用父类的构造器,让后在调用子类相应的构造器创建对象,在子类创建父类对象时,就是直接调用父类自己相应的构造器。
2.如果在子类和父类中存在静态块;执行顺序有会是怎么样的了?
答,静态块会在构造器之前运行。不管是子类还是父类。创建一个对象的时候,会首先加载它的静态块。
- Father.java
- public class Father {
- //静态块
- static{
- System.out.println("father static ");
- }
- public Father(){
- System.out.println("我是父类的无参构造器");
- }
- public Father(String username){
- System.out.println("我是父类有参构造器,传过来的参数是+"+username);
- }
- }
- SonDemo.java
- public class SonDemo extends Father{
- //静态块
- static{
- System.out.println("sonDemo static ");
- }
- public SonDemo(){
- System.out.println("我是--子类--的无参构造器");
- }
- public SonDemo(String username){
- System.out.println("我是子类的有参构造器,参数是"+username);
- }
- public void sys(){
- System.out.println("我是子类的sys方法");
- }
- public static void main(String[] args) {
- SonDemo son = new SonDemo();
- }
- }
①程序的结果:
father static sonDemo static 我是父类的无参构造器 我是--子类--的无参构造器
因为在创建子类对象之前:会创建父类的一个对象,而静态块会在main之前被加载,所以两个类的静态块首先执行。
然后执行构造器。
②,如果在子类中的main中只创建父类的对象结果是怎么样的呢?
打印结果:
father static sonDemo static 我是父类的无参构造器
为什么子类的静态块会被加载了?是因为我们是在SonDemo中测试,如果在其他类中测试就不会打印。
总结:我们说了这么多就是重要的一点。静态块会在构造器器之前执行。
原文链接:http://www.cnblogs.com/pengqinping/archive/2012/05/14/2498892.html
【编辑推荐】
相关文章
- Python教程:IO
- EVM 源码解析
- 十行Python代码搞定替换证件照背景颜色
- 工装穿戴识别检测系统
- Python 内置界面开发框架 Tkinter入门篇 丙(文末有福利彩蛋,今天可是元宵节)
- Python 命令行cmd指定颜色设置
- TCP聊天服务器套接字|PyQt5+socket(TCP端口映射+端口放行)+logging+Thread(含日志,html)+anaconda打包32位exe(3.4万字)|python高阶
- python套接字多线程文件传输(大文件切割) - 协程async动态添加任务
- 从React源码分析看useEffect_2023-02-06
- React源码分析8-状态更新的优先级机制_2023-02-06
- python 分隔列队机制完美解决TCP粘包\分包问题
- python 数据库性能提升 - TCP聊天+传输文件服务器服务器套接字v2.7
- react源码中的协调与调度_2023-02-06
- 常用API大全分享!赶紧收藏起来!
- 超多免费API接口分享
- 让 APISpace 告诉你什么场景使用什么API
- 使用 Python 开发 CLI 工具并打包发布到 PyPI
- 各类免费API接口推荐,再也不怕找不到免费API了
- 快速上手python的简单web框架flask
- 热门API接口它来啦 新鲜出炉