new(创建)一个对象时都发生了什么?
以 Student s=new Student() 为例:
Java语言中创建一个对象时的整个过程主要有两个步骤:
1.类加载过程
- 加载:将类名下的字节码文件加载进虚拟机(VM),并存储在方法区,并转换成java.lang,class对象实例;
- 验证:验证是否符合文件规范;
- 准备:为类中静态变量都赋初始值,final直接赋值;
- 解析:将常量池中的符号引用转为直接引用;
- 初始化:a.为静态变量赋值;b.执行static代码块(类的加载顺序是先加载父类后加载子类,且static静态代码块和静态变量和类一样最先加载);
最终方法区会存储当前类类信息,包括类的静态变量、类初始化代码(定义静态变量时的赋值语句 和 静态初始化代码块)、实例变量定义、实例初始化代码(定义实例变量时的赋值语句实例代码块和构造方法)和实例方法,还有父类的类信息引用。
2.创建对象
- 加载Student.class文件进方法区
- 在栈内存为s开辟空间
- 在堆内存为学生对象开辟空间
- 对学生对象的成员变量进行默认初始化
- 对学生对象的成员变量进行显示初始化
- 学生对象初始化完毕,把对象地址赋值给s变量,即可进行下一步操作;
new(创建)一个对象时都发生了什么?相关推荐
- 十天学Linux内核之第七天---电源开和关时都发生了什么
十天学Linux内核之第七天---电源开和关时都发生了什么 原文:十天学Linux内核之第七天---电源开和关时都发生了什么 说实话感觉自己快写不下去了,其一是有些勉强跟不上来,其二是感觉自己越写越差 ...
- 计算机启动时都发生了什么?
计算机启动时都发生了什么? 介绍下基本输入输出系统 1.BIOS(Basic I/O system) BIOS 也就是基本输入输出系统 – 同时也是计算机启动时加载的第一个软件 它的位置: 计算机主板 ...
- 813-当你请求www.baidu.com时都发生了什么?
当你请求www.baidu.com时都发生了什么? 同一个局域网中不同主机的互联 先看个简单的,同一个局域网中的不同主机A.B之间是如何互联交换数据的.如下图: 那,既然是同一个局域网中,说明A.B的 ...
- 这一次!我在百度告诉你,当你请求百度时都发生了什么...
文章目录 一.Hi All 二.同一个局域网中不同主机的互联 三.跨网段不同主机的互联 四.百度的响应包如何再打回到你的机器? 五.求关注啦! 一.Hi All 这一次,我在IDC机房告诉你,当你请求 ...
- 创建一个对象时,在一个类当中 静态代码块 和普通代码块构造方法 的顺序?
一:前言须知 普通代码块,在创建对象实例的时候,会被调用,每创建一次,就调用一次 静态代码块,在类加载的时候执行,并且只会执行一次 类加载的时机: 创建对象实例的时候(new) 创建子类实例的时候,父 ...
- 设计模板类,使得在创建一个对象时可以动态确定它的基类(public)
#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; class base_A { public: ...
- java代码默认保存在哪里,java创建程序时程序保存在什么地方
程序运行时,我们最好对数据保存到什么地方做到心中有数.特别要注意的是内存的分配.有六个地方都可以保存数据: (1) 寄存器.这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部.然而 ...
- GNS3模拟器中关于创建vtp时,内存空间不足问题的解决
使用GNS3模拟器时,创建vtp时,发生了如下错误: 3560-2(vlan)#vtp domain aaa Domain name already set to aaa . 3560-2(vlan) ...
- java中new一个对象时具体都发生了什么?
java是一门面向对象的程序设计语言,在java中一切皆为对象.在java中创建一个新对象的方式有很多种如new+构造方法,克隆,反射,反序列化等.那么当我们new一个对象时,java底层都经过了怎样 ...
最新文章
- Java中的I/O模型总结(八股文自述)
- 有理有据:一篇来自前端同学对后端接口的吐槽!
- mysql和mybatis优化_MySQL + mybatis的SQL优化方案
- html标题电脑快速输入,快速把纸上文字输入到电脑中的技巧
- linux100day(day8)--shell监控脚本练习
- Leetcode之javascript解题(No33-34)
- 加密Python脚本
- C#学习你需要知道的---(For和Foreach)
- Linux shell统计文件数脚本,使用shell脚本巧妙统计文件
- mysql获取上周时间戳_php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)...
- LitePal使用详解
- 数据库管理系统的基本组成
- 电脑桌面云便签怎么开启窗口置顶一直让悬浮便签显示在屏幕上?
- photoshop柔光模式原理和案例教程
- Ubuntu 18.04 安装微信wechat
- 数字图像处理实验八--图像分割
- 第三方支付4(前端实现支付)
- matlab模拟退火算法工具箱下载,Matlab的模拟退火算法工具箱
- Hyperledger Fabric 2.3环境配置搭建指南及BUG记录
- 静态html无法进行post请求,静态页接收post请求
热门文章
- FL Studio教程之如何加载采样
- 判断二叉树是否能成为折半查找判定树
- 2022年全球与中国PLC光分路器市场现状及未来发展趋势
- 【云计算与大数据技术】分布式数据库NoSQL中KV、列式、图、文档数据库的讲解(图文解释 超详细)
- Microsoft PlayReady DRM及其工作原理
- 一名职业3D建模师的学习经历,月薪28K依然焦虑
- 【文摘】《原则》——雷.达里奥
- Solid Sphere Inc.:智能手机原创恶搞App“Takeshobo Quest - POP TEAM EPIC ASSAULTS”
- 学习AI人工智能,你必须要知道的4件事!
- 【DBC专题】-5-DBC文件格式解析