PDF 课件和源代码下载地址:
https://gitee.com/geektime-geekbang/LetsJava
作者回复: 明确一下问题,你是对 String a = null; 有疑问。 这个也算是计算机和编程里的一个略违和的地方。和从0开始计数有的一拼。 FAQ版本在此:https://github.com/deepnighttwo/LetsJava/blob/master/FAQ/02%E7%AB%A0-%E7%BC%96%E7%A8%8B%E9%87%8C%E7%9A%84%E4%B8%A4%E4%B8%AA%E7%89%B9%E6%AE%8A%E7%9A%84%E5%80%BC.md 要理解这些,可能要接触的知识比第一章的内容略多一点。 从底层来说,a就是一个地址,指向一个实际的值。比如说,就好像从本子上撕下来一页纸,然后计划用这张纸记录一个房子的地址。那么这张纸就是a,a上的内容就是房子的地址,实际的值就是房子。 三个主角:a(纸),房子的地址(a的内容),房子本身(a指向的实际的值,也就是后面我们要学到的对象和数组实体) 回到问题本身,a = null是什么意思呢?a本身是内存里的以块内存,它本身可能是被使用过的,本身就是有内容的。就好像从本子上撕下一张纸,这张纸之前已经被人用铅笔写上过内容了。 那么问题就尴尬了,我本来撕下这张纸,是用来记录一个房子的地址的。那么这张纸上原本的内容,可能是一首古诗里的几个字。比如“窗前明月”,如果把这四个字当作房子的地址,会出莫名其妙的错误。所以我们在撕下这张纸并打算用它记录房子地址的同时,应该做一个初始化的工作,简单来说就是,把这张纸上原来的内容擦掉。 a = null, 正是这么一个“把这张纸上原来的内容擦掉”的操作。a被拿来指向一个对象或者数组实体,那么a之前无论被用作什么别的目的,都要先清除掉原来的内容。否则就会出问题,拿着a原来的值当作对象或者数组的地址,会出内存问题。这也是Java比C和C++省心的一个重要的方面。Java是不允许人为操作内存地址的。 计算机里有两种特殊的值,和具体的编程语言无关。一种叫做null,0,空,随便叫它什么,它代表的就是无。比如Java里的null。 还有一种叫做undefined,就是不知道是什么值。可以认为就是这个内存之前被使用过之后的值。这个值在新的用途下没有意义,必须清除掉,否则就会出问题。 理解这两种特殊的值的含义,也算是编程的必经之路。
作者回复: 这是一个更好的实现,手动点赞👍
作者回复: 被你发现了,其实后面我会说到。这是intelliJ的format代码功能。在菜单栏 code 下面有 reformat code菜单项,就是这个功能。菜单项上有快捷键,不用每次点菜单,用起来贼爽。
作者回复: 👍,简单明晰
作者回复: 欧耶!欧耶!!
作者回复: 后面会详细拆解这句话。 System是个类,这个类是Java自带的、与系统交互的类。out是这个类里的一个属性,你可以认为是这个类的一个组成部分。out顾名思义,就是要和外界联系。联系的方式呢,就是向屏幕输出点内容。怎么输出呢?使用println方法,可以将方法的参数(也就是括号里的内容)输出出来。
作者回复: ������
作者回复: 这样才能控制内部for循环的次数,让输出的内容是一个三角形,而不是一个正方形
作者回复: 我只记得快捷键是Ctrl+Shift+F。好多年不用Eclipse了,我当时用的时候,最新版Juno。
作者回复: 在Java里面最方便的还是System.out.println(). 如果看着实在是嫌太长,可以试试看Java新的import static语法: import static java.lang.System.*; 然后代码里就可以out.println()