一.构造方法
1.源代码
public class Test{
public static void main(String[] args){
Foo obj1=new Foo();
}
}
class Foo{
int value;
public Foo(int initValue){
value=initValue;
}
}
2.程序截图
3.结果分析
若构造方法已提供,则系统不再提供默认构造方法。
二.JAVA字段初始化
1.源代码
public class InitializeBlockDemo {
public static void main(String[] args) {
InitializeBlockClass obj=new InitializeBlockClass();
System.out.println(obj.field);
obj=new InitializeBlockClass(300);
System.out.println(obj.field);
}
}
class InitializeBlockClass{
{
field=200;
}
public int field=100;
public InitializeBlockClass(int value){
this.field=value;
}
public InitializeBlockClass(){
}
}
2.程序截图
3.结果分析
关于java字段初始化问题,无继承情况:初始化块第一个执行,字段初始值设置代码第二个执行,构造函数第三个执行。
三.有继承情况的初始化问题
1.源代码
class B{
public B() {
System.out.println("父类 构造函数第四个执行");
}
{
System.out.println("父类 动态代码块第三个执行");
}
static {
System.out.println("父类 静态块第一个执行");
}
}
public class A extends B{
public A() {
System.out.println("子类 构造函数第六个执行");
}
{
System.out.println("子类 动态代码块第五个执行");
}
static {
System.out.println("子类 静态块第二个执行");
}
public static void main(String[] args) {
new A();
}
}
2.程序截图
四.
对象的初始化顺序:首先执行父类静态的内容,父类静态内容执行完毕后,执行子类内容。子类执行完后,再去看父类有没有非静态代码块,如果有就执行。父类非静态代码块--->父类构造方法--->子类非静态代码块--->子类构造方法。
五.课后作业 编写一个类,在任何时候都能查询创建对象的个数
1.源代码
public class Test { private int id; private String name; private static long count; private final static ThreadLocal tl=new ThreadLocal(); public Test() { super(); count++; tl.set(count); } public long getCount(){ return (Long)tl.get(); } public static void main(String[] args) { for (int i = 0; i < 5; i++) { Test t=new Test(); System.out.println(t.getCount()); } } }
2.程序截图