JAVA中对象创建和初始化过程

C#读取和写入excel表数据--手把手教详解 C#读写excel数据详解 阅读详情

 

 

 

<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Cambria; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1073741899 0 0 159 0;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750139 0 0 159 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:宋体; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi; mso-font-kerning:1.0pt;} h1 {mso-style-priority:9; mso-style-unhide:no; mso-style-qformat:yes; mso-style-link:"标题 1 Char"; mso-style-next:正文; margin-top:17.0pt; margin-right:0cm; margin-bottom:16.5pt; margin-left:0cm; text-align:justify; text-justify:inter-ideograph; line-height:240%; mso-pagination:lines-together; page-break-after:avoid; mso-outline-level:1; font-size:22.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-font-kerning:22.0pt;} h2 {mso-style-priority:9; mso-style-qformat:yes; mso-style-link:"标题 2 Char"; mso-style-next:正文; margin-top:13.0pt; margin-right:0cm; margin-bottom:13.0pt; margin-left:0cm; text-align:justify; text-justify:inter-ideograph; line-height:173%; mso-pagination:lines-together; page-break-after:avoid; mso-outline-level:2; font-size:16.0pt; font-family:"Cambria","serif"; mso-ascii-font-family:Cambria; mso-ascii-theme-font:major-latin; mso-fareast-font-family:宋体; mso-fareast-theme-font:major-fareast; mso-hansi-font-family:Cambria; mso-hansi-theme-font:major-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:major-bidi; mso-font-kerning:1.0pt;} h3 {mso-style-priority:9; mso-style-qformat:yes; mso-style-link:"标题 3 Char"; mso-style-next:正文; margin-top:13.0pt; margin-right:0cm; margin-bottom:13.0pt; margin-left:0cm; text-align:justify; text-justify:inter-ideograph; line-height:173%; mso-pagination:lines-together; page-break-after:avoid; mso-outline-level:3; font-size:16.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-font-kerning:1.0pt;} span.1Char {mso-style-name:"标题 1 Char"; mso-style-priority:9; mso-style-unhide:no; mso-style-locked:yes; mso-style-link:"标题 1"; mso-ansi-font-size:22.0pt; mso-bidi-font-size:22.0pt; mso-font-kerning:22.0pt; font-weight:bold;} span.2Char {mso-style-name:"标题 2 Char"; mso-style-priority:9; mso-style-unhide:no; mso-style-locked:yes; mso-style-link:"标题 2"; mso-ansi-font-size:16.0pt; mso-bidi-font-size:16.0pt; font-family:"Cambria","serif"; mso-ascii-font-family:Cambria; mso-ascii-theme-font:major-latin; mso-fareast-font-family:宋体; mso-fareast-theme-font:major-fareast; mso-hansi-font-family:Cambria; mso-hansi-theme-font:major-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:major-bidi; font-weight:bold;} span.3Char {mso-style-name:"标题 3 Char"; mso-style-priority:9; mso-style-unhide:no; mso-style-locked:yes; mso-style-link:"标题 3"; mso-ansi-font-size:16.0pt; mso-bidi-font-size:16.0pt; font-weight:bold;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} -->

 

 


JAVA中对象创建和初始化过程

分析一下JAVA中对象创建和初始化过程中涉及的相关概念问题,java中栈(stack)与堆(heap),对象、引用、句柄的概念。

  
1.Java中的数据类型

  Java中有3个数据类型:基本数据类型(在Java中,boolean、byte、short、int、long、char、float、double这八种是基本数据类型)、引用类型和null类型。其中,引用类型包括类类型(含数组)、接口类型。

  下列语句声明了一些变量:

以下是引用片段:
  int k ; 
  A a; //a是A数据类型的对象变量名。 
  B b1,b2,…,b10000;// 假定B是抽象类或接口。 
  String s; 

  注意:从数据类型与变量的角度看,基本数据类型变量k、类类型变量a和s、抽象类或接口类型变量b(1万个),它们都是变量(标识符)。

  
2.关于句柄(handle)

  为了区别引用类型的变量标识符和基本数据类型变量标识符,我们特别的使用Handle来称呼引用类型的变量标识符。上面例子中b1至b10000、a、s都是Handle。Handle直观的看就是手柄、把手,我们采用计算机界常用的中文翻译“句柄”。

 
 2.1【Windows编程中的】句柄的含义

  句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。

  从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一 样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句 柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。

  如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序 的各对象是驻留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大 错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满 足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?

  为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单 元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就 可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。

  句柄地址(稳定)→记载着对象在内存中的地址————→对象在内存中的地址(不稳定)→实际对象

 
 2.2Java中句柄的意义

  对句柄以前的【Windows编程中的】含义有了深刻的认识,我们可以说Handle是一个我们学习Java时非常需要的术语。它的意义在于区别“对象本身”和对象变量(或者严格点:对象所属的数据类型的变量标识符)。

  2.3回到1中的变量声明:

  现在,你应该对下面的注释一目了然。

  int k, j ;//k里面存放的是一个整型数。

  A a; //a里面存放地址。

  B b1,b2,…,b10000;// b1,…,b10000里面存放地址。

  String s; //s里面存放地址。

 
 3.关于引用(reference)

  什么是“引用”? “the identifier you manipulate is actually a ‘reference’ to an object”。(Thinking in Java 2e )


 

 

2

JAVA中对象创建和初始化过程

 

  翻译是:你操纵的标识符实际上是一个对象的“引用”。或者精确些,翻译成:你操作的标识符实际上是指向一个对象的“引用”。显然,原文中reference是一个有方向感的东西。

  回到Java中来,引用可以想象成对象的身份证号码、对象的ID或者对象的手机号码。当然,更多的说法是,引用是对象在内存中住的房间号码。直观的说,对象的引用是创建对象时的返回值!引用是new表达式的返回值。

  new A(); 这里真正创建了一个对象,但我们没有用句柄去持有(hold、拿着、保存)该引用。从微观上看,new表达式完成了对象初始化的任务(三步曲,下文详细分析),整体上看则返回一个引用。

  再次回到1中的变量声明,再看看下面的注释。

  A a; //声明句柄a,但未初始化,所以里面的值为null。

  B b1,b2,…,b10000;// 声明句柄b1,…,b10000,但未初始化,所以里面的值为null。

  String s; //声明句柄s,但未初始化,所以里面的值为null。

  4.句柄与引用的关系

  A a;//声明句柄a,值为null

  a=new A();//句柄的初始化(句柄 = 引用;即把引用赋值给句柄)

  引用:new A()的值。引用可以简单的看作对象占据内存空间的地址;通过对象的引用,就可以方便的与其他对象区别开来,引用就是对象独特的身份标识。

  完成句柄的初始化后,就可以用句柄遥控对象了。

  当然,这只是从一方面解释对象的创建和初始化,理解了句柄和引用的关系后,下面分析对象初始化的整个过程。先做以下准备工作,说说栈与堆。

 
 5.java中栈(stack)与堆(heap)

  在java中内存分为“栈”和“堆”这两种(Stack and Heap).基本数据类型存储在“栈”中,对象引用类型实际存储在“堆”中,在栈中只是保留了引用内存的地址值。

  顺便说说“==”与“equals()方法”,以帮助理解两者(Stack and Heap)的概念。

  在Java中利用"=="比较变量时候,系统使用变量在stack(栈)中所存的值来作为对比的依据,基本数据类型在stack中所存的值就 是其内容值,而引用类型在stack中所存放的值是本身所指向Heap中对象的地址值。 Java.lang包中的Object类有 public boolean equals (Object obj)方法。它比较两个对象是否相等。仅当被比较的两个引用指向同一对象时(句柄相 等),对象的equals()方法返回true。(至于String类的equals()方法,它重写(override)equals()方法,不在本 文讨论之列。)

  6.对象的创建和初始化过程

  在java中对象就是类的实例。在一般情况下,当把一个类实例化时,此类的所有成员,包括变量和方法,都被复制到属于此数据类型的一个新的实例中去。分析以下两段代码。

  6.1 Vehicle veh1 = new Vehicle();

  上面的语句做了如下的事情:

  ①右边的“new Vehicle”,是以Vehicle类为模板,在堆空间里创建一个Vehicle类对象(也简称为Vehicle对象)。

  ②末尾的()意味着,在对象创建后,立即调用Vehicle类的构造函数,对刚生成的对象进行初始化。构造函数是肯定有的。如果没创建,Java会补上一个默认的构造函数。

  ③左边的“Vehicle veh1”创建了一个Vehicle类引用变量。

  ④“=”操作符使对象引用指向刚创建的那个Vehicle对象。(回想一下句柄与引用)

  将上面的语句分为两个步骤:

  Vehicle veh1;

  veh1 = new Vehicle();

  这样写,就比较清楚了,有两个实体:一是对象引用变量,一是对象本身。在堆空间里创建的实体,与在栈空间里创建的实体不同。尽管它们也是确确 实实存在的实体,但是似乎很难准确的“抓”住它。我们仔细研究一下第二句,找找刚创建的对象叫什么名字?有人说,它叫“Vehicle”。不 对,“Vehicle”是类(对象的创建模板)的名字。一个Vehicle类可以据此创建出无数个对象,这些对象不可能全叫“Vehicle”。对象连名 都没有,没法直接访问它。我们只能通过对象引用来间接访问对象。

  6.2 Vehicle veh2;

  veh2 = veh1;

  由于veh1和veh2只是对对象的引用,第二行所做的不过是把veh1的引用(地址)赋值给veh2,使得veh1和veh2同时指向唯一的一个Vehicle对象。

 
 6.3 veh2 = new Vehicle();

  则引用变量veh2改指向第二个对象。

  从以上叙述再推演下去,我们可以获得以下结论:①一个对象引用可以指向0个或1个对象;②一个对象可以有N个引用指向它。

 

BVH2SMPL 实战笔记 阅读详情

相关推荐

【IC】Redhawk-SC输入件配置

Redhawk sc

u011808788的博客 1778

Java:对象创建和初始化过程

分析一下Java中对象创建和初始化过程中涉及的相关概念问题,java中栈(stack)与堆(heap),对象、引用、句柄的概念。@Author:ZJ 06-11-25Blog: [url]http://zhangjunhd.blog.51cto.com/[/url] 1.Java中的数据类型 Java中有3个数据类型:基本数据类型(在Java中,boolean、by...

weixin_34309435的博客 155

AD9361 FIR 滤波器设计

matlab 得到滤波器系数

weixin_44630490的博客 1万+

java对象创建过程/初始化顺序

转自:http://blog.youkuaiyun.com/yakihappy/article/details/3979357 Java虚拟机创建一个对象都包含以下步骤。 (1)给对象分配内存。 (2)将对象的实例变量自动初始化为其变量类型的默认值。 (3)初始化对象,给实例变量赋予正确的初始值。   对于以上第三个步骤,Java虚拟机可采用3种方式来初始化对象,到底采用何种初始化方式取决于创建

Hello World! 3574

SAP MM 物料描述MAKTX 40个字符不够用的问题处理

SAP物料描述表,长度40个字符一般情况下,40个字符在描述中也够用了,但是要加上规格之类的额外描述就不一定了,特别是对于辅助件-刀具。解决方案一:对maktx增强,换成CHAR80或者CHAR100的,但是风险较大,涉及到好多地方,另外SAP+ 算号器 也不支持。解决方案二:增强字段。内部顾问,建议在 那就在这里加一个字段,具体过程如下:1、创建域2、创建架构3、附加架构4、GUI 设置 5、后台设置6、MASS/MM17字段新增。过程1、创建域 SE112、创建结构 se11 3、MARA附加架构

GAVIN 4732

安卓7.0+抓包难题:雷电模拟器9.0+Charles系统证书安装全攻略

HTTPS协议通过SSL/TLS加密保障网络通信安全,其核心机制依赖于证书信任链。在Android系统中,自7.0版本起,谷歌收紧了证书信任策略,默认仅信任系统预置的CA证书,这直接导致了传统抓包方法失效。理解这一原理对于移动开发、测试及安全研究至关重要,它揭示了应用层安全策略与系统底层机制的关联。通过将用户证书安装至系统信任区,可以突破此限制,实现HTTPS流量的解密与分析。这一技术在App调试、接口测试、安全审计等场景中具有广泛的应用价值。本文以雷电模拟器9.0和Charles抓包工具为例,详细演示了如

weixin_42521843的博客 280

java创建对象过程 实例化和初始化

我们先看看类的加载过程, 上图只是类的加载过程,还没有创建对象; 那如果创建对象的话,里面主要有2个步骤,分别是实例化和初始化 实例化 对象实例化的过程,首先会为该对象分配一块堆内存用来存放对象和父类的属性实例,并且给对象和父类的属性进行复制,这里的赋值都是给默认值,也就是零值; 初始化 初始化就需要给属性赋值真正的数据了,这个数据是用户给定的,如果是引用的话,就会将引用变量指向给定的地址,并且调用初始化方法 init() 方法:就是我们说的构造器,构造器就包...

叶新东老师的博客 4032

【GAMES201学习笔记】物质点法入门

《GAMES201》 学习笔记

捕鱼维的个人小站 9201

关于java中创建对象时属性的初始化过程

java是一种面向对象的编程语言,那么了解创建对象时程序会怎么执行就变得尤为重要,下面我们就一起看看在我们使用new关键字创建对象时是怎么对属性初始化的: 下面是一个Person类,其中有成员变量age和静态变量name public class Person { private int age; //年龄 public static String nam...

whr1226的博客 2901

【YOLO26保姆级零踩坑教程】环境搭建+五大任务快速入门,一行代码实现检测/分割/姿态/OBB/分类(Win+Linux全适配)

YOLO26环境搭建与实战指南:零踩坑全适配 本文是YOLO26全栈技术专栏的入门篇,提供Windows/Linux双系统的纯实战环境搭建指南,主打零踩坑、全适配。YOLO26基于Ultralytics框架优化,无需编译源码或手动下载权重,原生支持多任务推理。 环境配置关键点: 必须安装Ultralytics 8.4.0及以上版本 支持CPU/GPU环境,推荐Python 3.8-3.11 提供清华源配置解决下载慢问题 安装步骤: CPU版:一键安装Ultralytics和OpenCV GPU版:匹配CUD

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 774

一文读懂 CST 时/频域求解器

本文系统介绍了CST Studio Suite中的关键网格技术——六面体网格、四面体网格以及TLM求解器专用的八叉树非均匀网格技术。重点阐述了六面体网格的三项核心技术:理想边界拟合(PBA)技术可精确处理曲面边界,薄片技术(TST)能高效模拟薄层结构,自适应八叉树网格实现计算资源最优分配。同时详细对比了六面体网格与四面体网格的特点及适用场景,前者适用于系统级EMC/EMI分析等时域问题,后者擅长处理复杂曲面和异质材料的频域问题。

一只豌豆象的博客 468

面试难点-java中创建和初始化对象的过程

例: public class Person { private String name = "zs"; public Person() { System.out.println("Person构造器"); print(); } public void print() { System.out.println("Person print方法: name = " + name); } } class Stu

深海大冒险的博客 263

基于鸿蒙 UniProton 的汽车电子系统开发指南

基于鸿蒙UniProton实时操作系统,提供了汽车电子系统开发的完整指南。通过统一的设计模式和开发规范,实现了高效、可靠的汽车电子系统开发。

m0_67505153的博客 179

[转]JAVA中对象创建和初始化过程

 1.Java中的数据类型  Java中有3个数据类型:基本数据类型(在Java中,boolean、byte、short、int、long、char、float、double这八种是基本数据类型)、引用类型和null类型。其中,引用类型包括类类型(含数组)、接口类型。  下列语句声明了一些变量: 以下是引用片段:  int 

crystal的专栏 1117

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

深入理解Java对象的创建过程:类的初始化与实例化

版权声明:本文为转载文章,遵循 CC 4.0 BY-SA 版权协议。 ...

th1996的博客 354

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java对象的创建及初始化过程

对于学习Java的大家来说应该都知道当我们创建对象时,对象和其实例成员是被一起保存在JVM的堆内存里面的,然后调用构造器对对象实例成员进行初始化,之后再执行程序。但是有时候我们会发现程序的一些执行结果非常令人费解,比如下面的例子:public class SubClass extends SuperClass{ int j = 30; public SubClass(){ print(); j...

IT小灰的博客 1028

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

JAVA关于对象创建过程中初始化和声明顺序问题

代码作者 问题1:关于静态变量声明和初始化 /** * Java 测试代码 * Power by http://www.litefeel.com * @author lite3 */ public class Test { public static Test1 t = new Test1(); public static int a = 0; public st...

yiqzq的博客 603

java创建和初始化对象的过程

java创建和初始化对象的过程 1、类加载,默认初始化类中的静态属性 2、执行静态代码块 3、分配内存空间,初始化非静态属性 4、调用父类构造器 5、对类中的属性进行显性赋值 6、执行匿名代码块 7、执行构造方法 8、返回内存地址 ...

Sun_hxx的博客 165

java对象创建过程及初始化顺序

转自:http://blog.youkuaiyun.com/yakihappy/article/details/3979357Java虚拟机创建一个对象都包含以下步骤:(1)给对象分配内存。(2)将对象的实例变量自动初始化为其变量类型的默认值。(3)初始化对象,给实例变量赋予正确的初始值。对于以上第三个步骤,Java虚拟机可采用3种方式来初始化对象,到底采用何种初始化方式取决于创建对象的方式。(1)如果对象是通

LG的博客 823

Java创建对象过程:类的初始化和实例化

Java对象的创建过程往往包括类初始化和类实例化两个阶段。类的初始化在前、类的实例化在后。注意:这与spring的bean正好相反,spring的bean的生命周期,主要是先进行实例化java对象,然后在进行操作属性、最后进行初始化,这里初始化并不是java对象的初始化,而是spring的参数的初始化(initMethod、afterPropertiesSet)等。(@PostConstruct是前置拦截初始化方法)是完成程序执行前的准备工作,初始化相关静态代码块和赋值,并分配空间,初始化只在类加载的时候执

非学无以广才,非志无以成学 3000

Java对象创建和初始化过程,处理字符串的机制

1.Java中的数据类型    Java中有3个数据类型:基本数据类型(在Java中,boolean、byte、short、int、long、char、float、double这八种是基本数据类型)、引用类型和null类型。其中,引用类型包括类类型(含数组)、接口类型。    下列语句声明了一些变量:int k ;A a; //a是A数据类型的对象变量名。B b1,b2,…,b10000;//

看上去很美 2631
上一篇: Java环境变量的作用
下一篇: 关于String字符串对象的创建与管理(String pool测试)
sofful
博客等级 码龄18年 0粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值