终于盼来了第一节JAVA课了!上面是今天上课之后,激动之情无以言表,在我的上发的一条微博。
说实在的,等这一天等了快有两年了,学完C++之后,有了基本面向对象的概念,但由于Windows那种开发机制确实比较繁琐,学了一段时间MFC,也没去深究。后来听说Java编网络程序很强大,C#又可以编一些花哨的界面程序,当时想自学的,但由于各种因素给耽误了,其中有一点就是Java课学校会开的就没必要花时间提前花过多精力去学。但很尴尬的是,原本安排在大二下学期的Java课,在我们这届的教学计划中被推迟到大三下的后半学期了。学院给出的理由是,Java很重要,你们找工作的时候笔试、面试经常会考到,如果大二时候学了很多同学反映过一年之后就忘记差不多了,所以本着人性化的立场考虑还是在找工作之前开这课。我就很无语了!这都神马理由啊!!唉,暂不说这些了,还是谈谈初次接触Java的感受吧。
Java的大名早有耳闻,我之前是因为它的两大特性引起我的特别注意:网络编程和跨平台。可以去网上搜一下Java的发展史会发现Java是一种很年轻的语言,第一个版本正式发布只是1996年。而作为一种新的编程语言,Java之所以流行,很大一部分原因在于它与Internet,尤其是WWW的成功结合。它在网络编程上的独特优势,使得在九十年代网络风靡的时代,给了Java一个发展的黄金时间,从此Java在这最近的十年内始终占住着编程语言市场份额的前列位置。
Java的跨平台可以说是Java标榜自己的重要的一点,Java宣称的WORA(Write Once, Run Anywhere),即“一次编写,到处运行”确实非常吸引人眼球。其实这也是我之前一直想不通的地方,它怎么就能实现跨平台的运行呢?我们都知道用C/C++在Windows下写的程序,经过编译链接最终生成的可执行文件,也只能在Windows下运行;而在Linux下编写的C/C++程序同样也不在Windows下运行。原因很简单,因为大量的系统调用直接与操作系统相关,如果OS都不相同了谈何运行。但是Java怎样做到跨平台的呢?
通过今天的学习,才知道Java的运行机制:我们写的源文件(.java)经过编译之后得到的是字节码(bytecode)文件(.class),这种文件已经相当于可执行文件了,但是不是直接加载到我们的CPU中进行运行,还需要一个中间的媒介——Java虚拟机(JVM),而这个虚拟机正是解决跨平台的关键所在。如图所示Java程序运行的过程。我们先来看看什么是JVM?
JVM它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。也就是说JVM在这里充当了一个解释器的功能,当然不同平台下JVM当然不一样了,例如Windows平台下JVM会将字节码解释成Windows平台下的机器指令,Linux平台下JVM会将字节码解释成Windows平台下的机器指令,这就实现了我们写的同一个源代码无需修改就可以在多平台下运行了。
是不是很简单啊?道理弄明白了确实很简单。当然Java的优点远不止上面两个,例如它的安全性、健壮性、多线程、可移植性、解释型等等。具体地也许现在体会不深,但真正用Java写程序的过程中,我们才能体验到。
当我们学习Java的时候,无形中就拿Java和C++进行比较,这也是我们学习时必须要做的。这比较的过程中,才能体会两种语言的各自魅力。Java与C++是有着千丝万缕的联系的,但Java的语法是C++的“纯净”版本,这里没有头文件、指针、结构、联合、操作符重载、虚基类等等,Java在设计的时候就剔除了C++中很多很少使用、难以理解、易混淆的特性。
上了第一次课,感觉良好,用老师的话说“Java是种优雅的语言”,我现在虽然还没有很深的体会,但每次看到Java的图标,都感觉这就是一种优雅——喝一杯热瓜哇咖啡,品味优雅的味道。
不过一切都还只是开始!Java的世界,对于我来说还是个未知的世界,我希望能尽快入门,在这个世界里尽情地遨游!