JAVA 高手请进这个是我原来的笔记整理,送你了!
貌似有点长 , 删掉一些无关紧要的
第一课
HelloJava
1、Java开发工具JDK的安装
2、 JDK的命令工具
JDK的最重要命令行工具:
java: 启动JVM执行class
javac: Java编译器
jar: Java打包工具
javadoc: Java文档生成器
这些命令行必须要非常非常熟悉 , 对于每个参数都要很精通才行 。对于这些命令的学习 , JDK Documentation上有详细的文档 。
二、 JDK Documentation
Documentation在JDK的下载页面也有下载连接 , 建议同时下载Documentation 。Documentation是最最重要的编程手册,涵盖了整个Java所有方面的内容的描述 。可以这样说,学习Java编程 , 大部分时间都是花在看这个Documentation上面的 。我是随身携带的,写Java代码的时候,随时查看,须臾不离手 。
四、 Java应用的运行环境
Java Learning Path(三)过程篇
学习Java的第一步是安装好JDK,写一个Hello World , ? 其实JDK的学习没有那幺简单,关于JDK有两个问题是很容易一直困扰Java程序员的地方:一个是CLASSPATH的问题,其实从原理上来说 , 是要搞清楚JRE的ClassLoader是如何加载Class的;另一个问题是package和import问题,如何来寻找类的路径问题 。把这两个问题摸索清楚了,就扫除了学习Java和使用JDK的最大障碍 。推荐看一下王森的《Java深度历险》 , 对这两个问题进行了深入的探讨 。
第二步是学习Java的语法 。Java的语法是类C的,基本上主流的编程语言不是类C,就是类C的 , 没有什幺新东西,所以语法的学习 , 大概就是半天的时间足够了 。唯一需要注意的是有几个不容易搞清楚的关键字的用法,public,protected , private,static,什幺时候用 , 为什幺要用 , 怎幺用,这可能需要有人来指点一下,我当初是完全自己琢磨出来的 , 花了很久的时间 。不过后来我看到《Thinking in Java》这本书上面是讲了这些概念的 。
第三步是学习Java的面向对象的编程语言的特性的地方 。比如继承,构造器,抽象类,接口,方法的多态 , 重载,覆盖,Java的异常处理机制 。对于一个没有面向对象语言背景的人来说 , 我觉得这个过程需要花很长很长时间,因为学习Java之前没有C的经验,只有C的经验,我是大概花了一个月左右吧,才彻底把这些概念都搞清楚 , 把书上面的例子反复的揣摩 , 修改,尝试 , 把那几章内容反复的看过来,看过去,看了不下5遍,才彻底领悟了 。不过我想如果有C经验的话,应该一两天时间足够了 。那幺在这个过程中,可以多看看《Thinking in Java》这本书,对面向对象的讲解非常透彻 。可惜的是我学习的时候,并没有看到这本书,所以自己花了大量的时间,通过自己的尝试和揣摩来学会的 。
第四步就是开始熟悉Java的类库 。Java的基础类库其实就是JDK安装目录下面jrelibrt.jar这个包 。学习基础类库就是学习rt.jar 。基础类库里面的类非常非常多 。据说有3000多个 , 我没有统计过 。但是真正对于我们来说最核心的只有4个,分别是
java.lang.*;
java.io.*;
java.util.*;
java.sql.*;
这四个包的学习 , 每个包的学习都可以写成一本厚厚的教材,而O'reilly也确实是这样做的 。我觉得如果时间比较紧 , 是不可能通过读四本书来学习 。我觉得比较好的学习方法是这样的:
首先要通读整个package的框架,了解整个package的class,interface,exception的构成,最好是能够找到介绍整个包框架的文章 。这些专门介绍包的书籍的前几章应该就是这些总体的框架内容介绍 。
对包整体框架的把握并不是要熟悉每个类的用法 , 记住它有哪些属性,方法 。想记也记不住的 。而是要知道包有哪些方面的类构成的,这些类的用途是什幺 , 最核心的几个类分别是完成什幺功能的 。我在给人培训的时候一般是一次课讲一个包,所以不可能详细的介绍每个类的用法,但是我反复强调,我给你们讲这些包的不是要告诉你们类的方法是怎幺调用的,也不要求你们记住类的方法调用,而是要你们了解,Java给我们提供了哪些类,每个类是用在什幺场合,当我遇到问题的时候,我知道哪个类,或者哪几个类的组合可以解决我的问题,That'all?。蔽颐蔷咛逍闯绦虻氖焙?nbsp;, 只要你知道该用哪个类来完成你的工作就足够了 。编码的时候,具体的方法调用,是边写代码,边查Documentation,所有的东西都在Documentation里面,不要求你一定记?。?实际你也记不住3000多个类的总共将近10万个方法调用 。所以对每个包的总体框架的把握就变得极为重要 。
第五步,通过上面的学习,如果学的比较扎实的话,就打好了Java的基础了,剩下要做的工作是扫清Documentation里面除了上面4个包之外的其它一些比较有用处的类 。相信进展到这一步,Java的自学能力已经被培养出来了,可以到了直接学习Documentation的水平了 。除了要做GUI编程之外,JDK里面其它会有用处的包是这些:
java.text.*;
java.net.*;
javax.naming.*;
这些包里面真正用的比较多的类其实很少,只有几个 , 所以不需要花很多时间 。
第六步,Java Web 编程,Web编程的核心是HTTP协议 , HTTP协议和Java无关,如果不熟悉HTTP协议的话,虽然也可以学好Servlet/JSP编程,但是达不到举一反三,一通百通的境界 。所以HTTP协议的学习是必备的 。如果熟悉了HTTP协议的话,又有了Java编程的良好的基础,学习Servlet/JSP简直易如反掌,我学习Servlet/JSP就用了不到一周的时间,然后就开始用JSP来做项目了 。
在Servlet/JSP的学习中 , 重头仍然是Servlet Documentation 。Servlet API最常用的类很少,花比较少的时间就可以掌握了 。把这些类都看一遍,多写几个例子试试 。Servlet/JSP编程本质就是在反复调用这些类来通过HTTP协议在Web Server和Brower之间交谈 。另外对JSP,还需要熟悉几个常用JSP的标记,具体的写法记不住的话,临时查就是了 。
此外Java Web编程学习的重点要放在Web Application的设计模式上,如何进行业务逻辑的分析,并且进行合理的设计,按照MVC设计模式的要求,运用Servlet和JSP分别完成不同的逻辑层,掌握如何在Servlet和JSP之间进行流程的控制和数据的共享,以及Web Application应该如何配置和部署 。
第七步,J2EE编程
以上的学习过程如果是比较顺利的话,进行到这一步,难度又陡然提高 。因为上面的知识内容都是只涉及一个方面,而像EJB,JMS,JTA等核心的J2EE规范往往是几种Java技术的综合运用的结晶,所以掌握起来难度比较大 。
首先一定要学习好JNDI,JNDI是App Server定位服务器资源(EJB组件,Datasouce,JMS)查找方法,如果对JNDI不熟悉的话,EJB , JMS这些东西几乎学不下去 。JNDI其实就是javax.naming.*这个包 , 运用起来很简单 。难点在于服务器资源文件的配置 。对于服务器资源文件的配置 , 就需要看看专门的文档规范了,比如web.xml的写法,ejb-jar.xml的写法等等 。针对每种不同的App Server,还有自己的服务资源配置文件,也是需要熟悉的 。
然后可以学习JTA,主要是要理解JTA对于事务的控制的方法,以及该在什幺场合使用JTA 。这里可以简单的举个例子,我们知道一般情况可以对于一个数据库连接进行事务控制(conn.setAutoCommit(false),....,conn.commit()),做为一个原子操作,但是假设我的业务需求是要把对两个不同数据库的操作做为一个原子操作 , 你能做的到吗?这时候只能用JTA了 。假设操作过程是先往A数据库插一条记录,然后删除B数据库另一个记录,我们自己写代码是控制不了把整个操作做为一个原子操作的 。用JTA的话 , 由App Server来完成控制 。
在学习EJB之前要学习对象序列化和RMI , RMI是EJB的基础 。接着学习JMS和EJB , 对于EJB来说,最关键是要理解EJB是如何通过RMI来实现对远端对象的调用的,以及在什幺情况下要用到EJB 。
在学习完EJB,JMS这些东西之后,你可能会意识到要急不可待学习两个领域的知识,一个是UML,另一个是Design Pattern 。Java企业软件的设计非常重视框架(Framework)的设计,一个好的软件框架是软件开发成功的必要条件 。在这个时候,应该开始把学习的重点放在设计模式和框架的学习上,通过学习和实际的编程经验来掌握EJB的设计模式和J2EE的核心模式 。
J2EE规范里面,除了EJB,JMS,JTA,Servlet/JSP,JDBC之外还有很多很多的企业技术,这里不一一进行介绍了 。
另外还有一个最新领域Web Services 。Web Services也完全没有任何新东西,它像是一种粘合剂 , 可以把不同的服务统一起来提供一个统一的调用接口,作为使用者来说,我只要获得服务提供者给我的WSDL(对服务的描述),就够了,我完全不知道服务器提供者提供的服务究竟是EJB组件,还是.Net组件,还是什幺CORBA组件,还是其它的什幺实现,我也不需要知道 。Web Services最伟大的地方就在于通过统一的服务提供方式和调用方式,实现了整个Internet服务的共享 , 是一个非常令人激动的技术领域 。Web Services好象目前还没有什幺很好的书籍 , 但是可以通过在网络上面查资料的方式来学习 。
所以我觉得其实不是特别需要例程的,自己写的破坏例程就是最好的例子 , 如果你实在对自己写的代码不放心的话,我强烈推荐你看看JDK基础类库的Java源代码 。在JDK安装目录下面会有一个src.zip,解开来就可以完整的看到整个JDK基础类库,也就是rt.jar的Java源代码 , 你可以参考一下Sun是怎幺写Java程序的 , 规范是什幺样子的 。我自己在学习Java的类库的时候,当有些地方理解的不是很清楚的时候,或者想更加清晰的理解运作的细节的时候,往往会打开相应的类的源代码,通过看源代码,所有的问题都会一扫而空 。
2、Java环境变量配置
1. 预备知识1.1安装JDK到 根据不同的操作系统,下载相应的J2SE JDK 版本 (写这篇文章时最新的JDK 为1.5 update 7) 。假定我们把JDK安装到D:\JDK\1507 , 不安装public JRE.
1.2 设置path在[我的电脑]上右击,选择[属性].再选择[高级]-[环境变量],在[系统变量]中添加一个新的变量JAVA_HOME=D:\JDK\1507,然后再编辑path变量,在原来的path前面添加[ %JAVA_HOME%\BIN; ](方框中的文字) 。这样就完成了JAVA的基本设置 。(windows 98 下如何在autoexec.bat 中设置,请自己找资料)
1.3 演示程序
为了帮助理解 , 我写了一个JavaBootTest.java 的小程序来显示 。
public class JavaBootTest {
public static void main(String[] args) {
System.out.println("The Classpath are: ");
System.out.println(System.getProperty("java.class.path"));
//other program lines
}
}
用下面的两条命令分别编译和运行 。
javac JavaBootTest.java
javaJavaBootTest
2. JAVA程序运行时如何查找类文件======================================================================
根据JDK 文档说明,JAVA 程序以以下3种顺序查找运行的类文件 。
1.Bootstrap classes (*)
2.Extension classes
3.Users classes
如何设置CLASSPATH , 是初学者常提出的问题 。网上有很多文章提到了许多如何设置的方法,但是都没有讲为什么要这样设置(令人感到悲哀的是:绝大部分的人的观点是不正确的) 。
为了帮助大家更好的学习JAVA的基本知识,同时也是锻炼自己的Type水平,于是有了这篇文章的诞生 。主要参考资料来自来自官方JDK文档,希望对大家有用(所说的观点针对1.4.2 and 5.0版本) 。
------------------------------------------------------------------------------------------------------------------------------
1. 预备知识1.1安装JDK到 根据不同的操作系统,下载相应的J2SE JDK 版本 (写这篇文章时最新的JDK 为1.5 update 7) 。假定我们把JDK安装到D:\JDK\1507 , 不安装public JRE.
1.2 设置path在[我的电脑]上右击,选择[属性].再选择[高级]-[环境变量],在[系统变量]中添加一个新的变量JAVA_HOME=D:\JDK\1507 , 然后再编辑path变量 , 在原来的path前面添加[ %JAVA_HOME%\BIN; ](方框中的文字) 。这样就完成了JAVA的基本设置 。(windows 98 下如何在autoexec.bat 中设置,请自己找资料)
1.3 演示程序
为了帮助理解,我写了一个JavaBootTest.java 的小程序来显示 。
public class JavaBootTest { public static void main(String[] args) { System.out.println("The Classpath are: ");System.out.println(System.getProperty("java.class.path"));//other program lines }
用下面的两条命令分别编译和运行 。
javac JavaBootTest.java javaJavaBootTest
2. JAVA程序运行时如何查找类文件======================================================================根据JDK 文档说明, JAVA 程序以以下3种顺序查找运行的类文件 。
1.Bootstrap classes (*)
2.Extension classes 3.Users classes
2.1 Bootstrap classes就是JAVA在启动时载入的类文件,这些类文件主要是rt.jar 和 jre/lib 目录下的一些类文件 。Bootstrap过程中的class path是保存在 sun.boot.class.path 系统属性中的 。可以通过System.out.println(System.getProperty("sun.boot.class.path")); 来显示 。同时Bootstrap classes 可以通过 -Xbootclasspath 命令行参数来指定 。
下面列出了系统中默认的Bootstrap classes:
* Bootstrap bootstrap是皮鞋后部的一条小带子或一个小环,它可以使你方便地把鞋子穿起来 。在计算机中,是指使用一个很小的程序将某个特定的程序(通常是指操作系统)载入计算机中 。
2.2 Extension classes (扩展类文件)
Extension classes 主要是指的jre/lib/ext 目录下的类文件,这些文件必须在jar 文件或 zip 文件中 。如果不同名字的jar 文件包含有相同的类文件,那么哪一个类文件被载入是不确定的 。
2.3 User classes (用户自定义的类文件)
现在到了最重要的地方了,我们常说的设置CLASSPATH 其实就是指定 User classes.JAVA 按照以下四种顺序查找User classes. 2.3.1.默认的User classes. (dot) 就是指当前目录 。
2.3.2. 系统变量 CLASSPATH 所指定的类库,该变量覆盖(override)默认的User classes. 2.3.3. 用命令行参数 -cp 或 -classpath指定的类库 。这个时候覆盖默认的User classes 和CLASSPATH变量 。
2.3.4. 通过-jar 参数指定的jar文件 。此时覆盖上面的三种情况,如果使用这种情况,所有的类文件必须来自指定的jar 文件 。
了解了java如何查找User classes,我们接下来将要学习如何设置 CLASSPATH变量 。
3如何正确设置CLASSPATH如果只是一般运用java,只是用到java的基本库文件 , 练练手而已,则不需要设置CLASSPATH .但是在一般开发情况下,这是很少遇到的 。所以我们要自己设置CLASSPATH .我们一般的方法就是按照2.3.2 来设置CLASSPATH 系统变量,像开始设置path一样,我们可以添加一个CLASSPATH的系统变量 。网上有些文章所提到的添加rt.jar 和 tools.jar 等等是不需要的,因为这些类库是属于Bootstrap classes的 。我们只要定义User classes,如果我们要编译servlet 那么只要servlet-api.jar 和 jsp-api.jar 就可以实现基本的需要了 。
另外要注意的是2.3.2 override 2.3.1.我们设置CLASSPATH 时要将 .(dot)[表示当前目录]放在CLASSPATH中,然后用 ;(semicolon)分隔开来 。由于其他提供的类文件都是放在jar文件中,我们设置时一定要将完整的jar 文件包含在CLASSPATH 中,而不是将其目录添加到CLASSPATH 中(很重要的一点,我以前就是理解错误了) 。
这个时候又一个问题出现了,当需要添加的jar 文件过多时,管理java 类库变得很麻烦 。所以我认为在基础学习时用命令行编译调试 , 有利于JAVA的学习,但是到开发时则一定要用到 IDE 工具(现在比较流行的是eclipse 和 netbeans , 还有些人喜欢 jcreator) .在eclipse 中通过 [windows][Preferences][Java][Build Path]来指定 。其中有两部分Classpath VariablesUser Libraries.如何设置在这里就不详细说明了,自己试一下就可以了 , 比较简单 。在新建项目时,把自己定义的变量添加到Build Path 中就可以了 。
3、HelloWorld的编写
Public Welcome
{
Public Static Void main(String[] args)
{
System.out.println("Hello Java");
}
}
4、Javac Java工具的使用
5、HelloJava中存在的问题:(网络转载)
* 错误1:
'javac' 不是内部或外部命令,也不是可运行的程序或批处理文件 。
(javac: Command not found)
产生的原因是没有设置好环境变量path 。Win98下在autoexce.bat中加入
path=%path%;c:jdk1.2in,Win2000下则控制面板-系统-高级-环境变量-系统变
量...看到了?双击Path,在后面加上c:jdk1.2in 。当然我们假设JDK安装在了
c:jdk1.2目录下(有点唐僧了?)...好像还要重启系统才起作用...(//知道了!//西
红柿)
好,再试试!javac HelloWorld
* 错误2:
HelloWorld is an invalid option or argument.
拜托,给点专业精神,java的源程序是一定要存成.java文件的,而且编译时要写全
.java呀 。
OK,javac HelloWorld.java (这回总该成了吧?)
* 错误3:
HelloWorld.java:1: Public class helloworld must be defined in a file called
"HelloWorld.java".
public class helloworld{
^
这个问题嘛,是因为你的类的名字与文件的名字不一致 。(谁说的,明明看到人家都有
这样写的 ;( ) OK,准确地说 , 一个Java源程序中可以定义多个类,但是,具有public
属性的类只能有一个,而且要与文件名相一致 。还有,main方法一定要放在这个public
的类之中,这样才能java(运行)这个类 。另外一点是Java语言里面是严格区分大小写
的,初学者要注意呀 。像上例中 helloworld 与 HelloWorld 就认为是不一样,因而...
oh... 好 , 改好了,嘻嘻... javac HelloWorld.java
...(咦,怎么什么也没有呀?)//faint 这就是编译通过了!看看是不是多了一个
HelloWorld.class ?
(hehe..按书上教的:) java HelloWorld (!! 这个我知道,不是java HelloWorld.class
哟)
* 错误4:
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
呵呵,这个嘛 , 就是著名的类路径(classpath)问题啦 。实际上,类路径是在编译过程就
涉及的Java中的概念 。classpath就是指明去哪里找用到的类,就这么简单 。由于我们的
HelloWorld没用到其它的(非java.lang包中的)类,所以编译时没遇到这个问题 。运行
时呢,就要指明你的类在哪里了 。解决方法嘛 , 可以用下面的命令运行:
java -classpath . HelloWorld
“.”就代表当前目录 。当然这样做有点麻烦(是“太麻烦”?。? ,我们可以在环境变量
中设置默认的classpath 。方法就照上述设置path那样 。将classpath设为:
classpath=.;c:jdk1.2libdt.jar;c:jdk1.2lib ools.jar 后面的两个建议也设上
,以后开发用的着 。
java -classpath . HelloWorld(再不出来我就不学java了)
* 错误5:
Exception in thread "main" java.lang.NoSuchMethodError: main
(//咣当)别,坚持住 。看看你的代码,问题出在main方法的定义上 , 写对地方了吗,
是这样写的吗:
public static void main(String args[]) { //一个字都不要差,先别问为什么了...
对 , 包括大小写!
java -classpath . HelloWorld (听天由命了?。?
Hello World!
(faint!终于...)
欢迎来到Java世界!所以说,无法运行HelloWorld 真的并不是一个“最简单的问题” 。
附:HelloWorld.java
// HelloWorld.java
public class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello World!") ;
}
}
指南针的实现代码两种方法,怎么用指南针公式源码导入指标平台方法: 打开指南针软件所在目录; 打开analyse目录; 打开selfarg目录; 打开chinastk , 在其中加入一个文本文件,把指南针公式源码拷贝进去,然后把扩展名由TXT改为ZBT即可 。补充说明: 股票指标: 股票指标属于统计...
GitHub上面有哪些经典的java框架源码Bazeljava指南针源代码:来自Google的构建工具java指南针源代码,可以快速、可靠地构建代码 。官网
Gradle:使用Groovy(非XML)进行增量构建 , 可以很好地与Maven依赖管理配合工作 。官网
Buck:Facebook构建工具 。官网
字节码操作
编程方式操作字节码的开发库 。
ASM:通用底层字节码操作和分析开发库 。官网
Byte Buddy:使用流式API进一步简化字节码生成 。官网
Byteman:在运行时通过DSL(规则)操作字节码进行测试和故障排除 。官网
Javassist:一个简化字节码编辑尝试 。官网
集群管理
在集群内动态管理应用程序的框架 。
Apache Aurora:Apache Aurora是一个Mesos框架,用于长时间运行服务和定时任务(cron job) 。官网
Singularity:Singularity是一个Mesos框架,方便部署和操作 。它支持Web Service、后台运行、调度作业和一次性任务 。官网
代码分析
测量代码指标和质量工具 。
Checkstyle:代码编写规范和标准静态分析工具 。官网
Error Prone:将常见编程错误作为运行时错误报告 。官网
FindBugs:通过字节码静态分析查找隐藏bug 。官网
jQAssistant:使用基于Neo4J查询语言进行代码静态分析 。官网
PMD:对源代码分析查找不良的编程习惯 。官网
SonarQube:通过插件集成其它分析组件 , 对过去一段时间内的数据进行统计 。官网
编译器生成工具
用来创建解析器、解释器或编译器的框架 。
ANTLR:复杂的全功能自顶向下解析框架 。官网
JavaCC:JavaCC是更加专门的轻量级工具,易于上手且支持语法超前预测 。官网
外部配置工具
支持外部配置的开发库 。
config:针对JVM语言的配置库 。官网
owner:减少冗余配置属性 。官网
约束满足问题求解程序
帮助解决约束满足问题的开发库 。
Choco:可直接使用的约束满足问题求解程序,使用了约束规划技术 。官网
JaCoP:为FlatZinc语言提供了一个接口,可以执行MiniZinc模型 。官网
OptaPlanner:企业规划与资源调度优化求解程序 。官网
Sat4J:逻辑代数与优化问题最先进的求解程序 。官网
持续集成
Bamboo:Atlassian解决方案,可以很好地集成Atlassian的其他产品 。可以选择开源许可,也可以购买商业版 。官网
CircleCI:提供托管服务,可以免费试用 。官网
Codeship:提供托管服务,提供有限的免费模式 。官网
fabric8:容器集成平台 。官网
Go:ThoughtWork开源解决方案 。官网
Jenkins:支持基于服务器的部署服务 。官网
TeamCity:JetBrain的持续集成解决方案,有免费版 。官网
Travis:通常用作开源项目的托管服务 。官网
Buildkite: 持续集成工具,用简单的脚本就能设置pipeline , 而且能快速构建,可以免费试用 。官网
CSV解析
简化CSV数据读写的框架与开发库
uniVocity-parsers:速度最快功能最全的CSV开发库之一 , 同时支持TSV与固定宽度记录的读写 。官网
数据库
简化数据库交互的相关工具 。
Apache Phoenix:HBase针对低延时应用程序的高性能关系数据库层 。官网
Crate:实现了数据同步、分片、缩放、复制的分布式数据存储 。除此之外还可以使用基于SQL的语法跨集群查询 。官网
Flyway:简单的数据库迁移工具 。官网
H2:小型SQL数据库,以可以作为内存数据库使用著称 。官网
HikariCP:高性能JDBC连接工具 。官网
JDBI:便捷的JDBC抽象 。官网
Protobuf:Google数据交换格式 。官网
SBE:简单二进制编码,是最快速的消息格式之一 。官网
Wire:整洁轻量级协议缓存 。官网
帮实现依赖翻转范式的开发库 。官网
Apache DeltaSpike:CDI扩展框架 。官网
Dagger2:编译时注入框架,不需要使用反射 。官网
Guice:可以匹敌Dagger的轻量级注入框架 。官网
HK2:轻量级动态依赖注入框架 。官网
开发流程增强工具
从最基本的层面增强开发流程 。
ADT4J:针对代数数据类型的JSR-269代码生成器 。官网
AspectJ:面向切面编程(AOP)的无缝扩展 。官网
Auto:源代码生成器集合 。官网
DCEVM:通过修改JVM在运行时支持对已加载的类进行无限次重定义 。官网
HotswapAgent:支持无限次重定义运行时类与资源 。官网
Immutables:类似Scala的条件类 。官网
JHipster:基于Spring Boot与AngularJS应用程序的Yeoman源代码生成器 。官网
JRebel:无需重新部署,可以即时重新加载代码与配置的商业软件 。官网
Lombok:减少冗余的代码生成器 。官网
Spring Loaded:类重载代理 。官网
vert.x:多语言事件驱动应用框架 。官网
分布式应用
用来编写分布式容错应用的开发库和框架 。
Akka:用来编写分布式容错并发事件驱动应用程序的工具和运行时 。官网
Apache Storm:实时计算系统 。官网
Apache ZooKeeper:针对大型分布式系统的协调服务 , 支持分布式配置、同步和名称注册 。官网
Hazelcast:高可扩展内存数据网格 。官网
Hystrix:提供延迟和容错 。官网
JGroups:提供可靠的消息传递和集群创建的工具 。官网
Orbit:支持虚拟角色(Actor),在传统角色的基础上增加了另外一层抽象 。官网
Quasar:为JVM提供轻量级线程和角色 。官网
分布式数据库
对应用程序而言 , 在分布式系统中的数据库看起来就像是只有一个数据源 。
Apache Cassandra:列式数据库 , 可用性高且没有单点故障 。官网
Apache HBase:针对大数据的Hadoop数据库 。官网
Druid:实时和历史OLAP数据存储,在聚集查询和近似查询方面表现不俗 。官网
Infinispan:针对缓存的高并发键值对数据存储 。官网
发布
以本机格式发布应用程序的工具 。
Bintray:发布二进制文件版本控制工具 。可以于Maven或Gradle一起配合使用 。提供开源免费版本和几种商业收费版本 。官网
Central Repository:最大的二进制组件仓库,面向开源社区提供免费服务 。Apache Maven默认使用Central 官网Repository,也可以在所有其他构建工具中使用 。
IzPack:为跨平台部署建立创作工具(Authoring Tool) 。官网
JitPack:打包GitHub仓库的便捷工具 。可根据需要构建Maven、Gradle项目,发布可立即使用的组件 。官网
Launch4j:将JAR包装为轻量级本机Windows可执行程序 。官网
Nexus:支持代理和缓存功能的二进制管理工具 。官网
packr:将JAR、资源和JVM打包成Windows、Linux和Mac OS X本地发布文件 。官网
文档处理工具
处理Office文档的开发库 。
Apache POI:支持OOXML规范(XLSX、DOCX、PPTX)以及OLE2规范(XLS、DOC、PPT) 。官网
documents4j:使用第三方转换器进行文档格式转换,转成类似MS Word这样的格式 。官网
jOpenDocument:处理OpenDocument格式(由Sun公司提出基于XML的文档格式) 。官网
函数式编程
函数式编程支持库 。
Cyclops:支持一元(Monad)操作和流操作工具类、comprehension(List语法)、模式匹配、trampoline等特性 。官网
Fugue:Guava的函数式编程扩展 。官网
Functional Java:实现了多种基础和高级编程抽象,用来辅助面向组合开发(composition-oriented development) 。官网
Javaslang:一个函数式组件库 , 提供持久化数据类型和函数式控制结构 。官网
jOOλ:旨在填补Java 8 lambda差距的扩展,提供了众多缺失的类型和一组丰富的顺序流API 。官网
游戏开发
游戏开发框架 。
jMonkeyEngine:现代3D游戏开发引擎 。官网
libGDX:全面的跨平台高级框架 。官网
LWJGL:对OpenGL/CL/AL等技术进行抽象的健壮框架 。官网
GUI
现代图形化用户界面开发库 。
JavaFX:Swing的后继者 。官网
Scene Builder:开发JavaFX应用的可视化布局工具 。官网
高性能计算
涵盖了从集合到特定开发库的高性能计算相关工具 。
Agrona:高性能应用中常见的数据结构和工具方法 。官网
Disruptor:线程间消息传递开发库 。官网
fastutil:快速紧凑的特定类型集合(Collection) 。官网
GS Collections:受Smalltalk启发的集合框架 。官网
HPPC:基础类型集合 。官网
Javolution:实时和嵌入式系统的开发库 。官网
JCTools:JDK中缺失的并发工具 。官网
Koloboke:Hash set和hash map 。官网
Trove:基础类型集合 。官网
High-scale-bli:Cliff Click 个人开发的高性能并发库官网
IDE
简化开发的集成开发环境 。
Eclipse:老牌开源项目,支持多种插件和编程语言 。官网
IntelliJ IDEA:支持众多JVM语言,是安卓开发者好的选择 。商业版主要针对企业客户 。官网
NetBeans:为多种技术提供集成化支持 , 包括Java SE、Java EE、数据库访问、HTML5
Imgscalr:纯Java 2D实现,简单、高效、支持硬件加速的图像缩放开发库 。官网
Picasso:安卓图片下载和图片缓存开发库 。官网
Thumbnailator:Thumbnailator是一个高质量Java缩略图开发库 。官网
ZXing:支持多种格式的一维、二维条形码图片处理开发库 。官网
im4java: 基于ImageMagick或GraphicsMagick命令行的图片处理开发库 , 基本上ImageMagick能够支持的图片格式和处理方式都能够处理 。官网
Apache Batik:在Java应用中程序以SVG格式显示、生成及处理图像的工具集,包括SVG解析器、SVG生成器、SVG DOM等模块 , 可以集成使用也可以单独使用,还可以扩展自定义的SVG标签 。官网
JSON
简化JSON处理的开发库 。
Genson:强大且易于使用的Java到JSON转换开发库 。官网
Gson:谷歌官方推出的JSON处理库 , 支持在对象与JSON之间双向序列化 , 性能良好且可以实时调用 。官网
Jackson:与GSON类似,在频繁使用时性能更佳 。官网
LoganSquare:基于Jackson流式API,提供对JSON解析和序列化 。比GSON与Jackson组合方式效果更好 。官网
Fastjson:一个Java语言编写的高性能功能完善的JSON库 。官网
Kyro:快速、高效、自动化的Java对象序列化和克隆库 。官网
JVM与JDK
目前的JVM和JDK实现 。
JDK 9:JDK 9的早期访问版本 。官网
OpenJDK:JDK开源实现 。官网
基于JVM的语言
除Java外,可以用来编写JVM应用程序的编程语言 。
Scala:融合了面向对象和函数式编程思想的静态类型编程语言 。官网
Groovy:类型可?。∣ptionally typed)的动态语言,支持静态类型和静态编译 。目前是一个Apache孵化器项目 。官网
Clojure:可看做现代版Lisp的动态类型语言 。官网
Ceylon:RedHat开发的面向对象静态类型编程语言 。官网
Kotlin:JetBrain针对JVM、安卓和浏览器提供的静态类型编程语言 。官网
Xtend:一种静态编程语言,能够将其代码转换为简洁高效的Java代码,并基于JVM运行 。官网
日志
记录应用程序行为日志的开发库 。
Apache Log4j 2:使用强大的插件和配置架构进行完全重写 。官网
kibana:分析及可视化日志文件 。官网
Logback:强健的日期开发库,通过Groovy提供很多有趣的选项 。官网
logstash:日志文件管理工具 。官网
Metrics:通过JMX或HTTP发布参数 , 并且支持存储到数据库 。官网
SLF4J:日志抽象层 , 需要与具体的实现配合使用 。官网
机器学习
提供具体统计算法的工具 。其算法可从数据中学习 。
Apache Flink:快速、可靠的大规模数据处理引擎 。官网
Apache Hadoop:在商用硬件集群上用来进行大规模数据存储的开源软件框架 。官网
Apache Mahout:专注协同过滤、聚类和分类的可扩展算法 。官网
Apache Spark:开源数据分析集群计算框架 。官网
DeepDive:从非结构化数据建立结构化信息并集成到已有数据库的工具 。官网
Deeplearning4j:分布式多线程深度学习开发库 。官网
H2O:用作大数据统计的分析引擎 。官网
Weka:用作数据挖掘的算法集合 , 包括从预处理到可视化的各个层次 。官网
QuickML:高效机器学习库 。官网、GitHub
消息传递
在客户端之间进行消息传递,确保协议独立性的工具 。
Aeron:高效可扩展的单播、多播消息传递工具 。官网
Apache ActiveMQ:实现JMS的开源消息代理(broker) , 可将同步通讯转为异步通讯 。官网
Apache Camel:通过企业级整合模式(Enterprise Integration Pattern EIP)将不同的消息传输API整合在一起 。官网
Apache Kafka:高吞吐量分布式消息系统 。官网
Hermes:快速、可靠的消息代理(Broker),基于Kafka构建 。官网
JBoss HornetQ:清晰、准确、模块化 , 可以方便嵌入的消息工具 。官网
JeroMQ:ZeroMQ的纯Java实现 。官网
Smack:跨平台XMPP客户端函数库 。官网
Openfire:是开源的、基于XMPP、采用Java编程语言开发的实时协作服务器 。Openfire安装和使用都非常简单,并可利用Web界面进行管理 。官网GitHub
Spark:是一个开源,跨平台IM客户端 。它的特性支持集组聊天,电话集成和强大安全性能 。如果企业内部部署IM使用Openfire Spark是最佳的组合 。官网 GitHub
Tigase: 是一个轻量级的可伸缩的 Jabber/XMPP 服务器 。无需其他第三方库支持,可以处理非常高的复杂和大量的用户数,可以根据需要进行水平扩展 。官网
杂项
未分类其它资源 。
Design Patterns:实现并解释了最常见的设计模式 。官网
Jimfs:内存文件系统 。官网
Lanterna:类似curses的简单console文本GUI函数库 。官网
LightAdmin:可插入式CRUD UI函数库,可用来快速应用开发 。官网
OpenRefine:用来处理混乱数据的工具,包括清理、转换、使用Web Service进行扩展并将其关联到数据库 。官网
RoboVM:Java编写原生iOS应用 。官网
Quartz:强大的任务调度库.官网
应用监控工具
监控生产环境中应用程序的工具 。
AppDynamics:性能监测商业工具 。官网
JavaMelody:性能监测和分析工具 。官网
Kamon:Kamon用来监测在JVM上运行的应用程序 。官网
New Relic:性能监测商业工具 。官网
SPM:支持对JVM应用程序进行分布式事务追踪的性能监测商业工具 。官网
Takipi:产品运行时错误监测及调试商业工具 。官网
原生开发库
用来进行特定平台开发的原生开发库 。
JNA:不使用JNI就可以使用原生开发库 。此外,还为常见系统函数提供了接口 。官网
自然语言处理
用来专门处理文本的函数库 。
Apache OpenNLP:处理类似分词等常见任务的工具 。官网
CoreNLP:斯坦佛CoreNLP提供了一组基础工具 , 可以处理类似标签、实体名识别和情感分析这样的任务 。官网
LingPipe:一组可以处理各种任务的工具集,支持POS标签、情感分析等 。官网
Mallet:统计学自然语言处理、文档分类、聚类、主题建模等 。官网
网络
网络编程函数库 。
Async Http Client:异步HTTP和WebSocket客户端函数库 。官网
Grizzly:NIO框架,在Glassfish中作为网络层使用 。官网
Netty:构建高性能网络应用程序开发框架 。官网
OkHttp:一个Android和Java应用的HTTP SPDY客户端 。官网
Undertow:基于NIO实现了阻塞和非阻塞API的Web服务器,在WildFly中作为网络层使用 。官网
ORM
处理对象持久化的API 。
Ebean:支持快速数据访问和编码的ORM框架 。官网
EclipseLink:支持许多持久化标准 , JPA、JAXB、JCA和SDO 。官网
Hibernate:广泛使用、强健的持久化框架 。Hibernate的技术社区非常活跃 。官网
MyBatis:带有存储过程或者SQL语句的耦合对象(Couples object) 。官网
OrmLite:轻量级开发包,免除了其它ORM产品中的复杂性和开销 。官网
Nutz:另一个SSH 。官网 , Github
JFinal:JAVA WEBORM框架 。官网,Github
PDF
用来帮助创建PDF文件的资源 。
Apache FOP:从XSL-FO创建PDF 。官网
Apache PDFBox:用来创建和操作PDF的工具集 。官网
DynamicReports:JasperReports的精简版 。官网
flyingsaucer:XML/XHTML和CSS 2.1渲染器 。官网
iText:一个易于使用的PDF函数库,用来编程创建PDF文件 。注意,用于商业用途时需要许可证 。官网
JasperReports:一个复杂的报表引擎 。官网
性能分析
性能分析、性能剖析及基准测试工具 。
jHiccup:提供平台中JVM暂停的日志和记录 。官网
JMH:JVM基准测试工具 。官网
JProfiler:商业分析器 。官网
LatencyUtils:测量和报告延迟的工具 。官网
VisualVM:对运行中的应用程序信息提供了可视化界面 。官网
YourKit Java Profiler:商业分析器 。官网
响应式开发库
用来开发响应式应用程序的开发库 。
Reactive Streams:异步流处理标准,支持非阻塞式反向压力(backpressure) 。官网
Reactor:构建响应式快速数据(fast-data)应用程序的开发库 。官网
RxJava:通过JVM可观察序列(observable sequence)构建异步和基于事件的程序 。官网
REST框架
用来创建RESTful 服务的框架 。
Dropwizard:偏向于自己使用的Web框架 。用来构建Web应用程序,使用了Jetty、Jackson、Jersey和Metrics 。官网
Feign:受Retrofit、JAXRS-2.0和WebSocket启发的HTTP客户端连接器(binder) 。官网
Jersey:JAX-RS参考实现 。官网
RESTEasy:经过JAX-RS规范完全认证的可移植实现 。官网
RestExpress:一个Java类型安全的REST客户端 。官网
RestX:基于注解处理和编译时源码生成的框架 。官网
Retrofit:类型安全的REST客户端 。官网
Spark:受到Sinatra启发的Java REST框架 。官网
Swagger:Swagger是一个规范且完整的框架 , 提供描述、生产、消费和可视化RESTful Web Service 。官网
Blade:国人开发的一个轻量级的MVC框架. 它拥有简洁的代码,优雅的设计 。官网
科学计算与分析
用于科学计算和分析的函数库 。
DataMelt:用于科学计算、数据分析及数据可视化的开发环境 。官网
JGraphT:支持数学图论对象和算法的图形库 。官网
JScience:用来进行科学测量和单位的一组类 。官网
搜索引擎
文档索引引擎,用于搜索和分析 。
Apache Solr:一个完全的企业搜索引擎 。为高吞吐量通信进行了优化 。官网
Elasticsearch:一个分布式、支持多租户(multitenant)全文本搜索引擎 。提供了RESTful Web接口和无schema的JSON文档 。官网
Apache Lucene:是一个开放源代码的全文检索引擎工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎 。官网
安全
用于处理安全、认证、授权或会话管理的函数库 。
Apache Shiro:执行认证、授权、加密和会话管理 。官网
Bouncy Castle,涵盖了从基础的帮助函数到PGP/SMIME操作 。官网:多途加密开发库 。支持JCA提供者(JCA provider)
Cryptomator:在云上进行客户端跨平台透明加密 。官网
Keycloak:为浏览器应用和RESTful Web Service集成SSO和IDM 。目前还处于beta版本,但是看起来非常有前途 。官网
PicketLink:PicketLink是一个针对Java应用进行安全和身份认证管理的大型项目(Umbrella Project) 。官网
序列化
用来高效处理序列化的函数库 。
FlatBuffers:高效利用内存的序列化函数库,无需解包和解析即可高效访问序列化数据 。官网
Kryo:快速、高效的对象图形序列化框架 。官网
FST:提供兼容JDK的高性能对象图形序列化 。官网
MessagePack:一种高效的二进制序列化格式 。官网
应用服务器
用来部署应用程序的服务器 。
Apache Tomcat:针对Servlet和JSP的应用服务器,健壮性好且适用性强 。官网
Apache TomEE:Tomcat加Java EE 。官网
Jetty:轻量级、小巧的应用服务器,通常会嵌入到项目中 。官网
WebSphere Liberty:轻量级、模块化应用服务器,由IBM开发 。官网
WildFly:之前被称作JBoss,由Red Hat开发 。支持很多Java EE功能 。官网
模板引擎
在模板中替换表达式的工具 。
Apache Velocity:提供HTML页面模板、email模板和通用开源代码生成器模板 。官网
FreeMarker:通用模板引擎,不需要任何重量级或自己使用的依赖关系 。官网
Handlebars.java:使用Java编写的模板引擎,逻辑简单 , 支持语义扩展(semantic Mustache) 。官网
Thymeleaf:旨在替换JSP,支持XML文件的工具 。官网
测试
测试内容从对象到接口,涵盖性能测试和基准测试工具 。
Apache JMeter:功能性测试和性能评测 。官网
Arquillian:集成测试和功能行测试平台,集成Java EE容器 。官网
AssertJ:支持流式断言提高测试的可读性 。官网
Awaitility:用来同步异步操作的DSL 。官网
Cucumber:BDD测试框架 。官网
Gatling:设计为易于使用、可维护的和高性能负载测试工具 。官网
Hamcrest:可用来灵活创建意图(intent)表达式的匹配器 。官网
JMockit:用来模拟静态、final方法等 。官网
JUnit:通用测试框架 。官网
Mockito:在自动化单元测试中创建测试对象,为TDD或BDD提供支持 。官网
PowerMock: 支持模拟静态方法、构造函数、final类和方法、私有方法以及移除静态初始化器的模拟工具 。官网
REST Assured:为REST/HTTP服务提供方便测试的Java DSL 。官网
Selenide:为Selenium提供精准的周边API,用来编写稳定且可读的UI测试 。官网
Selenium:为Web应用程序提供可移植软件测试框架 。官网
Spock:JUnit-compatible framework featuring an expressive Groovy-derived specification language.官网兼容JUnit框架,支持衍生的Groovy范的语言 。
TestNG:测试框架 。官网
Truth:Google的断言和命题(proposition)框架 。官网
Unitils:模块化测试函数库,支持单元测试和集成测试 。官网
WireMock:Web Service测试桩(Stub)和模拟函数 。官网
通用工具库
通用工具类函数库 。
Apache Commons:提供各种用途的函数,比如配置、验证、集合、文件上传或XML处理等 。官网
args4j:命令行参数解析器 。官网
CRaSH:为运行进行提供CLI 。官网
Gephi:可视化跨平台网络图形化操作程序 。官网
Guava:集合、缓存、支持基本类型、并发函数库、通用注解、字符串处理、I/O等 。官网
JADE:构建、调试多租户系统的框架和环境 。官网
javatuples:正如名字表示的那样 , 提供tuple支持 。尽管目前tuple的概念还有留有争议 。官网
JCommander:命令行参数解析器 。官网
Protégé:提供存在论(ontology)编辑器以及构建知识系统的框架 。官网
网络爬虫
用于分析网站内容的函数库 。
Apache Nutch:可用于生产环境的高度可扩展、可伸缩的网络爬虫 。官网
Crawler4j:简单的轻量级网络爬虫 。官网
JSoup:刮取、解析、操作和清理HTML 。官网
Web框架
用于处理Web应用程序不同层次间通讯的框架 。
Apache Tapestry:基于组件的框架,使用Java创建动态、强健的、高度可扩展的Web应用程序 。官网
Apache Wicket:基于组件的Web应用框架 , 与Tapestry类似带有状态显示GUI 。官网
Google Web Toolkit:一组Web开发工具集,包含在客户端将Java代码转为JavaScript的编译器、XML解析器、RCP 官网API、JUnit集成、国际化支持和GUI控件 。
Grails:Groovy框架 , 旨在提供一个高效开发环境 , 使用约定而非配置、没有XML并支持混入(mixin) 。官网
Ninja:Java全栈Web开发框架 。非常稳固、快速和高效 。官网
Pippo:小型、高度模块化的类Sinatra框架 。官网
Play:使用约定而非配置,支持代码热加载并在浏览器中显示错误 。官网
PrimeFaces:JSF框架,提供免费和带支持的商业版本 。包括若干前端组件 。官网
Ratpack:一组Java开发函数库,用于构建快速、高效、可扩展且测试完备的HTTP应用程序 。官网
Spring Boot:微框架,简化了Spring新程序的开发过程 。官网
Spring:旨在简化Java EE的开发过程 , 提供依赖注入相关组件并支持面向切面编程 。官网
Vaadin:基于GWT构建的事件驱动框架 。使用服务端架构 , 客户端使用Ajax 。官网
Blade:国人开发的一个轻量级的MVC框架. 它拥有简洁的代码,优雅的设计 。官网
业务流程管理套件
流程驱动的软件系统构建 。
jBPM:非常灵活的业务流程管理框架 , 致力于构建开发与业务分析人员之间的桥梁 。官网
Activity:轻量级工作流和业务流程管理框架 。官网 github
资源
社区
java的源代码隐藏问题你要的功能其实是Java代码混淆,如果要了解Java编译成exe,可以看“参考资料” 。
下面一段文字摘自《Java 手机/PDA 程序设计入门》一书,可以做为混淆器性能的大致观点:
笔者没用过DashO,所以无法对其作出个人评价 。所以现在仅说明笔者曾用过的产品 。以笔者的个人观点,如果就混淆的程度来说,ZKM最好,JAX中等,RetroGuard和ProGuard最差,一分钱一分货,这是千古不变的道理 。如果就功能性而言 , ZKM和JAX都不错,不过,JAX是IBM所开发的产品,因此也继承了大部分IBM产品的最大特色 , 就是“功能超强 , 可是不易使用”,可能光是要看完JAX的设定文件就是一个很大的问题 。
下面分别介绍几种具有代表性的混淆器,对它们的产品性能进行对比 。我们使用不同混淆器对同一段java代码进行混淆,分别列出混淆后代码反编译的结果,并给出使用的一些直接体会 。
原始java代码:
public class SimpleBean implements Serializable {
private String[] name = {"name0","name1","name2","name3"};
private List myList = null;
public void SimpleBean() {
myList = new ArrayList(4);
}
public void init_public() {
myList.add("name");
for(int i= 1; i4; i){
init_private(i);
}
}
private void init_private(int j) {
myList.add(name[j]);
}
private void writeObject(java.io.ObjectOutputStream out)
throws IOException {
}
}
一、ProGuard 4.5.1
ProGuard是一款免费的Java类文件压缩器、优化器和混淆器 。它能发现并删除无用类、字段(field)、方法和属性值(attribute) 。它也能优化字节码并删除无用的指令 。最后,它使用简单无意义的名字来重命名你的类名、字段名和方法名 。经过以上操作的jar文件 会变得更小 , 并很难进行逆向工程 。eclipse已经把Proguard集成在一起了 。它支持脚本控制,可以使用GUI界面,字符串不加密,支持 J2ME 。
类似功能的开源混淆器:
RetroGuard yGuard(RetroGuard的一个升级版本) JODE
Jad反编译混淆后class得到的代码:
public class SimpleBean
implements Serializable
{
public SimpleBean()
{
a_java_util_List_fld = null;
}
public void SimpleBean()
{
a_java_util_List_fld = new ArrayList(4);
}
public void init_public()
{
a_java_util_List_fld.add("name");
for(int i = 1; i4; i)
{
int j = i;
SimpleBean simplebean = this;
a_java_util_List_fld.add(simplebean.a_java_lang_String_array1d_fld[j]);
}
}
private String a_java_lang_String_array1d_fld[] = {
"name0", "name1", "name2", "name3"
};
private List a_java_util_List_fld;
}
优点:
1、对内部private方法的调用进行了内联,但基本达不到混淆效果;
2、使用文档详?。煜∠钆渲梦募谋嘈词纠啵?
3、混淆选项粒度较细,可以使用GUI界面 , 支持本地方法的保护等;
4、支持j2me , 可以集成到Eclipse;
5、开源 。
缺点:
1、符号混淆的命名具有提示性,字符串未加密,没有其它的混淆措施;
2、混淆主要针对Xlet、Midlet等应用 , 混淆库文件时配置文件将会很复杂 。
二、Jocky
Jocky是金蝶中间件技术领袖袁红岗先生的个人作品(旧有名称JOC) 。原本是方便Apusic 应用服务器的开发,现在开放出来,供大家自由使用 。Jocky混淆编译器是在Sun JDK中提供的Java编译器(javac)的基础上完成的,修改了其中的代码生成过程,对编译器生成的中间代码进行混淆,最后再生成class文件,这样编译和混淆只需要一个步骤就可以完成 。也就是说,它是直接从源码上做文章,这是Jocky与其它混淆编译器最大的不同之处 。另外可以在源程序中插入符号保留指令来控制哪些符号需要保留,将混淆过程与开发过程融合在一起,不需要单独的混淆选项配置文件 。Jocky的上述特点较适合于java类库的混淆 。
Jad反编译混淆后class得到的代码:
public class SimpleBean
implements Serializable
{
public SimpleBean()
{
this;
String as[] = new String[4];
as;
as[0] = "name0";
as;
JVM INSTR swap ;
1;
"name1";
JVM INSTR aastore ;
JVM INSTR dup ;
JVM INSTR swap ;
2;
"name2";
JVM INSTR aastore ;
JVM INSTR dup ;
JVM INSTR swap ;
3;
"name3";
JVM INSTR aastore ;
_$2;
_$1 = null;
return;
}
public void SimpleBean()
{
this;
JVM INSTR new #9Class ArrayList;
JVM INSTR dup ;
JVM INSTR swap ;
4;
ArrayList();
_$1;
}
public void init_public()
{
_$1.add("name");
for(int i = 1; i4; i)
_$1(i);
}
private void _$1(int i)
{
_$1.add(_$2[i]);
}
private void writeObject(ObjectOutputStream objectoutputstream)
throws IOException
{
}
private String _$2[];
private List _$1;
}
优点:
1、除符号混淆外增加了数据混淆(字符数组初始化);
2、有一些语句反编译只能得到字节码指令;
3、在Sun JDK中提供的Java编译器(javac)的基础上完成 , 编译和混淆一体完成,不需要先生成class文件再混淆;
4、提供了Eclipse的插件,能够直接在Eclipse中使用Jocky 。
缺点:
1、混淆选项粒度较粗,使用中可能要在具体代码中添加@preserve指令来实现 , 工作量大;
2、没有控制流混淆 。
三、Allatori 3.1_demo
Allatori属于第二代混淆器,具有全方位保护你的知识产权的能力 。Allatori具有以下几种保护方式:命名混淆,流混淆,调试信息混淆,字符串编码 , 以及水印技术 。对于教育和非商业项目来说这个混淆器是免费的 。2.1版本支持war和ear文件格式,并且允许对需要混淆代码的应用程序添加有效日期 。
Jad反编译混淆后class得到的代码:
public class SimpleBean
implements Serializable
{
public void init_public()
{
d.add(c.k("{u{0"));
int i = 1;
goto _L1
_L3:
H(i);
i;
_L1:
4;
JVM INSTR icmplt 21;
goto _L2 _L3
_L2:
}
public void SimpleBean()
{
d = new ArrayList(4);
}
private void H(int a)
{
d.add(c[a]);
}
public SimpleBean()
{
d = null;
}
private void H(ObjectOutputStream objectoutputstream)
throws IOException
{
}
private String c[] = {
c.k("\177q\177te"), c.k("\177q\177td"), c.k("\177q\177tg"), c.k("\177q\177tf")
};
private List d;
}
注:c.k是为进行字符串加密额外生成的类c的静态方法 。
优点:
1、设计考虑了库文件混淆的使用场景;
2、使用文档详尽,混淆选项配置文件的编写示例多;
3、除符号混淆外,还使用了两种高级的混淆手段:控制混淆(改写了for循环)和字符串加密(String数组初始化);
4、混淆选项粒度较细,支持本地方法的保护等;
5、支持水印技术,允许对需要混淆的代码添加有效日期;
6、支持j2me;
缺点:
1、商业软件(价格附后),对教育和非商业用途免费(网站链接是) 。
附:价格情况
SINGLE DEVELOPER LICENSE
1 license$290
2-5 licenses$260
6-10 licenses$230
11licenses$200
SITE LICENSE$3750
BUSINESS LICENSE$4850
ANNUAL SUPPORT UPDATE$45
四、Zelix KlassMaster(ZKM)
Zelix KlassMaster是一个来自Zelix Pty Ltd的商业混淆器 。官方文档中关于它的混淆特性的介绍很少 。它的保护功能非常强大,可以进行符号混淆和控制混淆,支持字符串的复杂加密保护 , 堆栈混乱,支持异常重构 , 支持增量混淆,支持J2ME 。Zelix KlassMaster提供试用版本 , 可以到下载 。
五、DashO Pro
DashO Pro 是由Preemptive Solutions开发的商业化的混淆器. 免费的评估版可以到下载 。DashO Pro代码保护能力强大易用,方便灵活(商业软件,非开源) 。该Java混淆器是Sun的选择,对于企业级应用,作为其Java开发包的一部分,Sun微系统使用DashO Pro来混淆其加密库 。DashO Pro能够对ID进行重新命名 , 使之成为毫无意义的字符;混淆元数据;改变控制流等,所有这些操作使得java代码被混淆,难于理解 。产品特点包括:
领先的Java源码保护机制;
运用专利Overload-Induction技术对包/类/方法/域进行重命名;
高级的流程控制混淆机制;
字符串加密技术;
防止反编译器生成有用的输出;
水印软件;
提高Java源码效率;
不采用类/方法/域 , 全面移除常数存储库;
类/方法级别的优化,以提高JIT效果;
动态加载检测到的类;
全面高效的Java源码的拓展和部署;
支持所有的JDK版本 (JSE, J2EE, J2ME, etc)包括1.5;
自动堆栈跟踪转换;
在指定路径打包或者java jars;
支持任何打包类型的Java内容——程序、库、applets程序、小服务器程序、EJB等;支持基于J2ME CLDC的架构 , 包括MIDP和 iAppli;
支持CLDC预检验库中的类;
可以从指定路径、Zip压缩包或者jars中提?。?
支持导出100%纯粹的Java,并提供验证;
命令行接口适合集成到构建环境内;
基于XML的配置文件,易于使用;
全面准确的PDF格式用户指南 。
【java指南针源代码 指南针代码什么意思】java指南针源代码的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于指南针代码什么意思、java指南针源代码的信息别忘了在本站进行查找喔 。
推荐阅读
- 怎么用u盘格式化电脑,u盘格式化电脑怎么弄
- python+定义字符类型数据类型,python定义字符串类型
- 直播被老公泼水家暴的主播,网红主播被家暴
- php随机读取几条数据 php随机获取数组元素
- sap批量查出库信息的简单介绍
- 电脑怎么下载金山会议,电脑怎么下载金山会议app
- 快手直播的商品怎么搜索,如何在快手搜索直播
- 用java写安卓程序代码 用java写安卓程序代码
- 下拉菜单java代码,下拉框java