首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >读TIJ -2 一切都是对象[通俗易懂]

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

作者头像
全栈程序员站长
发布2022-07-08 16:32:29
发布2022-07-08 16:32:29
2870
举报

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

《第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.6 构建Java 程序

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

2.6.2 使用其它组件 原来讲import

2.6.3 static keyword

2.7 我们的第一个Java 程序

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

2.8 凝视和嵌入文档

整体上,这一章比較简单。

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.1 用句柄操纵对象 You manipulate objects with references
  • 2.2 全部对象都必须创建
  • 2.3 绝对不要清除对象
  • 2.4 创建新的数据类型:类
  • 2.5 方法、自变量和返回值
  • 2.6 构建Java 程序
  • 2.7 我们的第一个Java 程序
  • 2.8 凝视和嵌入文档
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档