当前位置: 首页 > news >正文

看java源码怎么学_3个阅读跟踪Java源码的小技巧,很实用!

今天

本文基于Eclipse IDE,我们每天都使用的IDE其实提供了很多强大的功能,掌握它们,往往能够事半功倍。

1、Quick Type Hierarchy 快速查看类继承体系。

快捷键:Ctrl + T

查看类很多人可能都知道,可源码阅读的时候更多用来查看方法体系更重要,可以方便快速的定位到方法的实现类。如:

此时如果想查看getBean()方法如何实现,可能会让你失望。结果如下:

进入到了BeanFactory的接口定义方法,什么也没有。

此时我们直接在getBean上 Ctrl+T :

可以看到其实现的子类,点击子类进去即可。此方法还适用于框架中非常常见的模板方法模式,在抽象类中定义的模板方法,用这招轻松找到实现类。

当然还有详细的Open Type Hierarchy

会在左侧视图里面展示更好的Type View:

2、Open Call Hierachy 打开调用层级

快捷键:Ctrl+Alt+H

个人认为这是阅读源码最有用的利器,掌握它,可以轻松游走于各种方法调用之间。然而从我身边的朋友来看, 很多人都不知道他的存在。

Open Call Hierachy 查看结果如下,调用关系清晰明朗,可以直接定位到调用的地方。

3、Debug 断点的灵活使用

断点调式时,心中必须很清楚F5、F6、F7、F8的作用,不然要么迷失于源码之中,要么什么都没看清就走完了。

重新啰嗦一下它们的作用:

F5 Step Into,单步进入。进入到某个方法里面;

F6 Step Over,单步结束。一行一行的执行代码,入门时很多人只会一行一行走;

F7 Step

Return,跳出放发。进入到某个方法里面时,如果发现这个方法没有你想看的东西,或者已经看到了你想看的,直接F7,跳出到方法外。

F8 Resume,继续往下执行。往下执行,遇到下一个断点时再停下来,没有则一直运行完。

调试时我们可能会经常遇到loadClass的情况:

在40行想进入ClassPathXmlApplicationContext构造方法,F5不料进入了类加载:

熟悉类加载的同学会很熟悉,不熟悉类加载机制的也不要慌,这是说明你调试的类第一次被加载,这时候我们F7跳出类加载,回到40行。

这个时候再按F5会真正进入ClassPathXmlApplicationContext构造方法。

当我们断点跟踪Spring这种源码的时候,一定要有节奏,以优先找到整体脉络为准,不要一直的F5进入每一行细看,F5下去,几天都走不完Spring。能熟练在Spring这种框架中F5、F6、F7、F8,就离弄懂他不远了。

Dubug的时候还应该注意debug视图的线程栈:

这个视图能够让你在走得比较深的时候,可以一眼看出自己怎么进来的,当前位于什么方法里等信息,还可以点击对应的代码行数进入查看。

总结,这是我使用IDE跟踪源码的几个小技巧,尤其是第二点,是很实用的,希望对大家在进行源码跟踪时有一定帮助。

相关文章:

  • java的类方法_【Java】类方法和实例方法
  • java 废弃注解_Java 注解
  • java从菜鸟_Java从菜鸟到精通(5) | 学步园
  • python数据格式_python数据类型
  • 下载mysql然后怎么安装_mysql 下载与安装
  • java 方法前加同步_Java同步的三种实现方式详解
  • mysql 事务的作用_使用Mysql事务的优点
  • java和android架构公众号_Android仿微信公众号界面
  • 连连看的连线怎么写java_求助 这个连连看的方法地方该怎么写
  • php java字节流_php中stream(流)的用法
  • java自动雨刷系统_【图文】汽车自动雨刷的使用指南
  • php 多线程处理_PHP CURL 多线程操作代码实例
  • php定义函数打印表格内容,php 自定义函数实现将数据 以excel 表格形式导出示例...
  • nodejs与php混合,php与nodejs的加密数据互通
  • php参数特殊字符,PHP中URL中特殊字符引起的问题(+,=) 分析及解决方法
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • axios 和 cookie 的那些事
  • CSS 三角实现
  • iOS 颜色设置看我就够了
  • java2019面试题北京
  • Java编程基础24——递归练习
  • js递归,无限分级树形折叠菜单
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • MySQL数据库运维之数据恢复
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 计算机常识 - 收藏集 - 掘金
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 我的zsh配置, 2019最新方案
  • 一个项目push到多个远程Git仓库
  • 译有关态射的一切
  • (1)无线电失控保护(二)
  • (4)Elastix图像配准:3D图像
  • (6)设计一个TimeMap
  • (LeetCode) T14. Longest Common Prefix
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (五十)第 7 章 图(有向图的十字链表存储)
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .Net程序帮助文档制作
  • .NET中统一的存储过程调用方法(收藏)
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [Android]使用Retrofit进行网络请求
  • [C#]获取指定文件夹下的所有文件名(递归)
  • [CodeForces-759D]Bacterial Melee
  • [EULAR文摘] 利用蛋白组学技术开发一项蛋白评分用于预测TNFi疗效