动手动脑
如果类提供了一个自定义的构造方法,系统不再提供默认的构造方法。
2.public static void main(String[] args) {
InitializeBlockClass obj=new InitializeBlockClass();
System.out.println(obj.field);
obj=new InitializeBlockClass(300);
System.out.println(obj.field);
}
}
Java进行初始化的地方有两个:初始化块和构造函数,其中初始化块又分为静态初始化块和实例初始化块。
静态初始化块是类中由static修饰的初始化块,实例初始化块为类中没有任何关键字修饰的初始化语句。
如果在主函数中创建对象时没有形参时,如果在类中定义了公共的变量并给与了赋值,那么就会把值赋给主函数中的变量,再调用类中的默认构造函数,
如果在主函数中创建对象时有形参,则调用类中对应的构造函数。
3.class
Root
{
static
{
System.out.println(
"Root的静态初始化块"
);
}
{
System.out.println(
"Root的普通初始化块"
);
}
public
Root()
{
System.out.println(
"Root的无参数的构造器"
);
}
}
class
Mid
extends
Root
{
static
{
System.out.println(
"Mid的静态初始化块"
);
}
{
System.out.println(
"Mid的普通初始化块"
);
}
public
Mid()
{
System.out.println(
"Mid的无参数的构造器"
);
}
public
Mid(String msg)
{
//通过this调用同一类中重载的构造器
this
();
System.out.println(
"Mid的带参数构造器,其参数值:"
+ msg);
}
}
class
Leaf
extends
Mid
{
static
{
System.out.println(
"Leaf的静态初始化块"
);
}
{
System.out.println(
"Leaf的普通初始化块"
);
}
public
Leaf()
{
super
(
"Java初始化顺序演示"
);
System.out.println(
"执行Leaf的构造器"
);
}
}
public
class
TestStaticInitializeBlock
{
public
static
void
main(String[] args)
{
new
Leaf();
}
}
静态初始化块的执行顺序:
1.静态初始化块只执行一次。
2.创建子类型的对象时,也会导致父类型的静态初始化块的执行。
4,
数值在[-128,127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用;否则创建一个新的Integer对象。
5.p
ublic
class
InitializeBlockClass {
{field=
200
;}
public
int
field=
100
;
public
InitializeBlockClass(
int
value) {
this
.field=value;
}
public
InitializeBlockClass() {
}
}
public
class
obj {
public
static
void
main(String[] args) {
InitializeBlockClass obj=
new
InitializeBlockClass();
System.out.println(obj.field);
obj=
new
InitializeBlockClass(
300
);
System.out.println(obj.field);
}
}
结果为:100 300