Java 类、对象内容回顾
2016-09-27 19:51
225 查看
一、类的初始化
类的初始化:主要是执行执行类中的静态块初始化和静态变量初始化当类被用到的时候就会进行初始化,但是不一定会被实例化,实例化的时候才会执行实例域的初始化和初始化代码块的代码
class ThirdInit{ private int age=0;//这种是第一种方式 private String name="initial name"; private static String staticField="initial staticField"; { System.out.println("初始化之前 "+age+" "+name+" "+staticField); age=10; name="static name"; staticField="static staticfield"; System.out.println("初始化之后 "+age+" "+name+" "+staticField); } static { /** * 静态初始化块:用来初始化静态变量的,静态初始化块中只能接触静态变量 */ System.out.println("静态初始化之前"+staticField); staticField="static name"; System.out.println("静态初始化之后"+staticField); } public ThirdInit(String name,int age,String staticField){ System.out.println("构造器执行之前:"+age+" "+name+" "+staticField); this.name=name; this.age=age; this.staticField=staticField; System.out.println("构造器执行之后:"+age+" "+name+" "+staticField); } }
结果:
静态初始化之前initial staticField 静态初始化之后static name 初始化之前 0 initial name static name 初始化之后 10 static name static staticfield 构造器执行之前:100 new name new static field 构造器执行之后:100 new name new static field
结果说明:
当实例化一个类的时候顺序:先是静态的,然后是显示的,最后才是构造器本身
先是静态域和静态块顺序执行,显示的域初始化和块初始化顺序执行、最后是构造器本身
---------- class ThirdInit{ private int age=0;//这种是第一种方式 private String name="initial name"; private static String staticField="initial staticField"; { System.out.println("初始化之前 "+age+" "+name+" "+staticField); age=10; name="static name"; staticField="static staticfield"; System.out.println("初始化之后 "+age+" "+name+" "+staticField); } static { /** * 静态初始化块:用来初始化静态变量的,静态初始化块中只能接触静态变量 */ System.out.println("静态初始化之前"+staticField); staticField="static name"; System.out.println("静态初始化之后"+staticField); } public ThirdInit(String name,int age,String staticField){ System.out.println("构造器执行之前:"+age+" "+name+" "+staticField); this.name=name; this.age=age; this.staticField=staticField; System.out.println("构造器执行之后:"+age+" "+name+" "+staticField); } public static void main(String[] args) { System.out.println("main 方法开始执行"); } }
输出:
静态初始化之前initial staticField 静态初始化之后static name main 方法开始执行
这里说明:构造代码块和显示域是属于一个类的实例的,如果没有调用一个类的构造函数,那么这些都不会执行。
所有的动作都是从父类到子类执行的
二、对象的初始化
public class Test{ private static String staticField=init("Test类静态域初始化"); public String obField=init("Test实例域初始化"); static{ System.out.println("Test 静态块"); } { System.out.println("Test 实例域块"); } public static void main(String[] args) { System.out.println("\n main 函数开始执行,实例化Test类和Apple类---------------------------\n"); new Test(); new Apple(); } public static String init(String field){ System.out.println(field); return "static Field"; } } class Fruit{ static{ System.out.println("父类static block"); } { System.out.println("父类 block"); } public Fruit() { System.out.println("父类构造函数"); } } class Apple extends Fruit{ static{ System.out.println("子类 static block"); } { System.out.println("子类 block"); } public Apple() { System.out.println("子类 构造函数"); } }
输出结果:
Test类静态域初始化 Test 静态块 main 函数开始执行,实例化Test类和Apple类--------------------------- Test实例域初始化 Test 实例域块 父类static block 子类 static block 父类 block 父类构造函数 子类 block 子类 构造函数
这说明,用到某个类的时候它才会被加载进来并进行类初始化(执行static变量和static块,此时先执行父类的在执行子类的),当实例化的时候才会进行对象初始化(实例域初始化和代码块初始化,先父类再子类)
相关文章推荐
- Java 小例子:根据 Map 对象的内容创建 JavaBean
- java reflect:打印对象属性内容 很好的调试工具
- Java(SE)内容回顾
- java第四天学习内容回顾——java白皮书第四章
- java第三天学习内容回顾——java白皮书第四章
- 深入java的equals方法,怎么比较两个对象的内容是否相等?对象的内容指的是什么?
- Java小段子-File对象递归删除目录下所有内容
- 如何在java对象里访问Spring中已加载的property内容
- java基础知识回顾之javaIO类--File类应用:删除带内容的目录
- java第8至10天学习内容回顾——java白皮书第6章
- java 对象序列化要序列化那些内容
- JAVA对象转换成XML(<![CDATA[文本内容]]>)
- 利用Java的反射机制解析一个Class对象的详细内容(工具方法留用)
- (三)JAVA利用反射机制将XML中的内容放入实体对象中
- java如何循环输出Object对象内容
- 数据结构回顾版-java数据结构-存储对象
- 如何判断java自定义对象内容完全相同
- 黑马程序员_Java基础Day06_面向对象静态相关内容(Done)
- java第一天学习内容回顾——java白皮书第三章
- java第12天学习内容回顾——java白皮书第7章