读TIJ -2 一切都是对象[通俗易懂]

读TIJ -2 一切都是对象

大家好,又见面了,我是全栈君。

《第2 章一切都是对象》

1.一切都是对象。不是Bruce Eckel说的,而是Alan Kay 总结的Smalltalk 五大基本特征的第一条。

从程序设计者或源码的角度,我觉得:“一切皆对象。X” 。类型type是计算机科学重要概念(类型理论type theory),从对象技术角度看,Java源码中没有不论什么对象,一切皆类型、引用变量或引用,只有没有对象。为了模拟自然(无论唯心或唯物),我杜撰了

柏拉图法则:类的世界独立存在,对象世界由类创建而来

2.杂合语言或多范式编程,是一种临时没有定论的炒作.由于依照托马斯•库恩的范式(paradigm)论。新旧范式是不可通约的、不可比較的。

个人倾向觉得:命令范式和函数范式如同原子级别看待世界,而对象范式在以米为单位(的宏观视角)看待世界。

2.1 用句柄操纵对象 You manipulate objects with references

拜托,英文版3rd中都不用Handle了,怎么4版的翻译中还有“句柄”。

尽管我在《编程导论·2.4.2
引用变量、引用和对象》中容忍三个术语的混用,可是。
【So if you want to hold a word or sentence, you create a String reference: 

String s;

But here you’ve created
only the reference, not an object.  】
在一本书刚開始介绍时,不加说明,就把
(引用)变量s和它的值混为一谈,
尴尬我很反感,这是一种
严重的错误。并且,【p89 在大多数情况下。
变量名与值的区别,都是不容混淆的。但因为引用变量和引用一样參与全部的对象运算,正如i和2一样參与全部整数运算一样,偶尔会遇到某些人将“引用变量s”叫做“引用s”的情况。

】——而TIJ不是偶尔,而是全文的混淆。
是的。我再三强调。String s和int i,s和i都是一个变量而已

。!

可想而知。TIJ无法介绍什么是真正的引用(值)。

假设用遥控板和电视机的样例,TV tv= new TV(); tv即使硬说成遥控板也不行

tv是你的手!tv握住的东西(tv保存的值)才是“遥控板”,你的手随时能够更换保存的值(遥控板)以控制不同的TV对象。

2.2 全部对象都必须创建

TV tv= new TV(); 无论怎样生活化的介绍,主要的概念还是应该准确

这里是一个反面样例,我要引以为戒。当然,因为他把(引用)变量s和它的值混为一谈。这段文字(对我而言)必定地显得别扭和错误。

2.2.1 保存到什么地方

六个地方有些乱。要讨论存储管理策略最好不要把寄存器和持久对象牵扯进来。


2.2.2 特殊情况:基本类型

1.【不是用new 创建变量,而是创建一个并不是引用的“自己主动”变量。
这个变量容纳了详细的值,并置于堆栈中。可以更高效地存取】。
这句话与我说“喜欢梁博”一样,充满风险。知道的说我赞赏梁博。不知道的不定联想些什么。

抓狂


一直奇怪“
对象在堆中,基本类型在栈中”是那个师傅的发明,这里有点嫌疑。

因而,我个人会这样写:
int i的i是一个基本变量,将基本变量保存的简单值5直接置于堆栈中,显然要比使用一个引用变量找到对象再从对象中提取简单值5更高效。


《2.2.2 Java数据类型·
4. 100%面向对象?》中
【p69单就Java语言的类型系统而言。Java中存在基本类型,它们不是引用类型,因而有人说Java不是100%面向对象。Java也不可以号称“全部东西都是对象”。

其实。通过API封装的特殊引用类型——包装类(指Boolean、Byte、Character、Short、Integer、Long、Float和Double),程序猿全然能够使源码中不出现不论什么基本类型(通过自己主动装箱将不论什么文字转换成包装类对象),这在Java语言和JVM中很easy实现

对于
方法调用栈上的数据,处理Integer i不如处理int j直截了当。

因为全部对象在堆上分配内存,方法调用栈上使用Java基本类型(如进行2+i这样的简单操作时),不应该被迫去创建各种对象。即使非常easy在JVM上进行底层转换而使源码表现得100%面向对象。也没有太大的必要。】

这里说明了方法调用栈上使用Java基本类型的优点,可是
不意味Java基本类型必须在栈上

2.【boolean 1 位 – – Boolean】???我不知道他的根据在哪里。


2.2.3 Java 的数组  在
讲述Java时比較C或C++。利弊兼半

我个人不觉得这是好主意。

2.3 绝对不要清除对象

2.3.1 作用域 

2.3.2 对象的作用域 【 “memory leak,” in which a programmer forgets to release memory. 】这是Java的内存泄露。不是C++的内存泄露。

2.4 创建新的数据类型:类

有一些翻译我直接改了。如各种标题——看起来烦人。
2.4.1 字段和方法 他的fields应该不包含static fields。

2.5 方法、自变量和返回值

function Vs. method,《3.1.2 方法·
4. 副作用》中,依照Pascal。把子程序/方法被分成两种:函数和过程。【Methods in Java determine the messages an object can receive.】不太严谨。

方法不过一个代码块,假设它“是”类的接口。才决定其对象可以接收该消息,而Help method即private method显然不是接口。

【象这样调用一个方法的行动通常叫作“向对象发送一条消息”】。

2.5.1 形參列表 


2.6 构建Java 程序

2.6.1 名字的可见性Name visibility  标题非常操蛋。文不正确题,标题应该叫“命名空间”或package。名字的可见性令人想起变量的
可见性与变量隐藏

2.6.2 使用其它组件 原来讲import
2.6.3 static keyword 

2.7 我们的第一个Java 程序

这里介绍了
怎样查看JDK文档

2.8 凝视和嵌入文档


整体上,这一章比較简单。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116147.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 如何提高memcache的缓存命中率

    如何提高memcache的缓存命中率

  • pycharm设置好看的背景和字体颜色

    pycharm设置好看的背景和字体颜色打开settings搜索python,选择Monokai,就可以了

  • 激光SLAM流程_激光打眼

    激光SLAM流程_激光打眼基于环境自然导航激光叉车:基于环境自然导航的激光导航叉车AGV中,机器人在运动过程中通过编码器结合IMU计算得到里程计信息,运用机器人的运动模型得到机器人的位姿初估计,然后通过机器人装载的激光传感器获取的激光数据结合观测模型(激光的扫描匹配)对机器人位姿进行精确修正,得到机器人的精确定位,最后在精确定位的基础上,将激光数据添加到栅格地图中,反复如此,机器人在环境中运动,最终完成整个场景地图的构建…

  • apache ant安装和build.xml

    apache ant安装和build.xml

  • 安可系统对接必须java_无法运行安可开发「建议收藏」

    当我想使用纱线运行安可开发时为什么我有这个错误?当我想添加sass时,我得到警告“>sass-loader@6.0.7”有未满足的对等依赖“webpack@^2.0.0||^3.0.0||^4.0.0”.但为什么?Symfony4.我无法从github安装这个模块npminstall–savechild_processfork-ts-checker-webp…

  • switch流控(flow control)

    switch流控(flow control)半双工:在switch中又叫做背压(BackPressure)添加链接描述。在交换机进行数据转发时,同一时间内,只能发送或者接受数据。利用冲突检测机制在端口接受数据时,抑制本端口发送。全双工:switch可以在转发时,同时接收和发送数据。1.pause帧2.非对称流控3.pause时间交换机在进行内部数据转发的时,内部需要一个packagebuff进行数据缓存,在多个端口同时向…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号