读Java源码

平常使用Java的时候,那些集合类使用起来很顺手,但是有没有想过这些集合内部的实现原理是怎样的,它的添加移除都有哪些操作? 有了一些工作经验之后,必须要读一读Java包中的源码,需要知道那些平常使用的类的原理。有一点,不要被这些类的行数给吓到,点击一些集合类,一个类的代码行数都一千多行,很多时候回被这个数字给吓到,除去注释空格,其实也没有多少了,并且只要理解了一点,该类的其他代码就相对简单了。 看源码的第一个步骤,先简单的调用该类的一些方法,让其运行起来,然后点击进入方法,可以在方法里面设置断点,让其一步一步的走,知道止到走到最后。这样对该方法有了一个大概的映像。 第二步进入到该类中,折叠代码块,把所有的方法都看一遍,在Java源码中的类,都可以通过方法名推测出该方法的完成了一个什么任务。这样心里对这个类有了一个整体的看法。 第三步从核心代码开始,就是从自己代码中的第一个调用方法开始读,如果可以断点进行调试,然后一步一步的跟着走。 最开始读的时候,需要在网上找别人解析的例子进行看,跟着别人的思路走,最后了再自己向上面的方法走,为什么需要找别人的例子,因为其他人已经踩过坑了,有了一定的思路了。
通过这样不断的看代码,然后总结自己的心得,以后再看其他人的代码的时候,会很快速的理解,就能够在很短的时间内上手。 我推荐的是从Java源码开始,而一些框架的源码例如Spring这种框架的源码,太晦涩难懂了,各种继承,各种封装,还有各种模式结合,如果没有懂这些东西,也没有一定的功底的时候,很容易就陷进去,时间花费了,还没有一点收获,反而打击了自信心,而源码中的各个方法都有注释,代码都比较简单,有一些包下的内容有点绕,例如concurrent包下的关于线程锁的类,这些内容刚开始理解比较困难,但是有了一定看源码的心得,加上网上搜索的资料,一定能够看懂这些代码,读这些代码,体会上古大神他们的思维,就会心生感叹。我读完这些代码之后,对那些上古大神佩服的五体投地,我估计这辈子都不可能写出这么厉害的代码的。 这些源码的之后,平常也经常用到,如果出现了问题,也能够快速定位问题。Java包的源码的重要性就不言而喻了,也不是所有的代码都需要读一遍,但至少把util包下面的内容都看一遍。
也是最近看完了concurrent包下面的内容,有了一些体会,并且通过看了这些类之后,再读一些其他代码的时候,不会心生害怕,并且还有一定的诀窍去弄懂代码的意思,在调试代码,解决BUG时,能够快速的找到问题的所在。

编辑文档

程序员一般需要写接口文档,但是很多时候,就没有了,不喜欢写文档,详细文档,架构文档等等。觉得写这些很麻烦,也没有这个意思,也就离职的时候写一份交接文档,而交接的文档的内容都相对简单。
但是你看厉害的人一般很少写代码,大部分是写文档,是写ptt,写架构文档,画时序图,画流程图,画架构图,这些都是架构师需要做的。这些算是他们基本的技能,并且优秀的程序员,文档写得很完备,能够知道其他程序员快速上手。看一些开源框架,他们的文档就写的非常好,架构师他们也都会将程序的前期文档交付出来,而对于我们这些初级程序员怎样提升这些能力,这种就一点一点去积累。 我在做完接口后,都会话一个时序图,描述该这个接口的内容,如果有复杂的内容会添加一个流程图,描述各个判断条件,如果其他程序员接手这个项目,看完这些信息,应该能够快速上手。
在文档里面,会记录这个项目立项的要点,会议讨论的重点,将一些点为什么要这样做描述清楚,很多代码只有在当时那个语境下才能理解,没有一份文档记录,等过了之后,就容易忘记了,而交给其他人的时候,其他程序员一脸懵圈,如果要改动该地方的时候,也不知道是下手改动,还是不改动。我以前就经常遇到离职之后,接手我项目的程序员,还经常问一个代码块,这个添加在程序里,有什么意思,为什么要添加。幸亏还能记得,然后跟别人解释这当初加上是为了实现怎样的功能。

将简单的事情复杂化

复制粘贴最轻松,最简单,但是也是最不能学到东西的事情。工作中,轻松简单的事情,往往是体力活,写了1000多行代码,但是真正有用的就两三百多行代码,不过不去思考的去优化代码,不思考这个而是否有简单的方法,那么就永远都不能进步。
如上司要求插入一些数据,这个时候,写好一条sql语句,其他的都复制粘贴。轻松完成任务,是否可以考虑做些sql代码,存储过程,来完成这些操作,到下一次又被安排做同样的事情时,可以直接执行。
就是将简单的事情复杂化,这里并不是将代码写的很花哨,各种模式加在一起,代码肯定是越简单越好,能够将复杂的逻辑弄简单,这本身就是将简单的事情复杂化。公式很简单,但是推导出该公式的逻辑就复杂了。
当有了这样的意识之后,学到的东西就会很多,自己的进步就能很大。

我Java学习时的模样(三)的更多相关文章

  1. 我java学习时的模样(二)

    去掉自己浮躁的心 工作了三年,见识过高山,也见过低估,高山同大神一起共事,低估是几家特别烂的外包公司,现在有了另一种心境.已经开始重视自己,去掉当初浮躁的心. 毕业的一两年内,是人成长特别快的时期,也 ...

  2. 我java学习时的模样(一)

    学会敲键盘,能够实现盲打 程序员写代码,是通过键盘将程序输入到编辑器中,而码子的高效,能够让自己的思路更流畅一些.如果想从事IT工作,那面打字就必须得会,并且,如果还一个一个字母去找,上司就会认为是一 ...

  3. 20145316许心远《Java学习笔记》第三周总结

    20145316许心远<Java程序设计>第3周学习总结 教材学习内容总结 一.定义类: 类定义时使用class关键字 如果要将x绑定到新建的对象上,可以使用"="制定 ...

  4. java学习笔记-JavaWeb篇三

    63 JSTL_表达式操作64 JSTL_流程控制操作 65 JSTL_迭代操作 66 JSTL_URL操作67 JSTL_改写MVC案例68 Filter概述 69 创建HttpFilter 70 ...

  5. Java学习笔记,第三章

    Java基础语法 3.1类型.变量与运算符 3.1.1类型 Java可分为基本类型和类类型或参考类型.基本类型主要有 整数:可分为short整数(2字节,-32768 -- 32767),int整数( ...

  6. 疯狂java学习笔记之面向对象(三) - 方法所属性和值传递

    方法的所属性: 从语法的角度来看:方法必须定义在类中 方法要么属于类本身(static修饰),要么属于实例 -- 到底是属于类还是属于对象? 有无static修饰 调用方法时:必须有主调对象(主语,调 ...

  7. java学习小笔记(三.socket通信)【转】

    三,socket通信1.http://blog.csdn.net/kongxx/article/details/7288896这个人写的关于socket通信不错,循序渐进式的讲解,用代码示例说明,运用 ...

  8. JAVA学习笔记-数组的三种初始化方式

      package Study; public class TestArray02 { public static void main(String[] args){//声明 int[] a; int ...

  9. JAVA学习资源网站

    中文java技术网——http://www.cn-java.com/ 灰狐动力(http://www.huihoo.com/)—— 该站点有许多的开源的项目的介绍和学习,涉及操作系统,数据库等许多方向 ...

随机推荐

  1. 关于C#里面SQLite读取数据的操作

    做C#朋友的一个获取DataSet函数,对C#不熟,整理整理,了解怎么用 //挂载表格时候用 public static DataSet Query(string SQLString) { using ...

  2. EF中三大开发模式之DB First,Model First,Code First以及在Production Environment中的抉择

    一:ef中的三种开发方式 1. db first... db放在第一位,在我们开发之前必须要有完整的database,实际开发中用到最多的... <1> DBset集合的单复数... db ...

  3. 通用性站点管理后台(Bee OPOA Platform) (5)- 【扩展】基于WebSocket的监视Sql执行功能

    开始 底层的东西总是很类似, 看了园里的Fish-Li的一系列文章, 写得真好, 无论是风格还是内容. 本来也想想方便点就用remoting实现监视功能算了, 但这样就需要一个Winform的项目了. ...

  4. IO--性能计数器

    --===================================================================== --在分析磁盘队列时,应参考数据库的其他计数器,如Che ...

  5. [C#]C#中字符串的操作

    1.Replace(替换字符):public string Replace(char oldChar,char newChar);在对象中寻找oldChar,如果寻找到,就用newChar将oldCh ...

  6. 数独高阶技巧之八——SDC

    在本系列的第四篇“简单异数链”中,向大家介绍了XY-Wing等一系列Wing类技巧,并提到可以用(拐弯的)数组的观念来理解这些结构,经过第六篇ALS的学习之后,大家回过头再去看Wing,应该可以发现相 ...

  7. Mysql链接字符串问题

    <add key="ConnstringMySql" value="server=xxx.xxx.xxx.xxx;database=YourDatabase;uid ...

  8. Java内存管理笔记

    java内存管理机制 在java中,内存管理由JVM完全负责,java中的"垃圾回收器"负责自动回收无用对象占据的内存资源,这样可以大大减少程序猿在内存管理上花费的时间,可以更集中 ...

  9. 201621123023《Java程序设计》第3周学习总结

    一. 本周学习总结 写出你认为本周学习中比较重要的知识点关键词,如类.对象.封装等 关键字:面向对象,类,对象,构造函数,封装,继承 用思维导图或者Onenote或其他工具将这些关键词组织起来 二.书 ...

  10. php生成N个不重复的随机数实例

    思路: 将随机数存入数组,再在数组中去除重复的值,即可生成一定数量的不重复随机数. /* * array unique_rand( int $min, int $max, int $num ) * 生 ...