java对象的实例化过程
2012-07-15 21:05
337 查看
关于对象的实例化过程:
1.检查类是否加载,如果没有加载就加载这个类,要加载所有父类;
懒式加载(按需加载):如果第一次用到加载,只加载一下.通过ClassPath制定的路径寻找类文件(.class) 加载以后是一个对象,类型是class.获得这个类对象:student.class-->class实例
2.在内存堆中分配对象空间.递归分配所有父类和子类属性空间.先父类型再子类型,属性默认自动初始化.自动初始化为"0"值;
3.进行属性的赋值;
4.递归调用父类构造器.(默认调用父类无参构造器);
5.调用本类构造器
其实面试过程中有很多类似的考题,考的都是初始化的顺序;首先要弄清楚以下几个概念:
1.静态初始化是指执行静态初始化块里面的内容;
2.实例初始化是指执行实例初始化块里的内容;
3.构造方法:一个名称跟类的名称一样的方法,特殊在于不带返回值;
给出以下代码,方便理解:
public class TestInstanceInit {
public static int n = 0;// 静态变量
static {// 这是静态初始化块
print();
System.out.println("this is static block");
}
{// 实例初始化块
System.out.println(n);
}
public TestInstanceInit() {// 构造方法
System.out.println("this is TestInstanceInit's constructor~");
}
public static void print() {// 静态方法
System.out.println("this is static method~");
System.out.println(n);
n += 1;
}
public static void main(String[] args) {
new TestInstanceInit();
}
}
控制台输出结果:
this is static method~
0
this is static block
1
this is TestInstanceInit's constructor~
如果有一个变量怎么处理呢:
public class TestInstanceInit {
// 静态变量
public static String staticField = "静态变量";
// 变量
public String field = "变量";
// 静态初始化块
static {
System.out.println(staticField);
System.out.println("静态初始化块");
}
// 初始化块
{
System.out.println(field);
System.out.println("初始化块");
}
// 构造器
public TestInstanceInit() {
System.out.println("构造器");
}
public static void main(String[] args) {
new TestInstanceInit();
}
}
控制台输出结果:
静态变量
静态初始化块
变量
初始化块
构造器
总结如下:
执行顺序
(静态变量、静态初始化块)>(变量、初始化快)>构造器
静态变量和静态初始化快/变量和初始化快的先后顺序取决于它们在类中出现的先后顺序
1.检查类是否加载,如果没有加载就加载这个类,要加载所有父类;
懒式加载(按需加载):如果第一次用到加载,只加载一下.通过ClassPath制定的路径寻找类文件(.class) 加载以后是一个对象,类型是class.获得这个类对象:student.class-->class实例
2.在内存堆中分配对象空间.递归分配所有父类和子类属性空间.先父类型再子类型,属性默认自动初始化.自动初始化为"0"值;
3.进行属性的赋值;
4.递归调用父类构造器.(默认调用父类无参构造器);
5.调用本类构造器
其实面试过程中有很多类似的考题,考的都是初始化的顺序;首先要弄清楚以下几个概念:
1.静态初始化是指执行静态初始化块里面的内容;
2.实例初始化是指执行实例初始化块里的内容;
3.构造方法:一个名称跟类的名称一样的方法,特殊在于不带返回值;
给出以下代码,方便理解:
public class TestInstanceInit {
public static int n = 0;// 静态变量
static {// 这是静态初始化块
print();
System.out.println("this is static block");
}
{// 实例初始化块
System.out.println(n);
}
public TestInstanceInit() {// 构造方法
System.out.println("this is TestInstanceInit's constructor~");
}
public static void print() {// 静态方法
System.out.println("this is static method~");
System.out.println(n);
n += 1;
}
public static void main(String[] args) {
new TestInstanceInit();
}
}
控制台输出结果:
this is static method~
0
this is static block
1
this is TestInstanceInit's constructor~
如果有一个变量怎么处理呢:
public class TestInstanceInit {
// 静态变量
public static String staticField = "静态变量";
// 变量
public String field = "变量";
// 静态初始化块
static {
System.out.println(staticField);
System.out.println("静态初始化块");
}
// 初始化块
{
System.out.println(field);
System.out.println("初始化块");
}
// 构造器
public TestInstanceInit() {
System.out.println("构造器");
}
public static void main(String[] args) {
new TestInstanceInit();
}
}
控制台输出结果:
静态变量
静态初始化块
变量
初始化块
构造器
总结如下:
执行顺序
(静态变量、静态初始化块)>(变量、初始化快)>构造器
静态变量和静态初始化快/变量和初始化快的先后顺序取决于它们在类中出现的先后顺序
相关文章推荐
- java实例化对象的过程
- java实例化对象的过程
- java(20130731)反射、单例模式、内存里分四个区域、实例化过程、对象的销毁、命名规范、异常
- Java对象实例化的过程。
- java实例化对象的过程(转自:http://wotahouse.blogbus.com/)
- 《Java基础学习笔记》JAVA之对象实例化过程
- Java对象实例化过程分析
- 《对象创建过程中 实例化的顺序》摘自《Thinking in JAVA》
- java对象实例化过程
- JAVA基础-子类继承父类实例化对象过程
- Java中对象的实例化过程
- java实例化对象的过程
- java对象的实例化过程
- 黑马程序员—— java中对象的实例化过程
- 张孝祥老师java课程_子类对象的实例化过程
- 【java基础】一个Java对象的实例化过程!
- java对象的实例化过程
- 再学 JAVA基础(5)对象转型,多态。【子类对象的实例化过程】
- JAVA学习--子类对象实例化的全过程
- Java 实例化对象的过程