为何阅读JDK源码

news/2024/7/3 3:49:48

原文地址:https://blog.csdn.net/ShyTan/article/details/81584436

为什么要读源码?

          现在一个项目基本离不开jar包, 第三方api,我们可以反编译去看一些大神们的源码,当然源码的水平也是有好有坏。都有哪些好处呢?

  1、了解思想

          程序员大部分开发中都是些增删查改,过的的业务的逻辑。比如一个需求 我们用了几十行代码写了。 感觉没问题, 但是别人可能用几行就搞定了,要学习别人的思路。

  2、熟悉设计模式

        包括24种设计模式,Java对象的三大特征,好的代码中都有体现。

  3、提高自己的代码优雅性

       我们代码可能更多是业务的需求, 但是源码大部分都比较优雅, 比如jdk 源码,非常精简。要学习源码的代码写法。

  4、知晓原理,提升面试能力

     面试中经常闻到源码, 你是否读过源码,你觉得为什么这么写,举个例子, 之前面试碰到被别人问, jdk 7 和 jdk 8 的concurrentHashMap  的size()方法分别是怎么实现的, 这个集合经常被问到。

  5、让自己变得有耐心

    我们知道, 阅读别人的代码是非常痛苦的事 ,尤其是一些比较差的代码, 可读性非常差, 当然 jdk 源码 也比较头痛。 举个例子, String ,这个 对象,它 的方法我们可能基本都用过了,但是它 的源码有多少人真正看完了呢?

 我看了下, 它 的源码有2000多行,一开始看起来非常枯燥 ,阅读源码, 让自己静下心来,程序员本身就是一份安静的工作。

  6、让自己变得有逼格

  以前的一个资深开发每次跟我们聊天, 说那啥jdk源码都基本看过了,当然10个程序员有1个阅读源码就不错了, 至少值得尊敬。

  7、提升自己代码严谨性

  一个程序员,只要工作, 就离不开bug ,jdk 的源码大部分都是专家写的 ,代码严谨性非常强,我们看了代码, 改变自己平时错误的编码习惯, 包括最基本的判空啊。再比如, 一个类里面的常量到底是用private 修饰,还是protect修饰, 还是public修饰,

 bug越多, 越让别人鄙视。


http://www.niftyadmin.cn/n/4354905.html

相关文章

(转)Unity3D 三种移动方式

第一种移动方式: 首先在方法外声明刚体:private Rigidbody body; 为了明显,可定义一个速度:public float speed; void Start(){ speed 10f; body GetCompoente(); } void Update(){ //第一种移动方式:直接修改Transform属性 //如果是球体,自身不会旋转 if(Input.Ge…

《SQL注入原理》

随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使…

unity中awak,start,update之间的关系(转)

正式开始学习Unity了。当然,第一个遇到的问题就是Awake和Start的问题,之前在网上查过一下这两者的区别,简单记忆了一下,认为自己知道了两者的区别。不过实际用起来,发现对于这两者到底是什么区别,心里还是没…

Basic FIFO Queue

Queue - 一种线程安全的FIFO实现 Python的Queue模块提供一种适用于多线程编程的FIFO实现。它可用于在生产者(producer)和消费者(consumer)之间线程安全(thread-safe)地传递消息或其它数据,因此多个线程可以共用同一个Queue实例。Queue的大小(元素的个数&…

类 对象的定义实例和引用

类的定义、对象的定义、对象实例化、对象引用}类;可以理解为一类对象高度抽象而成的集合体,表示他们共性的组件 对象,则是通过类来创建一个对象;可以创建N多个对象 类名 对象名——则创建一个对象;此时称之为定义一个…

一个屌丝程序员的青春(三六三)

10后:什么是工作? 00后:为什么要工作? 95后:感觉不爽就离职。 90后:领导骂我就离职。 80后:有收入高就离职。 70后:为什么要离职? 60后:什么是离职&…

一个屌丝程序员的青春(三六四)

很多人越来越不愿意发朋友圈了,可能是以下原因: 一、生活压力大、工作压力大 越来越多的人可能每天只点开一次朋友圈,更别说去发朋友圈了。那些孤独的、工作轻松的、空闲时间多的人,可能每天会刷很多遍手机,翻看很多…

学习:

transform、 time、 rigid body、 input(get key、geotaxis、getaixsraw、mouse position、getbuttondown) vector3、 获取鼠标坐标、 屏幕坐标和世界坐标、 gameobject、 数组、 结构体、