Java基础重温(四)对象初始化加载
2013-06-23 17:15
543 查看
Java中类的加载顺序:
1.虚拟机在首次加载Java类(怎么个加载法???待解)时,会对静态初始化块,静态成员变量,静态方法进行一次初始化。
2.只有在使用new构造实例时才会创建类的实例。
3.当类的字节码被加载时,如果没有创建对象,那么实例变量不会被分配内存,累的实例方法也不会被分配入口地址,当该类创建第一个实例时,
类的实例方法就被分配了入口地址(所有的实例方法),当再创建对象时,不再为实例方法分配入口地址,也就是说,入口地址为所有的对象所共有
当所有的对象都不存在了时,这是实例方法的入口地址才会被撤销。
4.当类的字节码被加载时,那么类的类变量会被分配给相应的内存空间,该空间被类的所有对象共享,直到程序退出时,该空间才被释放;
类方法也会在字节码被加载时就会被分配相应的入口地址,直到程序退出时才会被撤销。
5.类实例的创建过程:
按照父子继承的关系进行初始化,首先执行父类的类变量初始化,类方法初始化,静态块,然后是子类的类变量初始化,类方法初始化,静态语句块,
再执行父类的实例变量初始化,实例方法初始化,实例块,然后是父类的构造方法;
再执子类的实例变量初始化,实例方法初始化,实例块,然后是子类的构造方法;
6.类被销毁时,先销毁子类部分再去销毁父类部分。
7.当子类只调用父类的静态方法而没调用自己的静态方法时,子类的类变量,类方法不会被初始化,静态块不会被执行
1.虚拟机在首次加载Java类(怎么个加载法???待解)时,会对静态初始化块,静态成员变量,静态方法进行一次初始化。
2.只有在使用new构造实例时才会创建类的实例。
3.当类的字节码被加载时,如果没有创建对象,那么实例变量不会被分配内存,累的实例方法也不会被分配入口地址,当该类创建第一个实例时,
类的实例方法就被分配了入口地址(所有的实例方法),当再创建对象时,不再为实例方法分配入口地址,也就是说,入口地址为所有的对象所共有
当所有的对象都不存在了时,这是实例方法的入口地址才会被撤销。
4.当类的字节码被加载时,那么类的类变量会被分配给相应的内存空间,该空间被类的所有对象共享,直到程序退出时,该空间才被释放;
类方法也会在字节码被加载时就会被分配相应的入口地址,直到程序退出时才会被撤销。
5.类实例的创建过程:
按照父子继承的关系进行初始化,首先执行父类的类变量初始化,类方法初始化,静态块,然后是子类的类变量初始化,类方法初始化,静态语句块,
再执行父类的实例变量初始化,实例方法初始化,实例块,然后是父类的构造方法;
再执子类的实例变量初始化,实例方法初始化,实例块,然后是子类的构造方法;
public class Parent { private static int staticInt = 2; private int nonStaticInt = 3; { System.out.println("I'm in parent's non-static block..."); System.out.println("I'm parent's nonStaticInt, value= " + nonStaticInt); nonStaticMethodParent(); } static{ System.out.println("I'm in parent's static block..."); System.out.println("staticInt's value in parent = " + staticInt); } public Parent() { System.out.println("I'm in parent constructor..."); } public void nonStaticMethodParent() { System.out.println("I'm in parent's non-static method..."); } public static void staticMethodParent() { System.out.println("I'm in parent's static method..."); } }子类
public class Child extends Parent{ private static int staticInt; private int nonStaticInt = 33; { System.out.println("I'm in child's non-static block..."); } static{ System.out.println("I'm in child's static block..."); System.out.println("staticInt's value in parent = " + staticInt); } public Child() { System.out.println("I'm in child's constructor..."); } public void nonStaticMethodChild() { System.out.println("I'm in child's non-static method..."); } public static void staticMethodChild() { System.out.println("I'm in child's static method..."); } }测试类
public class Test { public static void main(String[] args) { Child child = new Child(); //Child.staticMethodChild(); //Child.staticMethodParent(); } }结果:
6.类被销毁时,先销毁子类部分再去销毁父类部分。
7.当子类只调用父类的静态方法而没调用自己的静态方法时,子类的类变量,类方法不会被初始化,静态块不会被执行
public class Test { public static void main(String[] args) { //Child child = new Child(); //Child.staticMethodChild(); Child.staticMethodParent(); } }结果:
相关文章推荐
- Java基础2面向对象:透析类的加载与初始化 对象的初始化 zongjihengfei
- 黑马程序员——Java基础——对象的初始化
- JAVA基础--类加载&对象创建过程
- Java基础学习笔记--对象的初始化
- Java语言基础:对象的初始化
- java基础---->对象的创建过程(初始化、析构、清理)
- [java基础]类初始化和加载
- java基础---->对象的创建过程(初始化、析构、清理)
- Java基础-对象的内存分配与初始化
- [Think In Java]基础拾遗1 - 对象初始化、垃圾回收器、继承、组合、代理、接口、抽象类
- Java基础——类和对象的初始化过程
- java基础-反射1(类型信息,Class对象简介,Class对象初始化)
- Java基础-对象的内存分配与初始化
- JAVA基础教程:类加载和初始化顺序
- Java基础知识-对象初始化
- java的继承关系中对象的加载和初始化顺序
- Java基础之写文件——使用Formatter对象加载缓冲区(UsingAFormatter)
- JAVA对象的加载和对象的初始化
- JAVA基础--类加载&对象创建过程
- JAVA基础之对象的初始化