Java学习记录(咸鱼的自救记录)

280 阅读6分钟

我的Java学习历程

       记得在学校里开始学习Java时,老师也就照着《面向对象程序设计》这本书给我们讲了一遍(这本书都还没讲完)。异常和io流都还没有讲到,最后这门课就这么草草结束。JVM虽然有提到但是也仅仅只提到了JVM中的的概念,就这样Java的入门仪式就算完成了。(现在想想也怪当时自己的学习意识比较浅薄,因为刚进入大学一年多,自己的学习意识还停留在高中那段时期)现在想想难受归难受,但是Java的一些核心思想还是掌握了(也就只能靠这个来安慰安慰自己了)

        之后的一年多就是进行一些Java应用的开发,自己动手做了两个小系统,感觉在自己做的过程中Java的基础也有一定的提升,对面向对象这个概念也有了进一步的理解,如Java核心,封装、继承、多态,(感觉自己的Java基础都是东拼西凑来的,每次遇到问题了百度---->了解了----->忘记了----->百度,面向百度编程,手动狗头直到现在才开始有了想要去记录一下自己学习过程的想法。

        刚开始学习Java时,想必最开始接触的是面向对象这个概念,这种思想体现在使用Java编程时间长了之后,自己会不自觉的产生出对象这一概念,这就会和C语言的面向过程的思想产生一个对比,说实话,刚开始我并没有彻彻底底的弄清楚这两个的根本上的差别。所能记得的就是老师上课时给我们举的例子:面向对象就好比去旅行你只需在意去的目的地,面向过程好比去旅行但是得自己规划怎么去(好像是这样子的。当时确实是懂了(哦~~原来是这么一回事呀,但仔细一想还是不懂,选择性失忆,别人问起就把这个例子说一遍),现在想想当时的似懂非懂的原因在于自己并没有去深入理解Java的封装、继承、多态这些特性,只是停留在编程时会使用到这些东西。没有去深入思考Java为什么会引入封装、继承、多态?使用这些特性之后对我们的编程有了什么样的提升?

       在之后的大学时间了,陆陆续续的接触了框架,直到使用框架去开发了两个web的应用程序之后,才逐渐意识到面向对象这种思想为什么会成为主流。现在想想,面向对象编程思想的终极目的其实就是为了降低耦合,当程序模块之间的耦合性高了之后就存在难以管理的局面,(想想这种局面,不同模块之间的函数相互调用,当某一天你对某一个函数做修改时,你会发现你需要先去理清函数之间的调用关系,这如同叫你去理清一团麻线,光是看着就脑壳疼)。

那是不是运用面向对象的编程思想就一定比面向过程好呢?这又是一个问题。当然通过本着程序猿该有的看家本领,我请教了度娘。

       

搜索到的主要结果如下:

  •       面向过程

  优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。

  缺点:没有面向对象易维护、易复用、易扩展

  •   面向对象

  优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护

  缺点:性能比面向过程低 

总结如下: 1.面向过程比使用面向对象在性能方面更加优越。

                  2.面向对象比面向过程更易于维护。


Java由浅入深的学习

      既然上面我己经知道了面向对象比面向过程的程序更易维护,然后我也百度到了面向过程比面向对象在性能方面更加优越。说明他们各有有缺点,好了问题到此结束。不能说面向对象一定比面向过程更好。(咦~~~ 看了一眼本节标题)好吧(^0^)!!!

  • 是什么原因导致面向过程比面向对象的程序在性能上更优越呢?

      先从各自的特性说起:(还是上面的老师举的栗子0.0)面向过程就是去旅游自己规划旅游线路、交通工具。自己规划的话,那就挑个性价比最高的好咯,以价格、质量为根本参考到达旅游的目的地。面向对象的话就是提前尽量规划出所有达到旅游目的地的线路,汽车票、飞机票、高铁票全买好,要怎么去全看自己的心情(有钱任性咯~~~~)

      从以上的例子大概能够从中看出一些端倪:

采用面向过程的编程思想时需要编程人员去分析实现功能所需要的步骤,然后编写函数把这些步骤一步一步实现,实现功能的时候依次调用编写的函数就可以(用多少产多少)。

 采用面向对象的编程思想时,编程人员在进行事物的抽象时会以高内聚、低耦合为指标。也就是说每个对象中都最大限度的囊括了该对象该有的属性和行为。因为调用任何函数都需要以先实现某一对象的实例为前提,所以在实例化时会去为该对象中的所有属性和方法(同行为、函数)分配空间。也就是说在实现某个功能时只需要该对象中的某个方法,但是却为该对象中的所以方法都分配了空间(先产出来再用)。

  • 面向对象的语言在性能上所做的挣扎(以Java为例)

-------------------------------------------------未完待续