重温经典《Thinking in java》第四版之第二章 一切都是对象(十)

简介: 重温经典《Thinking in java》第四版之第二章 一切都是对象(十)

Java中(几乎)一切都是对象。几乎是因为还包含几个基本类型,int、float、double和long等。

 

2.1 用引用操纵对象,如果你不理解引用的概念,那就先把它当做一个对象的遥控器,这个遥控器可以执行对象中的任何行为甚至直接获取属性。这里面把对象比喻成了电视机。

但是即使没有电视机,遥控器还是可以独立存在的,也就是说,你拥有一个引用,并不一定要有一个对象与他关联。这句书本上的原话很好理解。举个例子,也是书上的。String类型,就是一个字符串类型,可以创建它的引用,String s;String是字符串类,s是一个引用(遥控器),现在还没有对象(电视机)。new String(abcd)这个才是电视机,也就是2.2 必须由你创建所有对象中的String s=new String(asdf);这样s这个引用(遥控器)就跟我们的new String(asdf)对象(电视机)产生了联系。s就可以通过.的方式使用对象中的方法或者属性了。

 

按理说讲完了引用和对象就应该学习使用对象中的方法了,但是接下来确进入到了2.2.1 存储到什么地方。有点跳跃,先了解一下这一部分吧,也就5个存储区,不理解也没关系,时间久了就理解了。这部分内容不是java虚拟机里的内存模型,就是5块不同类型数据存储的地方。

1)寄存器:处理器CPU内部的一块存储区,JAVA语言控制不了这块。

2)堆栈:存储JAVA中对象的引用,基本类型变量。

3)堆:存储JAVA中new出来的对象。

4)常量存储:代码中定义出来的不会改变的值

5)非RAM存储:这里解释的不够全面,应该是除了RAM存储区以外的其他任何区域,比如文件,数据库等。

 

2.2.2 特例:基本类型这一小小节罗列出来了我们JAVA语言中的基本类型,这些类型不是属于对象,不用new,直接赋值的,比如int a=5;下面就是所有的基本类型,以及他们的大小和范围,还有每个基本类型都对应一个包装器类型,包装器类型就是属于对象的范畴了,需要new的。

image.png

接下来仅仅针对boolean类型和char类型做了一些说明,其他的类型没有涉及到,在后续的章节会详细通过实践的方式了解。然后就跳跃到了两个高精度数字:BigInteger

、BigDecimal。书中重点说明了一点就是高精度数字是通过速度换取的精度,所以它们运算速度比较慢,这只是和上面的数值型的基础类型比较的。所以他们经常被用于与货币业务或者其他对精度要求很高的业务中。


2.2.3 Java中的数组这一小小节只是简单地描述了数组在c/c++和Java中的区别,在c/c++中的数组使用起来很危险,因为数组就是内存块,这点在Java中也一样。只是在c/c++中对内存的直接操作容易导致一些错误的产生。其实这在Java中也是一样,只不过Java的异常错误处理机制能够提醒程序员,这边会有问题。在c/c++中就会产生难以预料的后果。尤其是对数组在初始化方面的差异,Java的编译器会做安全方面的保护。

目录
相关文章
|
1月前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
2月前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
50 17
|
1月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
2月前
|
存储 Java 数据管理
Java零基础-Java对象详解
【10月更文挑战第7天】Java零基础教学篇,手把手实践教学!
31 6
|
2月前
|
Oracle Java 关系型数据库
重新定义 Java 对象相等性
本文探讨了Java中的对象相等性问题,包括自反性、对称性、传递性和一致性等原则,并通过LaptopCharger类的例子展示了引用相等与内容相等的区别。文章还介绍了如何通过重写`equals`方法和使用`Comparator`接口来实现更复杂的相等度量,以满足特定的业务需求。
29 3
|
2月前
|
存储 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第9天】在Java的世界里,对象序列化是连接数据持久化与网络通信的桥梁。本文将深入探讨Java对象序列化的机制、实践方法及反序列化过程,通过代码示例揭示其背后的原理。从基础概念到高级应用,我们将一步步揭开序列化技术的神秘面纱,让读者能够掌握这一强大工具,以应对数据存储和传输的挑战。
|
2月前
|
存储 Java 数据管理
Java零基础-Java对象详解
【10月更文挑战第3天】Java零基础教学篇,手把手实践教学!
31 1
|
2月前
|
Java 数据安全/隐私保护
java类和对象
java类和对象
26 5
|
1月前
|
存储 缓存 NoSQL
一篇搞懂!Java对象序列化与反序列化的底层逻辑
本文介绍了Java中的序列化与反序列化,包括基本概念、应用场景、实现方式及注意事项。序列化是将对象转换为字节流,便于存储和传输;反序列化则是将字节流还原为对象。文中详细讲解了实现序列化的步骤,以及常见的反序列化失败原因和最佳实践。通过实例和代码示例,帮助读者更好地理解和应用这一重要技术。
43 0
|
2月前
|
存储 前端开发 Java
你还没有对象吗?java带你创建一个吧
你还没有对象吗?java带你创建一个吧
14 0