JavaSE 拾遗(0)——JavaSE 主线

写 javase 拾遗的主要目的是总结最近一小段时间对 javase 的学习。

先回顾一下我学习 java 的历史。第一次是大学的时候,那时只能算作对面向对象的3大特性有了入门级的了解,对java基本语法有过了解,学完后就基本没有用过。第二次是打算自学 mars 的 android 视频的时候,用了几天学习了mars 的 java4android,这个时候对好几年没有用过的 java 复习了一下,对 javase 的部分语法细节学习了一下。还有就是这次了。工作这几年,我很少用面向对象的程序设计,用得最多的还是最近这半年,因为做一个 flex 的项目。因为不是一直做这块,其实我很菜。最近这半年我觉得我对 OOP 的认识和以前比较有了很大的提升,所有这次再学 javase,我是想从 OOD、java语法细节、JVM实现原理这3个角度,完整的认识 javase。其实我在 OOD 这方面的认识仅仅限于看过think in uml,而且还只看了一小部分,但就这一点点 OOD 的思想,颠覆了我以前对面向对象程序设计的认识(grady booch 的一句话“我对面向对象编程的目标从来不是复用”)。从 OOD 这种高度来学习,才能更主动的掌握面向对象程序设计的特性,因为面向对象语言就是为实现 OOD 的,这样才能对语法规则的使用扬长避短,既不是死扣语法细节,也不是为了显示对语法细节的掌握而搞一些没有实际意义的晦涩用法(不过语句细节的熟悉程度也影响着对 javase 的理解和使用)。(说道这里我要吐槽一下中国教育,我感受到的中国教育的问题是,一味的教授这个东西是什么,讲得好点的会多讲点这个东西为什么这样,却很少教授这个东西能用来做什么。就好像会讲java语法规则是什么,讲得好点的会讲 jvm 怎么执行这些语句,但是却没有讲我们这样设计 java 语法规则是为了能用这个做什么。老毕的课适合零基础,我学有些不适应,学老毕的课,我觉得如果以后使用还需要更加深入的理解。)

       下面就开始说javase 的主线(纬度,角度),先写 javase 的主线,主要是为了先从整体上认识 javase,这样才便于理解和记忆,或者对 javase 才会有比较清晰的认识,并且在后面用主线框架来指导学习。如果盲人摸象,我想大部分人都会迷失,只有少部分人才能完整而正确的认识到这是大象。我想这才是人们正常的思维,这也就是抽象思维这种思维方式存在的道理吧。

       第一条主线,从认识方法的角度上看,我认为,javase 主要有三部分,第一部分是 javase 是什么,主要是指 javase 的语法细则;第二部分是 javase 为什么可以像语法规则一样运行,主要是指 jvm 怎么执行java程序(比如:某个语法点,翻译为jvm指令为什么样子,这样就能说明这个语法点的细则)或者 javase 类库怎么实现 javase 框架的;第三部分就是 javase 能用来做什么,我们把javase的规则设计成这样是为了写成什么样的程序。这也就是我的“是什么,为什么,能做什么”三个对事物认知的方法。后面的每一个javase语法知识点我都试图从这三个角度加以理解。看视频自学的时候,时间可以自己控制,有些地方可以多想点,或者考虑久点,但是如果是现场学习,我看了一下 javaee + android 学习的主要知识框架,我觉得可能不容慢慢理解,所以应该设定一下阶梯目标,1.上看首要目标是要听懂,也就是能理解老师说得内容,这样就要控制思维不要延伸太远,要紧跟老师节奏;2.记住,记个知识框架,能记住老师说得内容,这个应该需要写笔记和课后复习;3.课后练习,根据框架使用框架中的知识点,写程序是个技术活,需要多练习,把部分大脑思维变为自然反应;4.总结、抽象,建立知识框架,方便记忆和使用;5.工作用的时候,在有空的时候一定要看一点经典的书籍上面的内容,完善和复习课程的内容。

       第二条主线,从组成角度看,javase 主要有两部分,一是 javase 语法基本部分,主要指 javase 面向对象的基本语法,面向对象的语法规则是为了表达用面向对象(编程)思想来对数据的进行操作而设计的;二是 javase 框架的类库,也就是 jre 核心类库,现在阶段主要需要掌握 多线程、集合、IO、GUI、网络编程、反射、动态代理 相关的类的使用。

       第三条主线,从程序的组成上看,javase 主要包括4个层次的部分,包、类、函数、字段(字段和局部变量表面看起来差不多,就因为它们的作用范围不同,其实表示的意义很不同,一个数据把它划分为局部变量还是字段就能体现 OOD 设计的巨大不同),包只能是类作为其组成元素,接口我也算在类里面;类的组成元素有 变量 函数 类(成员类);函数的组成元素有 变量 类(局部类);变量本来是不能在分,但是在程序执行的时候变量的组成元素是引用和对象,如果从 OOD 设计来看,基本类型变量和引用类型变量都可以当做同样的元素来使用,就是其存储数据的作用,当然在写代码操作变量的时候,这两种变量会有区别,我把基本类型变量看做引用类型变量的子集(一个类可以看做汽车某个部件的图纸,如果这个类里面使用本类的对象,那么说明这个图纸不但说明了本图纸对应的部件内部的各种组成部件之间的作用关系,还说明和本图纸对应的部件之间的作用关系,或者是本部件在部件之间的关系和作用,这是一种自我描述和操作手法)。在做 OOD 设计的时候,javase 已有的类库也可以算作组成元素,设计的时候一般先从抽象出发,所以这些具体的内容可以先不考虑,直接考虑需求和接口。JavaSE 拾遗(0)——JavaSE 主线_第1张图片

使用关系描述法的时候最好依赖于接口


       第四条主线,从解决问题的方法上看,一是分配任务,二是完成分配的任务。现实生活中解决问题的方式:要想解决一个问题,要么自己解决,要么让别人帮忙解决,所以解决问题的方式两种,一种是自己做,一种是让别人做。这样从问题解决的过程中来看解决问题的方式有两个阶段,一是把问题分配给别人来做或者把问题拆分开之后,分配给别人来做;二是解决分配下来的问题。所以解决问题需要做两个事情,一是分配任务,二是完成分配的任务。这也是面向对象解决问题的方式。java 这种面向对象语法规则的设计也是为了实现这种解决问题方式的描述,因为面向对象思想最根上的意思就是说这个世界是由对象组成。设计模式最主要就是解决怎么拆分组合更能适应变化。面向对象一个是分层——继承、多态,一个是拆分组合——封装,依赖与接口。

        第五条主线,从语法规则的作用上看,java 的语法规则,主要是用于表示面向对象程序性设计的,但是还有一部分是用于安全性检查的,检查程序是否有错误。

       第六条主线,从 java 源程序作用上看,java 源程序主要做了两个事情,一个是定义各种符号,比如类、接口、字段、方法,这就是封装,一个是使用这些符号操作操作数据,操作数据之前先给这些符号按照对象为最小单元分配内存单元,然后使用这些符号引用这些单元来操作这些单元的数据。


ps:上面所有内容都是我在目前认识情况下得到的结论,也许在大神眼里,好多都是错的,如果这样,希望指点一二给小弟改正的机会,小弟在此先行谢过。

 [原创文章,转载请保留或注明出处:http://blog.csdn.net/zhaoyw2008?viewmode=contents]

你可能感兴趣的:(java,Java,SE,面向对象)