在Java开发的世界里,最开心的事情是很多库都是开源的,而且很多开源协议都允许你修改源代码并且重新发布。可是,有的时候,我们还是不得不面对一些无法找到源代码的情况,可是我们又需要看到源代码,甚至需要重新编译库。什么时候会碰到这种情况呢?我举一些例子。
我们用某个库,发现某些情况异常出现在库里面,可是我们Google又找不到原因。可能这个时候我们想看看源代码,加入一些Logger的输出,看看到底怎么回事。可能这个库开源,可是我一时很难找到对应于这个Jar的源代码版本,或者查找要花很多时间。
其实上面的例子就包括两种情况,1就是查看源文件,也许一看就明白为什么会丢出那个异常 2.修改源文件,重新编译打包运行。如果只是想看源文件,我强烈推荐工具:JDGUI,官方网站:http://java.decompiler.free.fr/。 最大的有点就是有图形界面,查看起来很方便,而且不同类之间可以链接。缺点是生成的代码我觉得没有Jad好,可是不影响阅读。其实查看如果可以解决问题,是很不错的,因为如果纯粹为了解决问题看看源代码,应该不算违法吧。2重新编译打包,这个需要一些技巧。首先,我推荐用jad这个工具反编译class文件,然后呢,找到编译这个java文件需要的库。一般情况下,本身这个jar是需要在classpath里面的,而且可能需要很多其他的库。不过一般也不会太多。然后编译好这个class文件,用jar -uf xxx.jar com.yyy.zzz.AAA.class这种命令就可以更新这个jar。这个工作理论不复杂,可是需要很强的解决问题的能力和Java的基础能力,当然阅读代码的能力也要很强大(牛和不牛,这个方面可以体现的淋漓精致),而且那种“成就感”可以让你像吃了兴奋剂一样^_^
可是有的时候,我们没办法反编译源代码,或者反编译之后我们不能发布(我们还是要尊重法律的)。怎么办呢?其实有些时候可能我们不需要重新编译,可能使用一些反射的机制就可以解决问题了。譬如:
[1]我们确实想访问某个非public的方法;
[2]我们确实想修改一个private变量的值。
我知道这么做不好,可是有时候真的需要。怎么办呢?使用Java的反射机制。先使用class的getMethod方法找到这个方法method,然后再使用method.setAccessible(true),再使用method.invoke(object, arg)来调用这个方法。这个思路我用过很多次,应该是
满不错的解决方案。有个地方要注意一下,如果你有个对象A a = new B(); 假设B extends A。如果你需要找的方法fun是
A的方法, B是继承来得。那么你需要明确用A.class.getMethod,而不能使用B.class.getMethod。
分享到:
相关推荐
GitHub上的hackerrank解决方案| Java中的hackerrank教程|英特尔:registered:开发人员专区hackerrank 30天的代码解决方案| hackerrank算法解决方案| hackerrank破解编码面试解决方案| hackerrank通用编程解决方案| ...
Laravel开发-hackerrank-api PHP和Laravel Hackrank代码检查器API
大多数解决方案是我自己的,但其中一些来自其他作者,因为我将其视为自己的学习和理解过程。 我尽可能地将作者归功于作者,并包括我获得用于获得答案的来源的地方。 运行说明 由于我在将大部分代码上传到 Hacker ...
Hackerrank-Java-解决方案用 Java 编写的 Hackerrank 问题
java源码 hacker
-DartifactId=hackernews-graphql-java -Dversion=1.0-SNAPSHOT 接下来,您将设置项目结构。 立即在src/main下创建一个名为java的目录。 这是所有 Java 源代码的去处。 此外,请确保您还从src/main/webapp删除了WEB-...
Angular 2 HN – 采用Angular开发的Hacker News客户端,支持离线使用。
hackerrankjava HackerRank Java挑战// Java的HackerRank挑战 用Java语言收集了针对HackerRank网站挑战的解决方案。
hackerrank-training-java Java Hackerrank培训热身挑战
HackerRank-Java- HackerRank Java解决方案
Process Hacker是一款针对高级用户的安全分析工具,它可以帮助研究人员检测和解决软件或进程在特定操作系统环境下遇到的问题。除此之外,它还可以检测恶意进程,并告知我们这些恶意进程想要实现的功能。 Process ...
有关hacker 的文章和资料分享给大家
java源码 hacker
采用由Vue和React Native开发的移动版Hacker News
Resource Hacker文件修改
google hacker 必备技能~ 详细
hacker-history.pdf hacker-history.pdf
resource_hacker
黑客等级:问题的解决方案[1] 用 Java 解决黑客排名问题。 [1]
Resource Hacker是非常强大的资源查看器,编译和反编译工具!Resource Hacker 主要用于察看、反汇编和取代 Windows 32 位可执行程序中的资源,支持 Delphi 5 和 C++ Builder。