`

Java开发的一些Hacker技巧

阅读更多

在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。

分享到:
评论
1 楼 pocketduck 2009-06-30  
lz法律意识这么强啊,这种东西防君子不防小人的,你后面的提到的方法可以是可以,不过也太麻烦了吧,直接把需要看的部分反编译了最简单直接了,就是你上面提到的

相关推荐

    hackerrankjava:HackerRank挑战Java的HackerRank挑战

    总的来说,HackerRank Java挑战为学习者提供了实践Java编程技巧的机会,涵盖了从基础到高级的各种主题。参与挑战的开发者可以通过解决实际问题来提高他们的编程思维、问题解决能力和代码质量。在这个过程中,他们...

    java源码hacker-HackerRank-Solutions:来自我的HackerRank的各种问题的源代码

    通过学习这个项目,你可以了解到作者如何用Java来解决HackerRank上的问题,掌握不同的编程技巧和算法应用,同时也可以了解开源项目的基本结构和管理方式。这对于提升自己的编程能力,特别是准备技术面试和参与开源...

    hackerrank:Hackerrank测试解决方案

    总结,"HackerRank测试解决方案"意味着使用Java语言解决HackerRank平台上的编程挑战,涵盖了广泛的算法、数据结构和编程技巧。通过学习和实践这些解决方案,不仅可以提升Java编程能力,也能增强对算法和问题解决的...

    java 基础及入门

    为了开始Java编程,你需要安装Java Development Kit (JDK),这是Java开发的基本工具包,包含了Java编译器、运行时环境和一些常用的工具。IDE(集成开发环境)如Eclipse、IntelliJ IDEA或NetBeans,提供了丰富的功能...

    Java数据结构分析+Java程序员面试宝典

    Java是世界上最流行的编程语言之一,尤其在企业级应用和服务器端开发中占据主导地位。面试时,对于Java程序员,特别是那些寻求高级职位的人来说,对数据结构和算法的深入理解至关重要。"Java数据结构分析+Java程序员...

    HackerRank-java

    通过深入研究 "HackerRank-java" 项目,不仅可以提升编程技巧,还可以熟悉HackerRank的挑战格式,为参加编程比赛或求职面试做好准备。同时,这也是一个良好的实践平台,可以将理论知识转化为实际编程经验。

    Java-HackerRank-Solutions-

    Java是世界上最流行的编程语言之一,尤其在Web应用和企业级软件开发中占据主导地位。HackerRank是一个在线平台,提供各种编程挑战,帮助开发者提升技能并进行技术面试准备。"Java-HackerRank-Solutions-"这个压缩包...

    hackerrank

    通过参与HackerRank的Java挑战,开发者不仅可以提升编程技巧,还能了解实际开发中可能遇到的问题,同时,这种竞技性的学习方式也能激发学习兴趣,增强解决问题的能力。无论是初学者还是经验丰富的开发者,都可以在...

    Java设计竞赛.rar

    此外,这个资料对于准备技术面试的求职者尤其有价值,因为Java是许多企业的首选开发语言,而算法和数据结构知识则是评估候选人技术实力的重要标准。通过系统的训练和实践,开发者能够更好地理解和运用Java来解决复杂...

    Java_PJ2:HackerRank JavaString反向解决方案

    在实际开发中,理解并熟练掌握这些基本的字符串处理技巧是至关重要的,因为它们经常被用于各种字符串相关的算法和数据处理任务。通过解决HackerRank这样的编程挑战,你可以不断提升自己的编程技能和解决问题的能力。

    Algorithm-HackerRank.zip

    同时,HackerRank的社区也会分享他人的解决方案,通过对比和学习,你可以发现更优的算法实现或编程技巧。 总的来说,"Algorithm-HackerRank.zip"是一个宝贵的资源库,它将理论与实践相结合,帮助你深入理解算法并...

    头歌Java程序设计答案.txt

    掌握这些标准类库的使用是进行高效Java开发的必要条件。 异常处理是Java程序设计中的重要部分,用于处理程序运行时出现的错误和意外情况。Java使用try、catch、finally以及throw和throws关键字来处理异常。 集合...

    HackerRank练习:我对各种HackerRank问题的解决方案

    Java是一种广泛使用的面向对象的编程语言,以其"一次编写,到处运行"的特性闻名,适用于桌面应用、Web应用、移动应用,尤其是Android应用开发,以及后端服务器开发等。在HackerRank上,Java是众多编程挑战中常见的...

    java面试题源码-OpenSourceCode:hackerrank解决方案github|Java解决方案|SQL查询面试问题

    在IT行业中,尤其是在Java开发领域,面试准备是至关重要的。这个名为"java面试题源码-OpenSourceCode"的开源项目提供了对HackerRank问题的Java解决方案,以及SQL查询面试问题,是准备技术面试的宝贵资源。让我们深入...

    JAVA,C#各种面试题

    在IT行业中,Java和C#是两种非常重要的编程语言,广泛应用于软件开发、Web应用、移动应用以及游戏开发等多个领域。对于求职者来说,掌握这两种语言的基本知识和深入理解是必不可少的。以下是一些关于Java和C#的面试...

    Java优质学习资料汇总

    首先,"一个牛人给java初学者的建议"很可能是一篇经验丰富的程序员分享的学习心得,通常会包含学习路径的建议、常见误区的提醒以及如何有效提高编程技能的技巧。这份资料可能涵盖了学习Java的基础知识,如语法特性、...

    在哪里可以获取视频或在Java编码上进行项目的一些技巧? 请提供一些有关此查询的详细信息。

    以下是一些关于如何获取视频教程、项目实践技巧和提升Java编程能力的详细信息: 1. **在线学习平台**: - **Coursera**: 提供由顶级大学和业界专家教授的Java课程,例如“Java Programming and Software ...

    Hackerrank-Solutions

    5. **学习资源**:除了实际参与 Hackerrank 挑战,还可以通过阅读其他开发者分享的解决方案,了解不同的解题思路和优化技巧。此外,Python 的官方文档、在线教程和论坛(如 Stack Overflow)都是获取帮助的好地方。 ...

    164个完整的Java代码

    Java编程语言是软件开发领域广泛使用的工具,尤其在企业级应用和互联网开发中占据着重要地位。"164个完整的Java代码"压缩包显然是一份丰富的资源集合,旨在帮助学习者深入理解Java编程,提高编程技能。这些代码涵盖...

    Hackerrank:包含针对我在hackerrank中解决的问题(主要是在Java中)的解决方案

    通过学习和理解这些Java解题代码,不仅可以提升你的编程技巧,还可以深入理解算法和数据结构,这对于面试和实际开发工作都非常有帮助。同时,HackerRank平台上的题目涵盖了多种难度,从基础到高级,适合不同水平的...

Global site tag (gtag.js) - Google Analytics