1.一个简单的读懂懂例子教会您使用javap
2.怎么看JAVA开源项目的源码?
3.javaç¼ç ç解
4.如何快速读懂项目源码javaWeb
一个简单的例子教会您使用javap
javap是JDK自带的工具。
下面这段简单的源码a源Java代码将作为讲解的例子。
通过以下命令行对NullableTest进行反编译,何读以获取java编译器生成的读懂懂字节码:
javap -v NullableTest >c:\code\1.txt
接下来,我们将查看方法way1()对应的源码a源字节码。
以下wiki提供了java字节码中每个指令的何读shrio 源码详细说明:
en.wikipedia.org/wiki/J...
现在,让我们对NullableTest反编译得到的读懂懂字节码进行一些说明:
0: invokestatic # // Method getInitializedOuter:()Ljava8/Outer;
这表示调用静态方法getInitializedOuter,其返回类型为Outer。源码a源
3: astore_0
上述静态方法调用返回的何读outer引用被存储在局部变量中,其ID为0。读懂懂
4: aload_0
由于在Java源代码中,源码a源我已经将静态方法返回的何读对象引用与null进行了比较,因此使用aload_0指令将存储在ID为0的读懂懂局部变量中的对象引用重新加载到栈上,以便与null进行比较。源码a源php源码保护加密
5: ifnull
这是何读我在Java源代码中编写的IF分支。如果检测到的outer引用为null,则直接返回。在字节码中,如果ifnull为true,则跳转到第行字节码,即直接返回。
如果ifnull不为true,则继续执行下去。outer引用再次加载到栈上。
从字节码的分析中,我们可以观察到有趣的现象。再次看看我们的冰蝎源码研究IF语句。
Java编译时,编译器实际上将其转换成了以下写法:
这一事实可以通过以下图表得到确认。
javap生成的字节码中的LineNumberTable非常有用。这张表中每行的line后面的数字代表Java源代码的序号,line XX冒号后面的数字代表字节码中每行指令的序号。以下是Java源代码和对应的字节指令在LineNumberTable中的映射关系。
LineNumberTable维护了Java源代码与字节指令的映射关系,确保了Java代码调试的顺利进行。
怎么看JAVA开源项目的源码?
有个开源代码托管平台叫github来了解下。GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git作为唯一的版本库格式进行托管,故名GitHub。
github也可以是gradle 插件源码查看一个远程代码仓库,你可以将你的代码或者项目上传到github仓库,这个完全没有问题,网上有github客户端管理软件,操作非常简单,就类似于:SVN、CVS。
github也是一个开源代码协作社区,通过github你可以参与别人的开源项目,也可以让别人参与你的开源项目。有些公司的产品,自己不想投入人力,但又不想放弃,就采用github代码托管的区块链指标源码方式,将代码开源出去,让开发爱好者参与进来,其中docker就是一个很好的例子,也是开源最成功的一个项目。
下面介绍如何从github上拿到开源项目:zxin。
1、打开github官网“,全是英文,
要能读懂源代码,需要有很好的英文阅读能力,祝你好运。学JAVA经常听老师说有空去看看源码,也不告诉人家怎么看,该看什么东西。不可能是无脑的把一个开源的项目反编译就这样看吧例如二维码的ZXing开源项目,我想阅读下这个的源码,该怎么看,请大神赐教了,谢谢。javaç¼ç ç解
ãã<%@ page contentType= text/ charset=utf pageEncoding= GBK %>ããjsp页é¢ï¼pageEncodingï¼ââæ ¹æ®pageEncodingç设å®è¯»åjspââ>ç¿»è¯æç»ä¸çUTF JAVAæºç ï¼å³ javaï¼ââç±JAVACçJAVAæºç è³java byteCodeçç¼è¯ââ>
ããç¼è¯æUTF encodingçäºè¿å¶ç ï¼å³ classï¼ââTomcatï¼æå ¶çapplication containerï¼è½½å ¥åæ§è¡é¶æ®µäºçæ¥çJAVAäºè¿å¶ç ââ>è¾åºcontentTypeç¼ç ç»æµè§å¨
ãã 页é¢è¾å ¥çåæ°ç¨pageEncodingæ¥ç¼ç
ãã 页é¢çé»è®¤ç¼ç æ¯ä»ä¹ï¼
ããntentTypeçé»è®¤ç¼ç æ¯ä»ä¹ï¼
ãã ç¼ç å解ç è¿ç¨åç§æ件æ¶ä»ä¹ç¼ç
ããresponse setContentTypeï¼ text/ charset=gb ï¼ æ¯å¨é¡µé¢æ¾ç¤ºæ¶è®¾ç½®çåç¬¦æ ¼å¼request setCharacterEncodingï¼ gb ï¼ æ¯servletæ¥å请æ±å对请æ±ä¸çå符è¿è¡è®¾ç½®åç¬¦æ ¼å¼ å 为é»è®¤éè¿ç½ç»ä¼ è¾çå 容é½è¢«è¿è¡äºiso ç¼ç å¦ææ³å¨åå¤ççæ¶åä¸è®©ä¸ææä¹±ç é£å°±å¾å¯¹å¾å°çå 容è¿è¡gb ç¼ç
ããJSP pageEncodingåcontentTypeå±æ§
ããJSPè¦ç»è¿ä¸¤æ¬¡ç ç¼ç 第ä¸é¶æ®µä¼ç¨pageEncoding 第äºé¶æ®µä¼ç¨utf è³utf 第ä¸é¶æ®µå°±æ¯ç±Tomcatåºæ¥çç½é¡µ ç¨çæ¯contentType
ããå ³äºJSP页é¢ä¸çpageEncodingåcontentType两ç§å±æ§çåºå«
ããpageEncodingæ¯jspæ件æ¬èº«çç¼ç
ããcontentTypeçcharsetæ¯ææå¡å¨åéç»å®¢æ·ç«¯æ¶çå 容ç¼ç
ããJSPè¦ç»è¿ä¸¤æ¬¡ç ç¼ç 第ä¸é¶æ®µä¼ç¨pageEncoding 第äºé¶æ®µä¼ç¨utf è³utf 第ä¸é¶æ®µå°±æ¯ç±Tomcatåºæ¥çç½é¡µ ç¨çæ¯contentType
ãã第ä¸é¶æ®µæ¯jspç¼è¯æ java å®ä¼æ ¹æ®pageEncodingç设å®è¯»åjsp ç»ææ¯ç±æå®çç¼ç æ¹æ¡ç¿»è¯æç»ä¸çUTF JAVAæºç ï¼å³ javaï¼ å¦æpageEncoding设å®éäº æ没æè®¾å® åºæ¥çå°±æ¯ä¸æä¹±ç
ãã第äºé¶æ®µæ¯ç±JAVACçJAVAæºç è³java byteCodeçç¼è¯ ä¸è®ºJSPç¼åæ¶åç¨çæ¯ä»ä¹ç¼ç æ¹æ¡ ç»è¿è¿ä¸ªé¶æ®µçç»æå ¨é¨æ¯UTF çencodingçjavaæºç
ããJAVACç¨UTF çencoding读åjavaæºç ç¼è¯æUTF encodingçäºè¿å¶ç ï¼å³ classï¼ è¿æ¯JVM对常æ°å串å¨äºè¿å¶ç ï¼java encodingï¼å 表达çè§è
ãã第ä¸é¶æ®µæ¯Tomcatï¼æå ¶çapplication containerï¼è½½å ¥åæ§è¡é¶æ®µäºçæ¥çJAVAäºè¿å¶ç è¾åºçç»æ ä¹å°±æ¯å¨å®¢æ·ç«¯è§å°ç è¿æ¶éèå¨é¶æ®µä¸åé¶æ®µäºçåæ°contentTypeå°±åæ¥äºåæ
ããcontentTypeç设å®
ããpageEncoding åcontentTypeçé¢è®¾é½æ¯ ISO èé便设å®äºå ¶ä¸ä¸ä¸ª å¦ä¸ä¸ªå°±è·çä¸æ ·äºï¼TOMCAT æ¯å¦æ¤ï¼ ä½è¿ä¸æ¯ç»å¯¹ç è¿è¦çåèªJSPCçå¤çæ¹å¼ èpageEncodingä¸çäºcontentType æ´æå©äºæ´²åºçæå CJKVç³»JSPç½é¡µçå¼ååå±ç¤º ï¼ä¾pageEncoding=GB ä¸çäº contentType=utf ï¼
ããjspæ件ä¸å java javaå¨è¢«ç¼è¯å¨è¯»å ¥çæ¶åé»è®¤éç¨çæ¯æä½ç³»ç»æ设å®çlocaleæ对åºçç¼ç ä¸è¬æ们ä¸ç®¡æ¯å¨è®°äºæ¬è¿æ¯å¨ueä¸å代ç å¦æ没æç»è¿ç¹å«è½¬ç çè¯ ååºæ¥çé½æ¯æ¬å°ç¼ç æ ¼å¼çå 容 æ以ç¼è¯å¨éç¨çæ¹æ³å好å¯ä»¥è®©èææºå¾å°æ£ç¡®çèµæ
ããä½æ¯jspæ件ä¸æ¯è¿æ · å®æ²¡æè¿ä¸ªé»è®¤è½¬ç è¿ç¨ ä½æ¯æå®äºpageEncodingå°±å¯ä»¥å®ç°æ£ç¡®è½¬ç äº
ãã举个ä¾å
ãã<%@ page contentType= text/ charset=utf %>大é½ä¼æå°åºä¹±ç å 为æè¾å ¥ç ä½ å¥½å æ¯gbkç ä½æ¯æå¡å¨æ¯å¦æ£ç¡®æå° ä½ å¥½å ä¸å¾èç¥
ããä½æ¯å¦ææ´æ¹ä¸º
lishixinzhi/Article/program/Java/hx//如何快速读懂项目源码javaWeb
一:学会如何读一个JavaWeb项目源代码 步骤:表结构->web.xml->mvc->db->spring
ioc->log-> 代码
1、先了解项目数据库的表结构,这个方面是最容易忘记 的,有时候我们只顾着看每一个方法是怎么进行的,却没
有去了解数据库之间的主外键关联。其实如果先了解数据 库表结构,再去看一个方法的实现会更加容易。
2、然后需要过一遍web.xml,知道项目中用到了什么拦
截器,监听器,过滤器,拥有哪些配置文件。如果是拦截 器,一般负责过滤请求,进行AOP 等;如果是监 可能是定时任务,初始化任务;配置文件有如使用了 spring
后的读取mvc 相关,db 相关,service 相关,aop 相关的文件。
3、查看拦截器,监听器代码,知道拦截了什么请求,这
个类完成了怎样的工作。有的人就是因为缺少了这一步, 自己写了一个action,配置文件也没有写错,但是却怎么
调试也无法进入这个action,直到别人告诉他,请求被拦
4、接下来,看配置文件,首先一定是mvc相关的,如 springmvc
中,要请求哪些请求是静态资源,使用了哪些 view 策略,controller 注解放在哪个包下等。 然后是db 相关配置文件,看使用了什么数据库,使用了
什么orm框架,是否开启了二级缓存,使用哪种产品作 为二级缓存,事务管理的处理,需要扫描的实体类放在什 么位置。最后是spring 核心的ioc
功能相关的配置文件, 知道接口与具体类的注入大致是怎样的。当然还有一些如 apectj 置文件,也是在这个步骤中完成
5、log
相关文件,日志的各个级别是如何处理的,在哪些 地方使用了log 记录日志
6、从上面几点后知道了整个开源项目的整体框架,阅读 每个方法就不再那么难了。
7、当然如果有项目配套的开发文档也是要阅读的。