皮皮网

【小白 app源码】【溯源码出示】【牧草指标源码】看懂java源码_如何看懂java源码

2024-12-29 00:15:41 来源:Android 图片多选 源码

1.如何快速读懂项目源码javaWeb
2.java编码理解
3.JAVA阅读源码,看懂大量英文注释阅读不方便,源码a源求集成idea里面的看懂翻译java注释由英文翻译为中文的工具。
4.一个简单的源码a源例子教会您使用javap

看懂java源码_如何看懂java源码

如何快速读懂项目源码javaWeb

       一:学会如何读一个JavaWeb项目源代码 步骤:表结构->web.xml->mvc->db->spring

       ioc->log-> 代码

       1、先了解项目数据库的看懂表结构,这个方面是源码a源小白 app源码最容易忘记 的,有时候我们只顾着看每一个方法是看懂怎么进行的,却没

       有去了解数据库之间的源码a源主外键关联。其实如果先了解数据 库表结构,看懂再去看一个方法的源码a源实现会更加容易。

       2、看懂然后需要过一遍web.xml,源码a源知道项目中用到了什么拦

       截器,看懂监听器,源码a源过滤器,看懂溯源码出示拥有哪些配置文件。如果是拦截 器,一般负责过滤请求,进行AOP 等;如果是监 可能是定时任务,初始化任务;配置文件有如使用了 spring

       后的读取mvc 相关,db 相关,service 相关,aop 相关的文件。

       3、查看拦截器,监听器代码,知道拦截了什么请求,这

       个类完成了怎样的工作。有的牧草指标源码人就是因为缺少了这一步, 自己写了一个action,配置文件也没有写错,但是却怎么

       调试也无法进入这个action,直到别人告诉他,请求被拦

       4、接下来,看配置文件,首先一定是mvc相关的,如 springmvc

       中,要请求哪些请求是静态资源,使用了哪些 view 策略,controller 注解放在哪个包下等。 然后是db 相关配置文件,看使用了什么数据库,拉去网页源码使用了

       什么orm框架,是否开启了二级缓存,使用哪种产品作 为二级缓存,事务管理的处理,需要扫描的实体类放在什 么位置。最后是spring 核心的ioc

       功能相关的配置文件, 知道接口与具体类的注入大致是怎样的。当然还有一些如 apectj 置文件,也是在这个步骤中完成

       5、log

       相关文件,日志的各个级别是如何处理的,在哪些 地方使用了log 记录日志

       6、从上面几点后知道了整个开源项目的整体框架,阅读 每个方法就不再那么难了。弹窗监控源码

       7、当然如果有项目配套的开发文档也是要阅读的。

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//

JAVA阅读源码,大量英文注释阅读不方便,求集成idea里面的翻译java注释由英文翻译为中文的工具。

       学会在idea(eclipse)中阅读、调试源码,是java程序员必不可少的一项技能。

       在idea中配完环境后,默认其实也是能够对jdk的源码进行debug调试的。但是无法在源码中添加自己的注释,无法添加自己的理解。如果干瞪眼看的话,可能过段时间,就忘记了。下面就介绍下,如何在jdk源码中为所欲为,像在我们自己的代码中一样写注释、调代码:

       打开idea,选择Project->File->Project Structure->SDKs->Sourcepath,初始状态如下图 :

       打开本地jdk安装路径,本处为E:\java\jdk8,将此路径下的src.zip压缩包解压到自定义的指定文件夹(可以在电脑磁盘任意位置),本处解压到同目录的jdk_source文件夹下,如下图:

       继续在步骤1中的设置页面中操作,将E:\java\jdk8\src.zip通过右侧的减号将其移除;并通过右侧的加号,将解压文件夹E:\java\jdk8\jdk_source导入进来;点击apply,再点击OK。导入结果见下图:

       这时,再重新打开jdk的源码类,我们就可以在源java文件中,添加自己的注释了。

       一定注意:添加注释时,一定不要新加一行写注释。最好在一行代码的后面,使用//进行注释。否则行号和真正的jre中编译后的代码行号对应不上,如果对源码debug时,会出现代码运行和行号不匹配的情况

一个简单的例子教会您使用javap

       javap是JDK自带的工具。

       下面这段简单的Java代码将作为讲解的例子。

       通过以下命令行对NullableTest进行反编译,以获取java编译器生成的字节码:

       javap -v NullableTest >c:\code\1.txt

       接下来,我们将查看方法way1()对应的字节码。

       以下wiki提供了java字节码中每个指令的详细说明:

       en.wikipedia.org/wiki/J...

       现在,让我们对NullableTest反编译得到的字节码进行一些说明:

       0: invokestatic # // Method getInitializedOuter:()Ljava8/Outer;

       这表示调用静态方法getInitializedOuter,其返回类型为Outer。

       3: astore_0

       上述静态方法调用返回的outer引用被存储在局部变量中,其ID为0。

       4: aload_0

       由于在Java源代码中,我已经将静态方法返回的对象引用与null进行了比较,因此使用aload_0指令将存储在ID为0的局部变量中的对象引用重新加载到栈上,以便与null进行比较。

       5: ifnull

       这是我在Java源代码中编写的IF分支。如果检测到的outer引用为null,则直接返回。在字节码中,如果ifnull为true,则跳转到第行字节码,即直接返回。

       如果ifnull不为true,则继续执行下去。outer引用再次加载到栈上。

       从字节码的分析中,我们可以观察到有趣的现象。再次看看我们的IF语句。

       Java编译时,编译器实际上将其转换成了以下写法:

       这一事实可以通过以下图表得到确认。

       javap生成的字节码中的LineNumberTable非常有用。这张表中每行的line后面的数字代表Java源代码的序号,line XX冒号后面的数字代表字节码中每行指令的序号。以下是Java源代码和对应的字节指令在LineNumberTable中的映射关系。

       LineNumberTable维护了Java源代码与字节指令的映射关系,确保了Java代码调试的顺利进行。