栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中继承执行顺序

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中继承执行顺序

目录

继承执行顺序

       类中的资源分类:

       在子类中创建main方法

       在无关类中创建main方法

拓展

        代码块

        权限修饰符



继承执行顺序

        类中的资源分类:

                静态成员变量,

                静态代码块,

                静态方法,

                非静态成员变量,

                非静态代码块。

                非静态方法,

                构造方法

                main方法

                其中        静态资源和main()        执行顺序固定:

                        1,静态资源:静态成员变量和静态代码块按书写顺序执行,

                                                一般在加载类文件时执行

                        2,main方法

                 其他资源的执行时间:

                        new对象时,构造方法和非静态成员方法和非静态代码块

                                1,先执行非静态成员变量和非静态代码块:按书写顺序执行

                                2,构造方法

                                        2.1,先执行父类的非静态代码块,再执行构造方法

                                        2.2,之后执行子类的静态代码块,在执行构造方法

                        静态成员方法和非静态成员方法,调用的时候才执行

       在子类中创建main方法

1,先加载类文件:

        1.1,先加载父类的类文件,再加载子类的类文件

        1.2,类中类文件加载顺序

                1.2.1,先加载声明

                                 只加载静态成员变量的声明,不加载静态成员方法的声明

                                 只加载声明不加载值,无论其声明是否赋值

                                不加载静态代码块中的变量,因为其相当于局部变量,用完就销毁

                                静态代码块 和 非静态代码块  相当于方法,{ }里面的内容相当于方法体代码,

                        其中声明的变量是局部变量,执行完代码块就会销毁

                1.2.2,静态代码块和静态变量的执行顺序,是按照书写顺序来的

                        此处,静态变量的执行  就是  为静态变量赋值

2,执行main方法

        2.1,main方法中的代码块,按顺序执行

        2.2,执行new对象时,

                2.2.1,先访问父类的构造方法,再访问子类的构造方法

                2.2.2,访问构造方法时,先访问类中的非静态代码块,然后执行构造方法的方法体代码

        详细步骤:执行new子类对象时,

                1,先跳转到子类的构造方法的声明上,

                2,什么也不执行,跳转到父类的构造方法声明上,

                3,什么也不执行,先执行父类的非静态代码,按书写顺序执行,

                        此时,会初始化成员变量

                4,执行完毕父类的非静态代码后,才开始执行构造方法的方法体代码,

                        此时,会使用        传入的参数        为变量        赋值

                5,执行完后跳转到子类的构造方法上,

                6,什么也不执行,先执行子类的非静态代码,

                        此时,会初始化成员变量

                7,执行完毕父类的非静态代码之后,才执行子类的构造方法

                        此时,会使用        传入的参数        为变量        赋值

       在无关类中创建main方法

1,先加载main()所在类的类文件,

        如果该类静态资源中有与其它类相关的调用,就加载其他类

2,执行main()

        2.1,按书写顺序执行代码

        2.2,new子类对象时,具体参照上面:

                2.2.1,先加载父类的类文件,再加载子类的类文件

                2.2.2,先执行父类的非静态代码,再执行父类的构造方法

                2.2.3,先执行子类的非静态代码,再执行子类的构造方法

拓展

        代码块

代码块相当于一个方法,{ }定义的变量相当于局部变量, 因此

1,代码块中的声明的变量用完即毁

2,代码块中变量不能用权限修饰符修饰

3,使用 静态/非静态代码块 时,最好  先在外面声明变量,然后再在代码块中给变量赋值

        权限修饰符

权限修饰符,针对的是访问的位置

        public:            所有地方都能访问

        protected:      包修饰符,可以在同个包下的任意位置访问

                                子类修饰符,可以被所有子类访问到

        default:          包修饰符,可以在同个包下的任意位置访问

        private:          只能被本类访问

        因此在不同的类中,类对象能够访问到的字段内容不一样

特例:protected比较特殊

        protected修饰的内容,在同个包下和其他修饰符一样,但在不同包下的子类中,想要访问就需要特定的方式:

        错误方式:

                在不同包下的子类中,通过创建父类对象baseClass,访问protected修饰的内容,编译器会报错,无法解析该字段

        正确方式:

                通过   创建子类的对象,通过子类对象访问   父类protected修饰的内容

        protected修饰符  特例原因  讲解:              为什么子类中不能访问另一个包中父类中的protected方法?_Yang Special的博客-CSDN博客_protected不同包的子类能不能访问父类

   

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/851296.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号