从感觉上来理解JAVA(适合正在学习懵懵懂懂的伙伴)-01

88 阅读7分钟

如果死记硬背是不可长久的方法,再次学习使用推导的方式从无到有的去构思JAVA 这门语言的基础是不是会更有意义。曾经自己也是培训班出来的同学。很多时候总感觉老师教的时候是因为他已经知道了这个知识点。就像我小时的教育一样。老师会说这样加这样所以记住结果是这样。而不是用一种兴趣引导去理解。现在自己二次回锅。尝试一下一种新奇的方式来走一轮JAVA基础。

YY:计算机组成原理+计算机操作系统

感觉计算机的一切都是从标记以及数学运算衍生而来。计算机,首先满足的是计算需求,而后它又是一个整体的机器。故名计算机。机器是什么先可不论。 计算是什么?这是一个非常深奥的问题。不过一直以来我都有一种简单的理解。用一些符号作为纯数字纯物质的标识或者称为标记。配上一些可理解的或期望的加工手法。再得到新的数字或者说”物质“的过程。就是计与算的过程。

用白话一点的场景举例。当你听说今天把鸡蛋加上番茄一起炒了,中午就吃番茄炒蛋这个菜了。鸡蛋和番茄就是原始的物质。炒就是一个逻辑上理解的加工手法亦是过程。最后得到新的物质番茄炒蛋这道菜。所以如果是一些狭义范围内的数学问题。想象一下如果有一些物质代表我的数,有一些逻辑代表我想要的操作。最后能得到我期望的数。出现这么一台机器。设定好基础逻辑。在繁琐的计算都不担心了。

当然,就想苹果砸中了牛顿。跟万有引力好像有什么关系又没什么关系一样。当有了如此的期望。又遇到了电路+二进制的神奇反应。通断/高低电平标识二进制的数。多加几个位数来表示。电路可以标识任何期望的数字了。 神奇的与或非门。叠加形成了期望的所有基础逻辑操作。一种大力出奇迹的暴力美学。 计算机的雏形产生了。

一堆乱七八糟的思维跳跃,也就是想理解什么是,数电模电,什么是计算机组成基本原理。有了组成基本原理会发现这不过是像固定跑马灯一样的一堆线路而已。只有加上计算机操作系统的运用。才真的是注入了一丝灵魂。PS:不同的CPU有不同的指令集。是因为厨师毕业的学校不一定都是新东方吧。不过目前大家理解的计算机(电脑)到这两大基础课程的汇总基本上有种迷迷糊糊的的通透了。

有了以上的东西,手里的计算机就像一个具有深厚内功但是没有武林秘籍的神童。要想把内功发挥出来。就需要后天谱写的各种秘籍以应对各种场景。

那么问题来了。这个秘籍该怎么去写才读得懂,才把内功发挥的恰到好处?

反向思考编程语言的诞生

如果我们要使用计算机,先从它本身拥有的简单的数字计算理解。

如果我想计算1+1 =2,用编程语言怎么写合适?

编程语言,介于纯机器语言(汇编语言)与人类自然语言中间。想想一种偏二一点的文言文表达方式。

数字肯定是一种标识,那么语言里面第一步,该语言有什么标识,用于标识数字(基础标识)呢。 感觉就只需要一种----”数字“,有一个类型就叫数字。 想想小学,先扳着手指头数1,2,3。后面又有几个人分西瓜。除了整数还有小数。小时候过了一百都不知道还有千。现在过了亿还不知道有兆。 但是我们知道机器只有0/1,除了叠加位数(bit)。看起来都是1000111000111一串像黑客帝国的代码一样。 反正都是标记。那我们可以人为的来定义一下。 如果只是标识整数(int),只是标识数量不大的时候(byte,short),巨大的时候(long)标识有小数的时候(float,double)。

	计算机使用bit 来代表一位,一顿操作和行业规则后定8bit为一个字节(byte),主要是IBM起头,加上指定ASCII嘛然后变为了行业通用规则。再此基础上,一般都是采用2的N次方使用。1,2,4,8字节分别对应byte, short,int,long。 再在此基础上小数的也需要表示,就出现了4个字节和8个字节的,float与double。
 	这里涉及有趣的数学知识,如二进制与十进制数的表示与转换,小数的二进制表示。 整数是2的取余,小数是乘2取整。
	不同的进制对于数字的展示都有不能简洁表达完毕的时候,比如十进制的1/3。 二进制也是,对于小数来说,无法准确的表示。 如果是我的银行账户算者算着算错了。银行告诉我是计算机的天性。那我估计是不会认可的。此时开个外挂(BigDecimal),总之它可以实现我们想想中的数字准确计算。

除了数字本身,我们常用的也会出现一些文字的表示,或者特殊字符这类又该如何与呆呆的0/1对应呢。 假设我们做一个字典一样的编码映射。 用特殊的数字就代表一个其他文字。这样不就实现了数字转文字了吗?其实在计算机技术当中,就像学化学一样,基础都是几个元素,不同组合一下,不同的标记解读一下。就实现了数字与各类非数字的映射或者说逻辑上的含义表达。比如网络中的IP 与子网掩码。以及此处的字码。

	特别注意,因为字符集有多种,某些情况下,如UTF-16会用两个代码单元。  简而言之char在某些情况下会得到一个16进制映射的文字的半截单元。 而codePoint更符合我们期望的就是一个独立单元映射。

计算机总在大力出奇迹,量变产生质变的逻辑上有充分的实力证明这两句话。 想想我们的文字肯定不是一个字一个字的崩,或者说一个码点一个码点的用。 那么把一堆字放在一起。就有了语句。语句就具有了独立的含义了。所以想想一下,把这些字串成一串的话。就叫做String吧。

	String 是java 中的一种"类” ,至于优劣势和存储方式特性等可以暂时忽略。
	数组也是java中的一种大力出奇迹的"数据结构"
总之,有了数字的这些基本类型加上可以描述文字的基本类型。想想中,计算的记这一部分就有了基础了。

那么如何能把这些数字用活起来呢?

如果这个语言能提供我小学学的加减乘除的话,那好像就够了。反正高数代数什么的,到时候开外挂用吧(额外的工具包提供)。不过就像做应用题不可能一行计算就题面可以得到答案的。总是要反复的按照一些逻辑计算多次的。那么我们该有什么呢? 流程控制是必须的了。

流程控制核心: 条件的判断;循环的处理。
for 循环; do while; switch case; 等
此处对于 break, continue, goto, lable有技术点应用