首页 > 编程语言 >【Java编程思想读书笔记】第二章:一切都是对象+第三章:操作符+第四章:控制执行流程

【Java编程思想读书笔记】第二章:一切都是对象+第三章:操作符+第四章:控制执行流程

时间:2022-11-01 22:31:50浏览次数:48  
标签:存储 Java 读书笔记 对象 操作符 堆栈


参考书目:《Java编程思想》(第四版)
友链:​​【读书笔记】Java重要知识点整理与汇总​​

阅读《Java编程思想》(第四版)一书收获颇多,之所以想通过用博客记笔记的方式来读书,是因为这样可以倒逼自己仔细、反复地阅读书中的知识,找相对意义上的重点,并且由于人脑更适合输出型的学习,通过将内容边看、边记、边理解和边打字写文,相比直接反复阅读更有效益(当然这本书后续仍需反复阅读几十遍甚至百遍以上都不为过),而另一个原因就是这样也能够在阅读中通过博客来记录自己的学习历程,博客记录的不只是图文,它们记录的正是自己的成长,等以后毕业或者工作后,回首大学四年,多少有点可以回念的东西,还可以说一句:一路走来,我读了很多前辈们的好书,对技术充满了热情,永远在不断学习的路上。


start.作者讲授思路:

【Java编程思想读书笔记】第二章:一切都是对象+第三章:操作符+第四章:控制执行流程_java


【Java编程思想读书笔记】第二章:一切都是对象+第三章:操作符+第四章:控制执行流程_操作符_02


【Java编程思想读书笔记】第二章:一切都是对象+第三章:操作符+第四章:控制执行流程_操作符_03

1.五个不同的地方可以存储数据

(1)寄存器:这是最快的存储区,它位于处理器内部,其数量及其有限,根据需求进行分配,你不能直接控制,也无法感知其存在(但C和C++运行向编译器建议寄存器的分配方式)。

(2)堆栈:位于通用RAM(随机访问存储器)中,但通过堆栈指针可以从处理器那里获得直接支持。堆栈指针向下移动,则分配新的内存,若向上移动,则释放内存。这是一种快速有效的分配存储方法,仅次于寄存器。Java系统必须知道存储在堆栈内所有项的生命周期(限制了灵活性),以便上下移动堆栈指针,Java对象的引用便存储于堆栈中

(3):是一种内存池(也位于RAM区),用于存放所有的Java对象,编译器不需要知道存储的数据在堆里的存活时间(体现了灵活性),new一个对象时,会自动在堆里进行存储分配,用堆进行存储分配和清理会比用堆栈花更多时间

(4)常量存储:常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。

(5)非RAM存储:如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。如流对象和持久化对象,在流对象中,对象转化成字节流,在持久化对象中,对象被存放于磁盘上,程序终止后,它们仍可以保持自己的状态。

2.对于一些基本类型,特别是小的、简单的变量,Java采用和C、C++相同的方法,不用new来创建变量,而是创建一个并非是引用的“自动”变量,这个变量直接存储“值”,并置于堆栈中,因此更加高效。但这些基本类型通常也具有相应的包装器类,并可以反向转换(将包装器类的数据转为简单变量存储)。

3.高精度计算类BigInteger支持任意精度的整数,BigDecimal支持任意精度的定点数。它们以牺牲运算速度为代价,换取了精度

4.Java对象不具备和基本类型一样的声明周期,当用new创建一个Java对象时,它可以存活于作用域之外:

{
String s = new String("a string");
}

引用s在作用域终点就消失了,然而s指向的String对象实体却仍继续占据内存空间,但我们无法在这个作用域之后访问这个对象,因为对它唯一的引用已经超出了作用域的范围。当Java的垃圾回收器监测到这些不会再被引用的对象时,就会释放这些对象的内存空间,以便供其他新的对象使用。

5.调用方法的行为通常被称为:发送消息给对象

int x = a.f();

消息是f(),对象是a。

6.Java中为什么没有sizeof()?
在C和C++中,需要使用sizeof()的最大原因是为了“移植”,不同数据类型在不同机器上可能有不同的大小;Java由于建设于JRE之上,所有在所有机器上数据类型的大小都相同,无需用sizeof()。

7.移位操作符:

(1)左移位操作符(<<):按照操作符右侧指定的位数将操作符左边的操作数向左移动(在低位补0)—[高位舍弃,低位补0]

(2)“有符号”右移操作符(>>):按照操作符右侧指定的位数将操作符左边的操作数向右移动(符号为正:在高位插入0; 为负:在高位插入1)

(3)“无符号”右移操作符(>>>):…在高位插入0

注:
移位+等号,指定移动的位数,例如:k >>>= 10
5 << 2:00000101 —> 00010100 由5变为20
>>:扩大2^k
<<:缩小2^k


end.结语
关于各种概念,剩余部分知识点,有些已与之前的读书笔记书目内容有所交织,因此不再再次整理,可参考:
​【读书笔记】Java重要知识点整理与汇总​​


标签:存储,Java,读书笔记,对象,操作符,堆栈
From: https://blog.51cto.com/u_15856491/5815061

相关文章

  • 【Java编程思想读书笔记】第五章(补充):静态初始化与枚举类型+第六章:访问权限控制
    参考书目:《Java编程思想》(第四版)友链:​​【读书笔记】Java重要知识点整理与汇总​​一、静态初始化:结论:静态初始化执行且仅执行一次(当首次生成这个类的一个对象时,或首次访......
  • java抽象类的特点
    /***抽象类的成员的特点*抽象类中可以有成员变量、构造方法、成员方法(抽象的和具体的),其特点如下:*1.成员变量:既可以是变量。也可以是常量*/publicclassSt......
  • Java: Annotaion
     /***版权所有2022涂聚文有限公司*许可信息查看:*描述:**历史版本:JDK17.01*2022-09-12创建者geovindu*2022-09-12添加Lambda*2022-09-12......
  • Javascript笔记 - 数组常用方法
    数组目录数组1.数组基础2.常用数组方法输出:toString()增删:push()、pop()、shift()、unshift()提取:splice()、concat()、slice()3.数组排序sort()reverse()4.数组迭代......
  • JAVA-Integer_int和string的相互转换
    packagecom.itheima;publicclassintger_02{publicstaticvoidmain(String[]args){//int和string的相互转换intnumber=100;//......
  • Javascript笔记 - JS中的函数
    函数目录函数1.函数的声明与定义2.方法3.作用域全局作用域函数作用域声明提前4.构造函数instanceof5.call()和apply()6.this和argumentsthisarguments1.函数的......
  • JAVA-Integer_构造方法
    packagecom.itheima;publicclassintger_01{publicstaticvoidmain(String[]args){Integeri1=newInteger(100);//根据int做创建Integer对象(过时......
  • JavaScript笔记 - JS和html代码的结合方式
    JavaScript和html代码的结合方式方式一在head标签或body标签中,使用script标签来书写JavaScript代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF......
  • java中的抽象类abstract
    /***学习抽象类和抽象方法*抽象方法:只进行方法的声明,而不提供具体的实现(没有方法体)*抽象类:只要在一个类中有一个抽象方法,那么这个就得声明一个抽象类*抽象类和......
  • Javascript笔记 - JS中的变量
    变量目录变量1.变量基础2.强制类型转换3.关系运算1.变量基础JS是一门弱类型语言,这意味变量的类型不是固定的,变量可以随时从一种类型转换为另一种类型vari=1;......