java类加载及new对象的过程
Son son = new Son();
这句话到底做了什么事情呢?
1.javac编译.java源文件形成.class字节码文件;
2.new Sub() 对象时,先检查有没有父类,有父类,类加载器(ClassLoader)先将父类的Class文件读入内存,创建一个java.lang.Class对象,然后加载子类,类加载器将子类的Class文件读入内存,创建一个java.lang.Class对象;
3.先初始化父类的静态属性,再初始化父类的静态代码块;
4.再初始化子类的静态属性,再初始化子类的静态代码;
5.在堆内存中分配内存空间,分配内存地址,此时是因为父类的特有属性才在堆内存中为父类对象分配空间。
6.初始化父类的特有属性。
7.初始化父类的构造代码块。
8.初始化父类对象相应的构造方法。
9.在堆内存中分配内存空间,分配内存地址,此时是因为子类的特有属性才在堆内存中为子类对象分配空间的。
10.初始化子类的特有属性。
11.初始化子类的构造代码块。
12.初始化子类相应的构造方法。
13.将子类的内存地址赋值给栈中的引用对象。
public class Father {// 静态变量public static String staticField = "父类--静态变量";public String field = "父类--普通变量";// 静态块static {System.out.println(staticField);System.out.println("父类--静态块");}// 初始化块{System.out.println(field);System.out.println("父类--普通块");}// 构造器public Father() {System.out.println("父类--构造器");}
}
public class Son extends Father{// 静态变量public static String staticField = "子类--静态变量";// 变量public String sField = "子类--普通变量";// 静态块static {System.out.println(staticField);System.out.println("子类--静态块");}// 初始化块{System.out.println(sField);System.out.println("子类--普通块");}// 构造器public Son() {System.out.println("子类--构造器");}public static void main(String[] args) {System.out.println("----------------------one--------------------");Son son = new Son();System.out.println("----------------------two-------------------");Son son2 = new Son();}}
java类加载及new对象的过程相关推荐
- java方法区对象类型_浅谈Java内存区域与对象创建过程
一.java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则 ...
- Java 父类子类的对象初始化过程
转载自 Java 父类子类的对象初始化过程 摘要: Java基本的对象初始化过程,子类的初始化,以及涉及到父类和子类的转化时可能引起混乱的情况. 1. 基本初始化过程: 对于一个简单类的初始化过程是: ...
- java 创建对象的init_Java 对象创建过程。init 方法和 clinit方法。
Java 对象创建过程 判断是否加载.分配内存(指针碰撞或者空闲链表).初始化为零值.设置对象头(实例是哪个类的实例.类的元信息位置.GC 分代年龄等).init 方法. Java 虚拟机创建一个对象 ...
- 【JAVA基础篇】对象初始化过程
我们都知道,创建对象是由 new关键字调用构造方法 返回类实例(实际上还可以通过反射来创建实例). 例如 : Person jack = new Person(); 这句话到底做了什么事情呢 ? 其实 ...
- Java类加载及对象创建过程详解
类加载过程 类加载的五个过程:加载.验证.准备.解析.初始化. 加载 在加载阶段,虚拟机主要完成三件事: 通过一个类的全限定名来获取定义此类的二进制字节流. 将这个字节流所代表的静态存储结构转化为方法 ...
- java初始化实例化_Java对象的创建过程:类的初始化与实例化
一.Java对象创建时机 我们知道,一个对象在可以被使用之前必须要被正确地实例化.在Java代码中,有很多行为可以引起对象的创建,最为直观的一种就是使用new关键字来调用一个类的构造函数显式地创建对象 ...
- 从一道面试题来认识java类加载时机与过程
转自:http://www.cnblogs.com/javaee6/p/3714716.html?utm_source=tuicool&utm_medium=referral 1 开门见山 ...
- 36.JVM内存分哪几个区,每个区的作用是什么、如和判断一个对象是否存活、java垃圾回收机制、垃圾收集的方法有哪些、java类加载过程、类加载机制、双亲委派、Minor GC和Major GC
36.JVM内存分哪几个区,每个区的作用是什么? 37.如和判断一个对象是否存活?(或者GC对象的判定方法) 38.简述java垃圾回收机制? 39.java中垃圾收集的方法有哪些? 40.java类 ...
- java类加载过程_面试官:java类的加载过程
Java 类加载机制 类从被加载到JVM中开始,到卸载为止,整个生命周期包括:加载.验证.准备.解析.初始化.使用和卸载七个阶段. 其中类加载过程包括加载.验证.准备.解析和初始化五个阶段. 类的加载 ...
最新文章
- java代码段替换,java-片段添加或替换不起作用
- 自己写的一个简单的购物车的登录购买
- 利用SAP内置功能生成Search Help
- 在不进入Guest OS的情况下,取得Guest OS的IP地址
- 基于Google测试框架实现自己的测试框架
- L1-010 比较大小(8行代码AC!!!)
- 用CSS伪类制作一个不断旋转的八卦图?
- autohold有什么弊端吗_自动驻车AUTO HOLD有啥作用?怎样使用?
- POI2006 ZAB-Frogs
- 已激活的windowns、office查看用的密钥
- java留言板功能齐全源码_各类Java微信开发框架源码对比(建议收藏)
- RTR/SLA 在多ISP环境下下的应用--已经更新,切换后线路恢复时,已能自动恢复
- DB2获取CHAR字段数据的数据长度方法
- linux内核一直输出系统日志,系统日志出现大量:kernel: printk: xxxx messages suppressed...
- uni-app中自定义图表(canvas实现chart图表)开发篇(1)-圆环带进度条
- python自动获取号码归属地_Python批量获取并保存手机号归属地和运营商的示例
- 《TCP/IP卷》读书笔记
- ISO14443-3
- MAC下搭建Hexo博客
- 微信小程序——登录并保存用户信息到数据库
热门文章
- java timezone_Java TimeZone getAvailableIDs()方法与示例
- 单位矩阵属性(I ^ k = I)| 使用Python的线性代数
- Spring官方推荐的@Transactional还能导致生产事故?
- Shiro并发登录人数控制遇到的问题和解决
- 机器学习统计学相关书籍
- linux桌面版自动更新关闭了,桌面应用|开启 Ubuntu 系统自动升级
- keep老是显示服务器开小差,nginx+keepalived高可用服务器宕机解决方案
- tp获取referer里的域名_thinkPHP的redirect跳转和referer使用的问题
- mysql 测试数据的脚本_Mysql脚本 生成测试数据
- mysql删除外键_MySQL删除外键定义的方法