学习java领域的知识有两年近三年了,当然时间不完整,实际学习时间当然不可能有这么多,总会打折扣的。从最初的略窥门径到现在的稳步前进,犹如小孩学步,跌跌撞撞,磕磕碰碰的。
在学习java之前,断断续续学习了一年的C++,算是有点编程基础吧。不过java是面向对象的编程语言,而学习C++更多是面向过程,转过这个弯还是死了点脑细胞。理解面向对象,对于学习java很重要,因为这是其核心所在。我对面向对象的理解是,按照人对自然事物的认知,比如一只猴子,金丝毛发,很可爱,会跳舞、爬树、剥花生,用java写一个猴子类,就是把猴子的颜色、身高、体重等猴子身上静态的东西表述为java的属性,而猴子的爬树、剥花生表述为java的方法,构成一个完整的猴子类。人想要猴子剥花生,只要给它一些花生,它就会剥花生,至于它是怎么剥的,我们不关心,关心的是看它可爱地剥完就行了。它有一只猴崽子,和它特别像,遗传(继承)了它的特性。
学习java,先学习它的基本语法、表述形式,搞清楚它的基础是怎么回事,int型数值占几个字节就知道它的范围了。接着学习IO、多线程、集合、GUI等,这些都是属于JavaSE。想要在java这条路走下去,基础知识不得不认真学。IO知识很重要,不过不好意思,学的不深,当初一头扎进了数据库,后来诸多项目都是基于数据库完成的,可能是受操作文件太low而数据库高大上的传言影响。知识本身无高低区分,本质是解决问题。 老师没有深入传授多线程知识,可能是比较复杂而实际项目中真正自己写多线程的机会不多。但是很多服务器框架都用了多线程,要想深入学习,多线程是不可轻视的。集合主要是数据结构,有一个著名公式:程序=数据结构+算法,可见集合有多重要吧!GUI一贯被忽视,主要是java适合做web应用,GUI非强项。
学习java也有点时间了,有一段时间比较急功近利,追求新技术新框架,殊不知核心原理都相差无几。基础不牢,大厦不固。学习一门知识,一般是先应用,再发现问题,后探究原理。学习java的集合知识,用它去做一些练习、项目,做的过程想想能不能优化、提高性能,为什么ArrayList的增删元素不如LinkedList高效,不懂去看书上网搜索,还是不明所以,一定要刨根问底,看底层源码,试着解读源码想要表达的意思。说实话,当初一开始看源码时,很痛苦,尼玛的。比照着网上牛人对源码的解读,看着看着,好像还真是这样的。后来,慢慢的,知识逐渐丰富,英文水平慢慢提高,源码也就能够理解的,其实java的源码还相对不复杂。所以现在遇到问题一般都会去看源码、文档,加上调试,不会像当初那样动辄上网搜索,不过大脑。
Java Web开发,有很多优秀的第三方框架以供选择,比如Spring、Hibernate、Springmvc、Mybatis等。现在做java web项目后台,我也是使用这些框架组合,快速入手,可以大幅度节省时间。何况有些框架组合是经过很多项目的检验,已经很成熟。学习框架,也是先使用,再去解决疑惑不解,后探究原理。最近在看框架源码,一直没有找到很好的方法,目前结合一些著名的对框架解读的书籍和框架源码和编辑器的调试,逐步理解框架的一些原理性的东西。框架源码实在有点多,直接徒手上阵,估计看个大半天也没效果。看经典框架的著名解读书籍,站在牛人的肩膀上,是个不错的选择。看经典书籍、经典框架源码,仿佛在与大师交流,能够提高编码质量,领悟编程艺术的奥妙。
套用二八定律,在学习阶段,基础知识值得花费80%时间,基础知识当然是指操作系统、计算机网络、算法和数据结构、java基础(IO、多线程、集合、反射等)等。优秀的框架都是建构于基础原理之上的。