书上说,Java中的初始化块总是优先于构造器执行,可是他们两个都是在进行变量的初始化,为什么初始化了一次,还要调用构造器初始化呢?这我就有点不理解了,他们两个到底有什么区别啊?创建对象的时候他们俩到底都干了些什么啊?求好人指点!!!
其实初始化块就是构造器的补充,初始化块是不能接收任何参数的,定义的一些所有对象共有的属性、方法等内容时就可以用初始化块了初始化!!
好处是可以提高初始化块的复用,提高整个应用的可维护性。--《疯狂java讲义》
你可以看一下这个博客
http://blog.csdn.net/jeep_ouc/article/details/26412191
调用方法吧,不记得了
因为程序的执行顺序是静态变量、静态代码块、静态方法、普通变量、构造方法、普通方法。main函数是程序的入口规定是静态的所以在main函数里面必须是静态方法,而不能使用普通方法,因为在执行main函数的时候这个方法还没有被加载
当你需要在类加载之前先定义属性或方法时,他就有用了,比如,jdbcUtils
初始化代码块是在jvm在加载类的时候运行的,简单理解他只执行了一次。但是构造方法不同,每次创建对象你都会调用一次构造方法。
如果想深究其中的原因,建议看一下java的类加载器运行机制。
静态块属于类,构造函数属于实例子,参见博客类型的生命周期
和博客对象的生命周期
当创建一个实例的时候执行顺序为静态修饰的变量或者方法或者初始化块》》一般初始化块》》构造函数
Java中的初始化,是属于类加载的范畴,是在类加载解析的时候完成的
Java中的初始化,是属于类加载的范畴,是在类加载解析的时候完成的,
其实给我开发那么久觉得初始化就是给初值
静态初始化块在类的加载过程中会执行,类加载包括了加载、验证、准备、解析、初始化,静态初始化快在初始化过程中,是隐藏的方法,初始块中还包括了静态变量的赋值,静态初始化块有jvm保证线程安全性,常用的用法有设置静态共享实例等。
实例初始化块会增加到各个构造器的invokespecial (super init) this后,常用于实例数据的初始化。
初始化的内容, 在程序中不用new 一个类的对象, 也能使用