尽管Java是基于C++的,但是相比之下,Java是一种更“纯粹”的面向对象程序设计语言。Java语言假设我们只进行面向对象的程序设计。
2.1引用操纵对象
每种编程语言都有自己的操纵内存中元素的方式。所有这一切在Java里都得到了简化。一切都被视为对象,因此可以采用单一固定的语法。尽管一切都看作对象,但操纵的标识符实际上是对象的一个“引用”(reference)。这可能会引起争议:有人认为“很明显,它是一个指针” 。但是这种说法是基于底层实现的某种假设。并且,Java中的引用,在语法上更接近C++的引用而不是指针。
你拥有一个引用,并一定需要有一个对象与它想关联。
String s;
这里所差u那个见的只是引用,并不是对象。一种安全的做法是:创建一个引用的同时便进行初始化。
String s="hello";
2.2必须由你创建所有对象
一旦创建了一个引用,就希望它能与一个新的对象相关联。通常用“new”来实现:
String s = new String("hello");
2.2.1存储到什么地方
程序运行时,对象是怎么进行放置安排的呢?特别是内存是怎样分配的呢?
- 寄存器:根据需求进行分配。你不恩那个直接控制,也不能在程序中感觉到寄存器存在的任何迹象
- 堆栈:位于通用RAM中,堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。创建程序时,Java系统必须知道存储在堆栈内所有项的确切生命周期,以便于上下移动堆栈指针。这一约束限制了程序的灵活性,所以虽然某些Java数据存储于堆栈中–特别是对象引用,但是Java对象并不存储于其中。
- 堆:一种通用的内存池,用于存放所有的Java对象。
- 常量存储:常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。
- 非RAM存储:数据完全存活于程序之外,基本的例子是”流对象”和“持久化对象”。
2.2.2特例:基本类型
在程序设计中经常用到一系列类型,它们需要特殊对待,可以把它们想象成“基本”类型。它们不用new来创建变量,而是创建一个并非是引用的“自动”变量。这个变量直接存储“值”,并置于堆栈中,因此更加高效。
基本类型具有包装器类,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型。
Java提供了两个用于高精度计算的类:
- BigInter:支持任意精度的整数
- BigDecimal:支持任意精度的定点数
二者都没有对象的基本类型,但是任何对基本类型的操作同样适用于它们,只不过必须以方法调用的方式取代运算符实现,所以运算速度会比较慢。在这里我们以速度换取了精度。
2.2.3Java中的数组
当创建一个数组对象时,实际上就是创建了一个引用数组,并且每个引用被自动初始化为null
还可以创建用来存放基本数据类型的数组。编译器也能确保这种数组初始化为0
2.3永远不需要销毁对象
基本数据类型,以及对象引用的作用域决定了它们的创建和销毁。在Java中,作用域由大括号({})来决定:
{
int x = 12;
// Only x available
{
int q = 96;
// Both x % q available
}
// Only x available, q is "out of scope"
}
在Java中,不允许小作用域重新定义变量来“隐藏”大作用域变量,这样做容易导致程序混乱。
对象不受到作用域的限制
{
String s = new String("hello");
// object s available
}
// s is "out of scope",but object still available until jvm destroy
引用s在作用域终点就消失了。然而,s指向的String对象仍然占据内存空间,可以跨越作用域的限制,直到被Java的垃圾回收器自动回收。垃圾回收器通过对象是否存在指向其的引用来判断是否应该回收对象,上边的例子中,由于唯一指向String对象的引用s的消失,将自动被垃圾回收器回收。
本文首发自:一切都是对象-第一天-蜘蛛网间
分享到:
相关推荐
【标题】"传智黑马赵星老师hadoop七天课程资料笔记-第一天(全)" 提供的是一份关于Hadoop的全面学习资料,主要聚焦在Hadoop的第一天课程内容。这个资源包涵盖了从基础概念到实际操作的多个方面,旨在帮助初学者快速...
冰河整理的全网首个开源的以实战案例为背景的渗透实战笔记,全书共442页,共计37万字(不计空格)。整本书的内容涵盖:Kali基础、渗透工具、木马制作、钓鱼链接生成、爆破密码、内存溢出攻击、web渗透、数据提权、...
江苏万和华为培训课程学习比较,欢迎下载分享 此为第一天内容,后面继续上传
HotApp云笔记 - 精品开源demo-基于免费API(源代码+截图)HotApp云笔记 - 精品开源demo-基于免费API(源代码+截图)HotApp云笔记 - 精品开源demo-基于免费API(源代码+截图)HotApp云笔记 - 精品开源demo-基于免费API(源...
DAMA学习笔记-第01-17章细化第5章数据建模较多内容
Flask快速入门精品课程-笔记-123.zipFlask快速入门精品课程-笔记-123.zipFlask快速入门精品课程-笔记-123.zipFlask快速入门精品课程-笔记-123.zipFlask快速入门精品课程-笔记-123.zipFlask快速入门精品课程-笔记-123...
在面向对象编程中,对象是软件的核心,它们包含了数据(属性)和操作这些数据的方法(行为)。这种思维方式使得程序设计更接近现实世界的问题解决方式,更具可读性和可扩展性。 类是面向对象编程的基础。类是对具有...
Java基础每日复习笔记-JavaSE高级阶段.2020-10-13-211312.edf
概率论与数理统计-手写笔记-期末考试复习概率论与数理统计-手写笔记-期末考试复习概率论与数理统计-手写笔记-期末考试复习概率论与数理统计-手写笔记-期末考试复习概率论与数理统计-手写笔记-期末考试复习概率论与...
新东方线性代数笔记--第一讲_行列式--李永乐.pdf Resources Summary: 新东方 Linear Algebra Notes -- Lecture 1: Determinants -- Li Yongle 本资源为新东方线性代数笔记的第一讲,主要讲解行列式的概念和计算...
01-第一天笔记.md
根据《Redis笔记-尚硅谷周阳V1.3》整理,脑图、思维导图xmind
统计学习方法笔记-基于Python算法实现。统计学习方法笔记-基于Python算法实现 所有代码均可直接运行。统计学习方法笔记-基于Python算法实现。统计学习方法笔记-基于Python算法实现 所有代码均可直接运行。统计学习...
《技术人的管理之路》读书笔记 --思维导图 《技术人的管理之路》读书笔记 --思维导图 《技术人的管理之路》读书笔记 --思维导图 《技术人的管理之路》读书笔记 --思维导图 《技术人的管理之路》读书笔记 --思维导图 ...
嵌入式Liunx应用程序开发笔记-代码.zip嵌入式Liunx应用程序开发笔记-代码.zip嵌入式Liunx应用程序开发笔记-代码.zip嵌入式Liunx应用程序开发笔记-代码.zip嵌入式Liunx应用程序开发笔记-代码.zip嵌入式Liunx应用程序...
通信电子电路(高频-模电PLUS)-手写笔记-期末考试复习通信电子电路(高频-模电PLUS)-手写笔记-期末考试复习通信电子电路(高频-模电PLUS)-手写笔记-期末考试复习通信电子电路(高频-模电PLUS)-手写笔记-期末考试...
Jsp-Servlet复习笔记-----第3章 Servlet技术 - 堕落天使 - JavaEye技术网站.mhtJsp-Servlet复习笔记-----第3章 Servlet技术 - 堕落天使 - JavaEye技术网站.mht
新版Android开发教程&笔记--基础入门一 新版Android开发教程&笔记--基础入门二 新版Android开发教程&笔记三--环境搭建与解析 新版Android开发教程&笔记四--Dalvik ADB 新版Android开发教程+笔记五--模拟器、应用1、2...
JAVA学习笔记-第七章 面向对象中级(二)