java类的成员初始化顺序
来源:互联网 发布:管家婆备份数据库布 编辑:程序博客网 时间:2024/06/07 13:05
最近在看Java编程思想,准备系统的巩固一下基础知识。
对于java类的成员初始化顺序,总结记录一下;
在一个简单无继承关系的类中 ,通过构造器初始化,直接上代码:
public class test { /** * Description * @param args */ public static void main(String[] args) { new Java(); }}class Java { { System.out.println("Java1 初始化块"); } static { System.out.println("Java静态初始化块"); } { System.out.println("Java2 初始化块"); } public Java() { System.out.println("Java构造函数"); }}执行结果:
Java静态初始化块Java1 初始化块Java2 初始化块Java构造函数可以发现:无继承关系的类中
1、静态变量或者静态初始化块按照代码中的顺序先执行
2、非静态变量或者非静态变量初始化块按照代码顺序先执行
3、构造方法执行
下面看一下有继承关系的类中初始化顺序
public class initTest { /** * @parm args */ public static void main(String[] args) { new Son(); System.out.println("************"); new Son(); }}class Father{ static { System.out.println("Fathier静态初始化块"); } { System.out.println("Fathier 初始化块"); } public Father() { System.out.println("Fathier构造函数"); }}class Son extends Father { { System.out.println("Son 初始化块"); } static { System.out.println("Son静态初始化块"); } public Son() { System.out.println("Son构造函数"); }}结果:
Fathier静态初始化块Son静态初始化块Fathier 初始化块Fathier构造函数Son 初始化块Son构造函数************Fathier 初始化块Fathier构造函数Son 初始化块Son构造函数可以看到:
1.父类静态成员和静态初始化快,按在代码中出现的顺序依次执行。
2.子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
3. 父类的非静态成员和非静态初始化块,按在代码中出现的顺序依次执行。
4.执行父类的构造方法。
5.子类非静态成员和非静态初始化块,按在代码中出现的顺序依次执行。
6.执行子类的构造方法。
并且可以看到,静态初始化块只执行一次,非静态初始化快每次都会执行,那么这两者还有什么其他区别呢?
非静态初始化块主要是用于对象的初始化操作,在每次创建对象的时都要调用一次,其执行顺序在构造方法之前。
在初始化块之前有static修饰,则为静态初始化块。由于非静态成员不能再静态方法中使用,同样也不能在静态初始化块中,因此,静态初始化块主要用于初始化静态变量和静态方法,静态初始化块只调用一次,是在类的第一次加载到内存时,并非一定要创建对象才执行,静态初始化块比非静态初始化块先执行。
阅读全文
0 0
- java类的成员初始化顺序和初始化块顺序
- Java类成员变量的初始化顺序
- Java 类成员的初始化顺序
- java类成员变量的初始化顺序
- Java类成员变量的初始化顺序
- java类中成员初始化的顺序
- Java类成员的初始化顺序
- Java类成员的初始化顺序
- JAVA类的成员初始化顺序
- java 类成员的初始化顺序
- java类的成员初始化顺序
- Java类成员初始化顺序
- java类成员初始化顺序
- java类成员初始化顺序
- Java 类成员初始化顺序
- java类的成员初始化顺序和初始化块知识
- java类的成员初始化顺序和初始化块知识
- java类的成员初始化顺序和初始化块知识
- this和super
- 换行符引发的margin问题
- ubuntu控制 mongodb
- Mybatis源码分析-配置模块
- Java中equals与==的区别
- java类的成员初始化顺序
- VisualBox环境下CentOS搭建FTP服务
- JavaScript结合筛法与缓存判断质数
- rails项目迁移中遇到的问题及解决方法
- 面向对象分析与设计概述
- 第三场个人训练赛
- 鸟哥Linux学习之——VIM基本操作(2)
- SDN资源网站
- POJ 1552 & ZOJ 1760 & UVA2787