## 代码前的准备 ##
回想起三年前的自己刚刚接触计算机,学院安排课程直接上来就是C语言,加上当时计算机导论这门课学院也不是很重视,老师上课像是念经,我也没有什么兴趣听,所以导致C语言老师上课讲的一些专业术语完全听不懂,当时的上课真的是非常痛苦,可以说是一脸懵逼。为了避免各位重蹈我的覆辙所以在正式写代码之前做一些准备工作。请各位看官做好心理准备,一开始确实是一段很难的过程,因为总有成吨的概念会向你扑来,不过不要紧,慢慢的把该了解的都了解了就能突破这个坎!好的,闲话不多说,直接开搞了!
## 程序到底是什么 ##
既然要学习编程,就先要弄明白什么事程序。我先搬来了教科书的定义:程序是数据结构加上算法。我去,这是什么鬼,教科书上给的总是一些让人崩溃的定义。我们先不管数据结构和算法到底是什么东西,因为这东西很难,不过按照我的理解,程序就是比如说我想让你站起来,走到门口,下电梯去楼下的公共汽车站然后坐车回家,就是那么一系列的事情,我说一句你做一句,那么我说的就是**命令**。大多数情况下,我们在操作电脑,就是不断的咱命令电脑。如果我把命令写在一张纸上,你按照我写的去做,那么纸上写的就叫做程序。
可是现在照着纸去做的并不是,而是一台傻乎乎的电脑,它不能理解人的语言,电脑能够理解的只有0和1,我们不可能用0和1去和电脑交谈,人会奔溃的,所以人们就找到了一个办法,将人类的语言简化,而且简化到了极致,于是就产生了一门新的语言,既然我写的是Java,那么我索性就叫他Java语言,当然事实上其他的高级编程语言也是可以的比如说C啊,C++等等什么的,这些语言介于人类的语言和计算能看懂的0,1之间。
人类到底是怎么让Java语言说话呢?当然是通过学习。计算机怎么看懂Java语言呢?这就要通过一个叫JDK的软件,昨天介绍Java语言的时候我提起过,JDK翻译成中文就是“Java开发工具”,JDK将写好的Java程序翻译成计算机可以识别的0和1,具体怎么翻译的太复杂,这里不方便说,有兴趣的看官老爷可以自己去查阅一些资料。
也就是说,我们要学习一个新的并且简化的的Java语言,以便和计算机说话,而JDK会将我所说的话翻译给计算机看,所以需要在计算机安装JDK。JDK是完全免费的软件,直接百度JDK,就可以下载了,很方便不管是你是Win还是MacOsx都可以安装。
现在我们打开一张纸,在计算机中所谓的打开一张纸就是创建一个新的文本文件,后缀是txt格式的。某些了解过Java的看官老爷会问,干嘛多此一举,不是有IDE(集成开发环境)吗?是的,现在有很多的集成开发环境,如Eclipse(博主自己使用的就是这个),JBulider,JCreater之类的工具,它们提供了很多辅助工具,简化了程序员的劳动,但是我想大多数的还是刚刚接触Java的看官老爷,所以工具就算给你你也不会使用,博主不听老师的话执意在刚刚开始学习的时候就用了Eclipse,确实是很省力,很多相关的类和代码都会自动跳出来,但是学了一段时间之后,离开集成开发环境让我自己写代码的时候傻眼了,发现什么都不会了,原来我只是学会了怎么实用工具并没有学会Java,因为没有人给你提供代码了,所以,偷懒不是一个好习惯,但是该偷懒的地方确实可以偷一下懒。早这里博主建议初学者最好不好使用集成开发环境,使用记事本就可以学习所有的代码。
## 程序的入口 ##
纸上的那一段话按照人类的阅读习惯肯定是从左往右看,但是计算不是这样,它不是从第一行开始看Java程序的,计算机从一个特定的位置开始读,这个位置叫做主函数,也即是说是程序的入口。
又来了一个新词,函数,什么事函数,是数学里的函数吗?不不,此函数非彼函数。留心观察,其实生活里处处是函数,我引用一个我的老师和我讲的例子,早晨起床,你喊了一嗓子:“妈,给我做早饭。”这是典型的函数运用,其实你并不知道早饭是怎么做出来的,你只不过喊了一下,事实上你已经调用了函数,我们给这个行为一个专业的名称:“函数调用”,妈妈提供了具体的实现,妈妈提供了做早饭的函数,而你就调用了这个函数。是不是,生活中到处都是函数的函数的调用。
那么回过头看什么事主函数,大多数计算机语言都把主函数写成main(){},程序找到这个入口才开始运行你写的命令,也就是语句。我们来看一下主函数的各个部分,main是函数的名字,计算机会找到这个名字,这是一个怎么样的过程呢?我们以大家最熟悉的windows系统为例,点击键盘上的Win键或者用鼠标点击“开始”菜单,在运行框里输入cmd,然后回车,你会看见一个黑色的窗体跳了出来,这就是我们平常说的Dos框。事实上我们看到的图形界面只是为了能够更方便的操作而设计的,在还没有可视化系统出现前程序员们都是通过这个Dos窗体进行编程作业的。实际上计算机的本质就是这个窗体。
现在我们的手离开计算机,想一下,计算机现在是忙着还是闲着呢?当然是忙着的啦,Dos窗体里有一个闪烁着的白色小横线,你或许不回去注意它,但是从计算机的角度来看,这就是一个任务,你随便在键盘上打字进去会发生什么?(各位老爷们可以试一下)字母跳到了小横线所在的位置,这说明计算机一直在不停的扫描着键盘,等待着你的输入,一旦输入,它要将这个字母显示到屏幕上,如果这个时候回车了怎么样?是不是换行了。事实上计算机会到当前目录里找你输入的那个字母的可执行文件,如果计算机里没有这个文件,就会显示一堆废话。那么会有人问,要是有会怎么样呢?千万不要说会运行这个程序,这不是程序员的想法。程序员与非程序员的区别在于,非程序员向计算机输入一个命令,然后等着里面的程序执行,而程序员关心的是计算机一步步在干什么,在这个时刻,如果目录里有这个可执行文件,计算机就会把这个程序从硬盘搬到内存里,记得程序是在内存里运行的,然后寻找其中一个叫main的方法,去调用这个函数,就像让妈妈做早饭一样,一步一步的读里面的句子。这就是为什么main是主函数,因为计算机找的是main,计算机是调用者,你是main函数的提供者。其实我是简化了调用的过程目的是为了方便各位的理解。事实上Java有着更加复杂的机制。
好了,我们再看小括弧,小括弧的中间是放参数的,那么问题又来了,到底什么事参数呢?我在举个例子,就上面的这个例子继续,你这样喊:“妈!给我做早饭,我要吃鸡蛋。”和之前的对比,只是多了一个鸡蛋而已,那么鸡蛋就是参数,你是调用者,你提供了一个鸡蛋的请求进去,函数的提供者需要接受这个参数,所以需要一个接受的容器,事实上Java的主函数是需要参数的,人们通常这样写:main(String[]args){},鸡蛋就被放到了这个叫args的容器里了。在Java里标识一个函数,不完全用名字,也包括参数,也就是说,main(){}和main(String[]args){}是两个不同的函数,计算机要调用的是带参数的main函数。不知道你是否注意到:String的S大写的一定要注意,Java是特别讲究大小写的,该大写的地方千万不要小写,同理该小写的地方绝对不能大写。
接着看后面跟着的大括弧,我们要和计算机说的话就放在里面,所以通常大括弧要跨越一个很大的区域,以便容纳你要说的很多话。
Java语言的函数还需要有返回值,如同早饭做完以后,是要把做好的饭给你一样,现在计算机来调用main函数,而计算机并不需要什么返回,即便是这样,我们也需要说明是没有返回值的,我们使用单词void,加上返回值申明,main函数被扩展成了void main(String[]args){}。
这还不算玩,Java这样看起来好啰嗦对吧,后来的发展把main函数给简化了,函数前面有一个public声明,public就是字面意思,公有的,那么脑子转的快的看官老爷们是不是想到了与之对应的私有的啊,什么的,恭喜你,答对了,确实存在就是private,不过今天不讨论这个,后续博主的更新会慢慢跟上,会慢慢讨论为什么Java要这样的设计。现在理解是为了能够让计算机从外界访问到main函数,我们需要将他定义成共公有的就好了。
在public后面,还需要以讴歌叫做静态的static这样的一个标识,static我们后面在讨论。到此为止我们已经看到一个完整的Java中主函数的定义:public static void main(String[]args){}。
## 初步了解类和对象 ##
Java不能直接写主函数,因为Java语言是一种基于一个叫面向对象的思想设计,昨天我也再三的反复强调着一点。要知道天底下最简单的技术就是计算机技术,不像是物理,化学。每一次进步都能让人吃惊的目瞪口呆,人只能接受发现的东西,计算机从发明的额那一天起就是人类的逻辑思维,而每一步的发展都是因为过去的技术遇到了问题,新的技术会想办法解决这些个问题,这个过程很符合人类的逻辑思维。我们和上一代的程序员相比实在是太幸运了,为什么这么说呢,因为技术又发展了20年,这20年的变化是什么呢,也就是面向对象技术的发明和发展。
很多程序员用了几年的时间也没有真正了解什么是真正的面向对象技术,包括博主自己,也没有完全的真正的了解,不理解面向对象的思想久久没有办法成为一个真正意义上的Java程序员,虽然我并没有完全的熟练的掌握面向对象这门技术但是我已经八九不离十了,在经过一段时间的训练就可以完全的掌握,但是各位看官老爷们呢,你们大多数看我博客的人可能刚刚接触Java,没有大量的练习是不可能掌握滴,所以不要气馁,掌握这门技术练得多了谁都可以掌握,毕竟practice make perfect,熟能生巧。在这儿我先简单解释一下面向对象是什么,还记得我之前说的写在纸上的那一系列动作了吗?很明显那个程序在描述一个过程,我们将这样的做法叫做面向过程。
面向对象就没有那么容易解释了,我们先来解释面向对象中的最基本的概念---类和对象。如果我拿了一条鱼你会说,诶,Stven你买了一条鱼啊。”那我就要问各位了:“你怎么就知道这是一条鱼呢?”有人会笑话我问这么傻的问题,鱼就是鱼,还要问为什么这是鱼这种问题吗,不过换个角度来想,在你刚刚出生的时候你知道这是鱼吗,答案是否定的,你肯定不知道啊,你生下来就知道这是鱼了那还得了,那你就是文曲星下凡了。肯定是通过后天的学习你猜知道这个实物叫鱼。再举一个例子,我拿了另外一种叫做鲤鱼的鱼问你,这是什么,你的回答是鲤鱼,不过你是否想过你怎么能判断出这是鱼并且是鲤鱼呢,因为鱼有共同的特点,那就是有嘴,眼睛,并且还能在水里游,那么有这些特点的事物我们统称为鱼。
Java的了就是这个概念,所以类并不是实际存在的,它只是一个抽象的概念,在计算机里讲不存在就是在内存里不存在,那么我手里拎着那条存在的鱼是什么呢?在Java里,那条存在的鱼就是一个对象,后面的那条鲤鱼也就鱼这个抽象的类实例化出来的一个对象,存在计算机的内存里。
有了一个基本的认识,类就是一个概念,并不存在,对象却是客观存在的,符合类的定义。那么我问几个问题,你看你自己是类还是对象,我想买台电脑,电脑是类还是对象?当然电脑是类,因为这只是我的一个地想法而已,电脑可以拿来打英雄联盟那我就认了,付了钱就带回家了,那么这个电脑就是具体的对象了。
今年我想娶个媳妇,媳妇是类还是对象呢,当然这只是一个想法,不是具体的实物,当然是类,我去相亲了带了一个媳妇回来,那么这个媳妇才是对象。我是类还是对象,你是客观存在的事物,所以你就是对象了。那么我是什么类的对象,你是人这个类的对象,再大一点说你是动物的对象。
Java是纯粹的面向对象的语言,所以Java程序是一个个类构成的,类里面是变量和函数,函数里面是语句。所以我们定义一个类,public classMyTest{},看好了,看我起的名字是MyTest注意大小写,你也可以随便取别的什么名字,都可以,只不过我写的是一代代Java程序员流传下来约定俗成的,注意在Java里大家都将类的名字的首字母大写,这样一眼就可以看出这是什么类,还有就是起名的时候不能有空格,所以英文单词间下一个单词的第一个字母大写容易堵。好了按照我写的吧,成了习惯在理解为什么也来得及。
我们的主函数写在这个类中,形成如下的代码:
```
public class MyTest{
public static void main(String[]args){
}
}
```
然后存盘,保存的时候,记事本会让你起一个名字,名字是MyTest.java,这个文件的扩展名是Java,说明这是Java的源程序,在记事本中默认的扩展名是txt,你需要将保存类型改成“所有文化”,再保存。再看文件名,不知你发现了没有,这个文件的名字和类的名字是一样的,连大小写都是一样的,这是强制性的规定,Java的文件名和public class的名字一模一样。
今天的就讲到这里了,剩下的就交给各位理解和练习了,这种格式是Java里的八股文,以后的每一个程序都要这样的开头,因为每次都要用到所以必须很熟练,建立代码的手感。程序员的乐趣在于不断的敲击键盘寻求征服电脑的快感!
3月19
2:27AM
by WhiteJavaCoder