java编译混淆

java编译混淆
java编译混淆

Java是一种跨平台的、解释型语言。Java 源代码编译中间“字节码”存储于class文件中。Class 文件是一种字节码形式的中间代码,该字节码中包括了很多源代码的信息,例如变量名、方法名等。因此,Java中间代码的反编译就变得非常容易。目前市场上有许多免费的、商用的反编译软件,都能够生成高质量的反编译后的源代码。所以,对开发人员来说,如何保护Java程序就变成了一个非常重要的挑战。本文首先讨论了保护Java程序的基本方法,然后对代码混淆问题进行深入研究,最后结合一个实际的应用程序,分析如何在实践中保护Java 程序。

反编译成为保护Java程序的最大挑战

通常C、C++等编程语言开发的程序都被编译成目标代码,这些目标代码都是本机器的二进制可执行代码。通常所有的源文件被编译、链接成一个可执行文件。在这些可执行文件中,编译器删除了程序中的变量名称、方法名称等信息,这些信息往往是由内存地址表示,例如如果需要使用一个变量,往往是通过这个变量的地址来访问的。因此,反编译这些本地的目标代码就是非常困难的。

Java语言的出现,使得反编译变得非常容易而有效。原因如下:1.由于跨平台的需求,Java的指令集比较简单而通用,较容易得出程序的语义信息;2.Java编译器将每一个类编译成一个单独的文件,这也简化了反编译的工作;3.Java 的Class文件中,仍然保留所有的方法名称、变量名称,并且通过这些名称来访问变量和方法,这些符号往往带有许多语义信息。由于Java程序自身的特点,对于不经过处理的Java程序反编译的效果非常好。

目前,市场上有许多Java的反编译工具,有免费的,也有商业使用的,还有的是开放源代码的。这些工具的反编译速度和效果都非常不错。好的反编译软件,能够反编译出非常接近源代码的程序。因此,通过反编译器,黑客能够对这些程序进行更改,或者复用其中的程序。因此,如何保护Java程序不被反编译,是非常重要的一个问题。

常用的保护技术

由于Java字节码的抽象级别较高,因此它们较容易被反编译。本节介绍了几种常用的方法,用于保护Java字节码不被反编译。通常,这些方法不能够绝对防止程序被反编译,而是加大反编译的难度而已,因为这些方法都有自己的使用环境和弱点。

隔离Java程序

最简单的方法就是让用户不能够访问到Java Class程序,这种方法是最根本的方法,具体实现有多种方式。例如,开发人员可以将关键的Java Class放在服务器端,客户端通过访问服务器的相关接口来获得服务,而不是直接访问Class文件。这样黑客就没有办法反编译Class文件。目前,通过接口提供服务的标准和协议也越来越多,例如HTTP、Web Service、RPC等。但是有很多应用都不适合这种保护方式,例如对于单机运行的程序就无法隔离Java 程序。这种保护方式见图1所示。

图1隔离Java程序示意图

对Class文件进行加密

为了防止Class文件被直接反编译,许多开发人员将一些关键的Class文件进行加密,例如对注册码、序列号管理相关的类等。在使用这些被加密的类之前,程序首先需要对这些类进行解密,而后再将这些类装载到JVM当中。这些类的解密可以由硬件完成,也可以使用软件完成。

在实现时,开发人员往往通过自定义ClassLoader类来完成加密类的装载(注意由于安全性的原因,Applet不能够支持自定义的ClassLoader)。自定义的ClassLoader首先找到加密的类,而后进行解密,最后将解密后的类装载到JVM当中。在这种保护方式中,自定义的ClassLoader是非常关键的类。由于它本身不是被加密的,因此它可能成为黑客最先攻击的目标。如果相关的解密密钥和算法被攻克,那么被加密的类也很容易被解密。这种保护方式示意图见图2。

图2 对Class文件进行加密示意图

转换成本地代码

将程序转换成本地代码也是一种防止反编译的有效方法。因为本地代码往往难以被反编译。开发人员可以选择将整个应用程序转换成本地代码,也可以选择关键模块转换。如果仅仅转换关键部分模块,Java程序在使用这些模块时,需要使用JNI技术进行调用。

当然,在使用这种技术保护Java程序的同时,也牺牲了Java的跨平台特性。对于不同的平台,我们需要维护不同版本的本地代码,这将加重软件支持和维护的工作。不过对于一些关键的模块,有时这种方案往往是必要的。

为了保证这些本地代码不被修改和替代,通常需要对这些代码进行数字签名。在使用这些本地代码之前,往往需要对这些本地代码进行认证,确保这些代码没有被黑客更改。如果签名检查通过,则调用相关JNI方法。这种保护方式示意图见图3。

代码混淆

图3 转换成本地代码示意图

代码混淆是对Class文件进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能(语义)。但是混淆后的代码很难被反编译,即反编译后得出的代码是非常难懂、晦涩的,因此反编译人员很难得出程序的真正语义。从理论上来说,黑客如果有足够的时间,被混淆的代码仍然可能被破解,甚至目前有些人正在研制反混淆的工具。但是从实际情况来看,由于混淆技术的多元化发展,混淆理论的成熟,经过混淆的Java代码还是能够很好地防止反编译。下面我们会详细介绍混淆技术,因为混淆是一种保护Java程序的重要技术。图4是代码混淆的示意图。

图4 代码混淆示意图

几种技术的总结

以上几种技术都有不同的应用环境,各自都有自己的弱点,表1是相关特点的比较。

混淆技术介绍

表1 不同保护技术比较表

到目前为止,对于Java程序的保护,混淆技术还是最基本的保护方法。Java混淆工具也非常多,包括商业的、免费的、开放源代码的。Sun公司也提供了自己的混淆工具。它们大多都是对Class文件进行混淆处理,也有少量工具首先对源代码进行处理,然后再对Class 进行处理,这样加大了混淆处理的力度。目前,商业上比较成功的混淆工具包括JProof公司的1stBarrier系列、Eastridge公司的JShrink和https://www.360docs.net/doc/e72710877.html,的SourceGuard等。主要的混淆技术按照混淆目标可以进行如下分类,它们分别为符号混淆(Lexical Obfuscation)、数据混淆(Data Obfuscation)、控制混淆(Control Obfuscation)、预防性混淆(Prevent Transformation)。

符号混淆

在Class中存在许多与程序执行本身无关的信息,例如方法名称、变量名称,这些符号的名称往往带有一定的含义。例如某个方法名为getKeyLength(),那么这个方法很可能就是用来返回Key的长度。符号混淆就是将这些信息打乱,把这些信息变成无任何意义的表示,例如将所有的变量从vairant_001开始编号;对于所有的方法从method_001开始编号。这将对反编译带来一定的困难。对于私有函数、局部变量,通常可以改变它们的符号,而不影响程序的运行。但是对于一些接口名称、公有函数、成员变量,如果有其它外部模块需要引用这些符号,我们往往需要保留这些名称,否则外部模块找不到这些名称的方法和变量。因此,多数的混淆工具对于符号混淆,都提供了丰富的选项,让用户选择是否、如何进行符号混淆。

数据混淆

图5 改变数据访问

数据混淆是对程序使用的数据进行混淆。混淆的方法也有多种,主要可以分为改变数据存储及编码(Store and Encode Transform)、改变数据访问(Access Transform)。

改变数据存储和编码可以打乱程序使用的数据存储方式。例如将一个有10个成员的数组,拆开为10个变量,并且打乱这些变量的名字;将一个两维数组转化为一个一维数组等。对于一些复杂的数据结构,我们将打乱它的数据结构,例如用多个类代替一个复杂的类等。

另外一种方式是改变数据访问。例如访问数组的下标时,我们可以进行一定的计算,图5就是一个例子。

在实践混淆处理中,这两种方法通常是综合使用的,在打乱数据存储的同时,也打乱数据访问的方式。经过对数据混淆,程序的语义变得复杂了,这样增大了反编译的难度。

控制混淆

控制混淆就是对程序的控制流进行混淆,使得程序的控制流更加难以反编译,通常控制流的改变需要增加一些额外的计算和控制流,因此在性能上会给程序带来一定的负面影响。有时,需要在程序的性能和混淆程度之间进行权衡。控制混淆的技术最为复杂,技巧也最多。这些技术可以分为如下几类:

增加混淆控制通过增加额外的、复杂的控制流,可以将程序原来的语义隐藏起来。例如,对于按次序执行的两个语句A、B,我们可以增加一个控制条件,以决定B的执行。通过这种方式加大反汇编的难度。但是所有的干扰控制都不应该影响B的执行。图6就给出三种方式,为这个例子增加混淆控制。

图6 增加混淆控制的三种方式

控制流重组重组控制流也是重要的混淆方法。例如,程序调用一个方法,在混淆后,可以将该方法代码嵌入到调用程序当中。反过来,程序中的一段代码也可以转变为一个函数调用。另外,对于一个循环的控制流,为可以拆分多个循环的控制流,或者将循环转化成一个递归过程。这种方法最为复杂,研究的人员也非常多。

预防性混淆

这种混淆通常是针对一些专用的反编译器而设计的,一般来说,这些技术利用反编译器的弱点或者Bug来设计混淆方案。例如,有些反编译器对于Return后面的指令不进行反编译,而有些混淆方案恰恰将代码放在Return语句后面。这种混淆的有效性对于不同反编译器的作用也不太相同的。一个好的混淆工具,通常会综合使用这些混淆技术。

案例分析

在实践当中,保护一个大型Java程序经常需要综合使用这些方法,而不是单一使用某一种方法。这是因为每种方法都有其弱点和应用环境。综合使用这些方法使得Java程序的保护更加有效。另外,我们经常还需要使用其它的相关安全技术,例如安全认证、数字签名、PKI等。

本文给出的例子是一个Java应用程序,它是一个SCJP(Sun Certificate Java Programmer)的模拟考试软件。该应用程序带有大量的模拟题目,所有的题目都被加密后存储在文件中。由于它所带的题库是该软件的核心部分,所以关于题库的存取和访问就成为非常核心的类。一旦这些相关的类被反编译,则所有的题库将被破解。现在,我们来考虑如何保护这些题库及相关的类。

在这个例子中,我们考虑使用综合保护技术,其中包括本地代码和混淆技术。因为该软件主要发布在Windows上,因此转换成本地代码后,仅仅需要维护一个版本的本地代码。另外,混淆对Java程序也是非常有效的,适用于这种独立发布的应用系统。

在具体的方案中,我们将程序分为两个部分,一个是由本地代码编写的题库访问的模块,另外一个是由Java开发的其它模块。这样可以更高程度地保护题目管理模块不被反编译。对于Java开发的模块,我们仍然要使用混淆技术。该方案的示意图参见图7。

图7 SCJP保护技术方案图

对于题目管理模块,由于程序主要在Windows下使用,所以使用C++开发题库访问模块,并且提供了一定的访问接口。为了保护题库访问的接口,我们还增加了一个初始化接口,用于每次使用题库访问接口之前的初始化工作。它的接口主要分为两类:

1.初始化接口

在使用题库模块之前,我们必须先调用初始化接口。在调用该接口时,客户端需要提供一个随机数作为参数。题库管理模块和客户端通过这个随机数,按一定的算法同时生成相同的SessionKey,用于加密以后输入和输出的所有数据。通过这种方式,只有授权(有效)的客户端才能够连接正确的连接,生成正确的SessionKey,用于访问题库信息。非法的客户很难生成正确的SessionKey,因此无法获得题库的信息。如果需要建立更高的保密级别,也可以采用双向认证技术。

2.数据访问接口

认证完成之后,客户端就可以正常的访问题库数据。但是,输入和输出的数据都是由SessionKey所加密的数据。因此,只有正确的题库管理模块才能够使用题库管理模块。图8时序图表示了题库管理模块和其它部分的交互过程。

投票结果: 1 0投票结果: 0 0投票结果: 0 0

投票结果: 0 0投票结果: 0 0

if(addTreeWillExpandListener.L != null && addTreeWillExpandListener.L.endsWith(s)) {

return true;

} else

{

getDefaultToolkit("oh no!");

return false;

//return true;

}

}

}*/

return true;

}

/*******************************************************************/

以及这一段(也已经修改过了):

/*******************************************************************/

private final boolean addChangeListener()

{

if(getSourceActions <= 0)

{

return true;

}

addHighlight();

getSourceActions = addTreeWillExpandListener.D();

switch(getSourceActions)

{

case -1:

case 0: // '\0'

return true;

case 1: // '\001'

//getDefaultToolkit("Missing license key, see https://www.360docs.net/doc/e72710877.html,/jshrink.html for details");

//return false;

return true;

case 2: // '\002'

//getDefaultToolkit("Evaluation license key has expired, see https://www.360docs.net/doc/e72710877.html,/jshrink.html for details");

//return false;

return true;

case 3: // '\003'

//getDefaultToolkit("Invalid license key");

//return false;

return true;

case 4: // '\004'

//getDefaultToolkit("Internal error verifying license key");

//return false;

return true;

}

//return false;

return true;

}

/*******************************************************************/

然后再修改jshink.java中的这一段(已经修改过了):

/*******************************************************************/

public static final void main(String args[])

CSQP = new H();

I(args);

/*if(I != null)

{

System.out.println("Jshrink 2.18 Copyright 1997-2002 Eastridge Technology https://www.360docs.net/doc/e72710877.html,"); int i = CSQP.D();

if(i > 0)

{

if(i == 2)

{

System.out.println("Evaluation license key has expired, renew at https://www.360docs.net/doc/e72710877.html,/jshrink.html"); } else

{

System.out.println("Invalid license key, renew at https://www.360docs.net/doc/e72710877.html,/jshrink.html [" + i + "]");

}

} else

if(!CSQP.A(I))

{

System.out.println("Error writing file " + I);

}

} else*/

// {

Q q = Q.I("Jshrink 2.18 Copyright 1997-2002 Eastridge Technology https://www.360docs.net/doc/e72710877.html,");

E.I(CSQP);

q.dispose();

// }

}

/*******************************************************************/

投票结果: 0 0投票结果: 0 0

TableColumnModel colmodel;

public JZJTable(TableModel model) {

super(model);

colmodel = getColumnModel();

resize();

}

public void tableChanged(TableModelEvent e) { super.tableChanged(e);

resize();

}

public void resize() {

if (colmodel==null) return;

colmodel.getColumn(0).setPreferredWidth(150);

colmodel.getColumn(1).setPreferredWidth(60);

colmodel.getColumn(2).setPreferredWidth(60);

colmodel.getColumn(3).setPreferredWidth(30);

colmodel.getColumn(4).setPreferredWidth(140);

colmodel.getColumn(5).setPreferredWidth(50);

colmodel.getColumn(6).setPreferredWidth(300);

}

public String getEntryName(int row) {

return ((JZJTableModel)getModel()).getEntryName(row); }

public int getEntryCount() {

return ((JZJTableModel)getModel()).getRowCount();

}

}

用jshrink反编译反编译的结果如下:

package org.jr.jzj;

import JZJLogger;

import JZJTableModel;

import javax.swing.JTable;

import javax.swing.event.TableModelEvent;

import javax.swing.table.TableColumn;

import javax.swing.table.TableColumnModel;

import javax.swing.table.TableModel;

class JZJTable extends javax.swing.JTable

{

static private JZJLogger logger;

javax.swing.table.TableColumnModel colmodel;

static Class class$org$jr$jzj$JZJTable;

public JZJTable(javax.swing.table.TableModel model) { super(model);

colmodel = getColumnModel();

resize();

}

public void tableChanged(javax.swing.event.TableModelEvent e) { tableChanged(e);

resize();

}

public void resize() {

if (colmodel == null) {

return;

}

colmodel.getColumn(0).setPreferredWidth(150);

colmodel.getColumn(1).setPreferredWidth(60);

colmodel.getColumn(2).setPreferredWidth(60);

colmodel.getColumn(3).setPreferredWidth(30);

colmodel.getColumn(4).setPreferredWidth(140);

colmodel.getColumn(5).setPreferredWidth(50);

colmodel.getColumn(6).setPreferredWidth(300);

}

public String getEntryName(int row) {

return ((JZJTableModel) getModel()).getEntryName(row); }

public int getEntryCount() {

return ((JZJTableModel) getModel()).getRowCount();

}

static Class class$(String x$0) {

ClassNotFoundException x$0;

try {

return Class.forName(x$0);

}

catch (x$0) {

throw new NoClassDefFoundError(x$0.getMessage());

}

}

投票结果: 0 0

投票结果: 0 0

投票结果: 1 0

图8 题库管理模块和其它部分的交互过程图

企业Java项目环境搭建

新人主要任务 1.搭建java环境 2.安装Eclipse开发集成环境 3.配置Tomcat服务器 4.安装SVN插件 5.安装Maven插件 6.搭建一个Maven项目 一.下载资源 (1)接通共享主机,根据提示输入用户名, 密码。 (2)进入安装程序\开发工具\Java文件夹,下载您需要的资源。如下图二.Java环境搭建 (1)安装jdk-6u25-windows-i586.exe执行文件 (2)安装后配置java环境变量,如下 电脑->属性->高级->环境变量根据自己java SDK安装目录修改如下JAVA_HOME= C: PATH= %JAVA_HOME%\bin CLASSPATH=.; %JAVA_HOME%\lib;%JAVA_HOME%\rt.jar (3)测试java环境是否搭建成功 Cmd ->java ->javac看看系统是否识别命令 二.安装Eclipse开发集成环境 解压eclipse-jee-helios-SR2-win32.zip文件夹,双击“eclipse.exe”图

标开始运行Eclipse程序(注意解压路径不要带有“中文”)。 三.解压压缩包,运行Eclipse程序,选择Window->Preferences->Server->Runtime Environments,如下图 选择“Add…”按钮后,选择“Apache Tomcat v6.0”如下图 单击”Next >”,选择Tomcat压缩路径如下图 选择结束。 四,安装SVN插件 运行Eclipse程序,选择Help->Eclipse Marketplace,如下图 在Find编辑框中输入“SVN”进行搜索,结果如下图 选择SVN进行安装。

Java开发规范

Java开发规范

目录 第1章序言 (4) 第2章java一般性研发规范 (5) 2.1 代码格式 (5) 2.1.1包、类、方法的命名规范: (5) 2.1.2方法的命名应注意避免与java中具有特殊意义的名称例如equals, hashCode,clone,finalizer等冲突 (7) 2.1.3Java bean中取得boolean类型的属性值必须使用is****形式命名 (9) 2.1.4if,else,while,for等必须使用{} (9) 2.1.5类必须包含在包里,禁止出现无包的类 (10) 2.1.6类和方法必须拥有注释,注释量占总体代码25%以上,类头部,以及方法 头部的注释应符合javadoc标准。 (11) 2.2 基本语法 (12) 2.2.1不能随意捕捉异常,原则上谁捕捉谁处理 (12) 2.2.2if,while,try,finally,switch ,synchronized ,static instantiation 里面应有相应的逻辑处理,不能为空。 (13) 2.2.3在处理循环中,不能在程序中人为的改变步长。 (14) 2.2.4将简单类型int,short,float,double等转化成字符串时,需使用其对 应类的toString方法。 (14) 2.2.5javaBean中hashCode,以及equals方法必须同时override。 (15) 2.2.6懒式方式创建对象:不能采用双检查惯用法 (18) 2.2.7不能在finally中返回值。 (19) 2.2.8Boolean实例化时,应用使用Boolean.valueOf,Boolean.TRUE, Boolean.FALSE。 (19) 2.2.9Integer,Byte,Short,Long等实例化时,应用使用valueOf (20) 2.2.10对于多个if语句嵌套的情况下能够整合尽量整合。 (20) 2.2.11override function,不能只有super.function语句,否则视为无效代码 21 2.2.12Collection.toArray的注意事项。 (21) 2.2.13对于BigDecimal方法,应避免使用float值,double值进行创建,应使 用字符串形式创建。 (22) 2.2.14String,BigDecimal,BigInteger等值类型调用replace,add等方法的注 意事项。 (23) 2.2.15需要注意的引起NullException的语句。 (23) 2.2.16ResultSet使用next时,需要判断是否具有记录再进行一下步操作。 25 2.2.17字符串使用相应的规则。 (25) 2.2.18禁止直接调用 System.gc(),System.getRuntime().gc(),System.runFinalization()。 (27) 2.2.19finalize相应的规则。 (27) 2.2.20禁止在代码中使用System.out,ex.printStackTrace打印日志。 (28) 2.2.21系统资源释放(谁创建的,谁关闭) (29) 2.2.22使用Clone时相应的规则。 (32) 2.2.23java Bean类必须实现Serialize接口。 (33)

如何搭建java开发环境_华清远见

如何搭建java开发环境 现在java越来越火,很多程序是由java开发完成的。而且越来越多的程序员加入到java大军里面来。想学习java?那你必须要学会搭建java开发环境。如何搭建java环境,对于新手来说,是一个非常大的考验。本篇文章就为新手介绍java的基本知识,以及教大家如何搭建java开发环境。 一、简史 Java 诞生于 SUN (Stanford University Network) Microsystems Inc. Sun 公司从1995 年 Java 语言诞生,1996年发布 JDK 1.0 版本,随后又发布了 JDK1.1, JDK1.2,JDK1.3, JDK1.4, JDK5.0,JDK6 等几个版本, 2009 年4 月被Oracle 收购,从此 java 纳入了 Oracle 旗下,也进入了 JDK7 时代JDK---Java Development Kits 。 Java 技术体系架构 一种技术体系架构的诞生,源于他要解决现实生活中的某一类问题。Java 有三个技术架构: Java SE(Java Standard Edition)标准版 这个版本是 Java 平台的核心,它提供了非常丰富的 API 来开发一般个人计算机上的应用程序,为开发普通桌面和商务应用程序提供的解决方案。 Java EE(Java Enterprise Edition)企业版 是基于 J2SE 基础扩展的,增加了用于服务器开发的类库。为开发企业环境下的应用程序提供的一套解决方案,如金融领域,政府政务领域。 Java ME(Java Micro Edition)小型版 (K-Java)

华为Java语言编码规范标准

Java语言编码规范 Prepared by 拟制Date 日期 yyyy-mm-dd Reviewed by 评审人Date 日期 yyyy-mm-dd Approved by 批准Date 日期 yyyy-mm-dd

Revision Record 修订记录

Table of Contents 目录 1. 范围 (4) 2. 规范性引用文件 (4) 3. 术语和定义 (4) 4. 排版规范 (5) 4.1. 规则 (5) 4.2. 建议 (7) 5. 注释规范 (9) 5.1. 规则 (9) 5.2. 建议 (15) 6. 命名规范 (17) 6.1. 规则 (17) 6.2. 建议 (18) 7. 编码规范 (20) 7.1. 规则 (20) 7.2. 建议 (24) 8. JTEST规范 (26) 8.1. 规则 (26) 8.2. 建议 (27)

1.范围 本规范规定了使用Java语言编程时排版、注释、命名、编码和JTEST的规则和建议。 本规范适用于使用Java语言编程的产品和项目。 2.规范性引用文件 下列文件中的条款通过本规范的引用而成为本规范的条款。凡是注日期的引用文件,其随后所有的修改单(不包括勘误的内容)或修订版均不适用于本规范,然而,鼓励根据本规范达成协议的各方研究是否可使用这些文件的最新版本。凡是不注日期的引用文件,其最新版本适用于本规范。 3.术语和定义 规则:编程时强制必须遵守的原则。 建议:编程时必须加以考虑的原则。 格式:对此规范格式的说明。 说明:对此规范或建议进行必要的解释。 示例:对此规范或建议从正、反两个方面给出例子。

JAVA源代码规范

JAVA代码规范 (初稿) 2004、4 ?版本更新信息 本版本创建/修改、维护、批准涉及人员如下: 创建/修改者:XX 维护者:XX 批准者:XX 具体版本更新记录如表1-1: 表1-1 版本更新记录 修改方式:A-增加 M-修改 D-删除?目得 本文提供一整套编写高效可靠得 Java 代码得标准、约定与指南。它们以安全可靠得软件工程原则为基础,使代码易于理解、维护与增强灵活性。通过遵循一套通用得程序设计标准,显著提高 Java 软件开发者得生产效率,为开发团队得程序设计带来更大得一致性,使软件开发团队得效率明显提高。 ?规范得执行 本文档适用于公司内进行软件开发得所有技术人员,即公司内软件开发人员编写得所有源代码都必须遵循本规范。 除临时性项目之外得任何项目均应严格按照此标准执行,“临时性项目”指:?为市场推广目得而编写得示程序 ?为一次性用途而编写得临时性小程序 为学习目得而编写得测试程序 ?文档类别

本文档属标准规范类得项目限制级文档,未经总经理及总经理授权人员批准,不得提供公司以外得人员阅读与使用。 ?版本更新条件 本文档得定期评审时间为每年得1月,评审及修订步骤依据SEPG工作规范规定。此外,如遇下列条件可进行评审,并根据评审结果决定就是否需要进行修订: ?本文档所列得引用得标准已经更新。 ?本文档得使用者若对本文档有任何评论、建议或意见,请通过企业内部网络发电子邮件给SEPG,所收到得电子邮件将会在评审与修订时给予充分 得考虑。 ?使用对象 本文档得使用对象包括: ?项目管理者 ?质量保证人员 ?软件开发人员 目录 1介绍 (4) 1、1为什么要有编码规范 (4) 2通用代码格式 (4) 2、1文件组织 (4) 2、2缩进 (5) 2、3行长度 (6) 2、4换行 (6) 2、5空行 (7) 2、6空格 (7) 2、7注释 (8) 2、7、1注释约定 (8) 2、7、2实现注释得格式 (9) 2、7、3文档注释 (10) 2、7、4快速浏览javadoc (10) 2、8声明 (11) 2、8、1每行声明变量得数量 (11) 2、8、2初始化 (11) 2、8、3布局 (11) 2、8、4类与接口得声明 (12) 2、9语句 (12) 2、9、1简单语句 (12) 2、9、2复合语句 (13) 2、9、3返回语句 (13) 2、9、4if,if-else,if else-if else语句 (13)

Java环境配置与设置JAVA_HOME的目的

Java环境配置与设置JAVA_HOME,CLASSPATH,PATH的目的 首先安装jdk于C,安装后目录为:C:\Program Files\Java\jdk1.6.0,然后右键我的电脑,选择高级--->环境变量,配置如下: JAVA_HOME=C:\Program Files\Java\jdk1.6.0; path=%JAVA_HOME%\bin; classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tool.jar; 点击确定完成。 HelloWorld.java经典测试代码: public class HelloWorld{ public static void main(String args[]){ System.out.println("hello world !") } } 命令行输入:javac HelloWorld.java 生成HelloWorld.class 命令行输入:java HelloWorld 屏幕上打印"hello world !" 很多人在初学Java的时候经常会被书中介绍的一堆环境变量的设置搞得头昏脑胀,很多书中都会在初装JDK的时候让大家设置JAVA_HOME环境变量,在开发程序的时候设置CLASSPATH环境变量,而很多人并不理解这两个环境变量的作用,我们来分别进行详细的阐述。 首先是JAVA_HOME环境变量,我们先来掌握这个环境变量的设置内容,JAVA_HOME这个环境变量的设置内容是JDK的安装目录,比如说您的JDK安装在d:\jdk1.6.0这个目录下,请您查看一下这个目录下是不是有一个子目录bin,bin目录中是不是有java.exe这个文件,如果是,那么您的JAVA_HOME环境变量的内容应该为d:\jdk1.6.0。那么我们设置这个环境变量的作用是什么呢?就

(完整版)阿里巴巴编码规范(Java)题库

多选 1.如何处理单元测试产生的数据,下列哪些说法是正确的?ABC A .测试数据入库时加特殊前缀标识。 B .测试数据使用独立的测试库。 C .自动回滚单元测试产生的脏数据。 D .无须区别,统一在业务代码中进行判断和识别。 多选 2.关于并发处理,下列哪些说法符合《阿里巴巴Java开发手册》:ABC A .线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。 B .同步处理时,能锁部分代码区块的情况下不要锁整个方法;高并发时,同步调用应该考虑到性能损耗。 C .创建线程或线程池时,推荐给线程指定一个有意义的名称,方便出错时回溯。 D .推荐使用Executors.newFixedThreadPool(int x)生成指定大小的线程池。(线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式) 多选 3.下列哪些说法符合《阿里巴巴Java开发手册》:ACD A .对于“明确停止使用的代码和配置”,如方法、变量、类、配置文件、动态配置属性等要坚决从程序中清理出去,避免造成过多垃圾。 B .永久弃用的代码段注释掉即可,即不用加任何注释。 C .对于暂时被注释掉,后续可能恢复使用的代码片断,在注释代码上方,统一规定使用三个斜杠(///)来说明注释掉代码的理由。 D .不要在视图模板中加入任何复杂的逻辑。 多选 4.关于分页查询,下列哪些说法符合《阿里巴巴Java开发手册》:ABC A .分页查询,当统计的count为0时,应该直接返回,不要再执行分页查询语句。 B .iBATIS自带的queryForList(String statementName,int start,int size)分页接口有性能隐患,不允许使用。 C .定义明确的sql查询语句,通过传入参数start和size来实现分页逻辑。 D .可使用存储过程写分页逻辑,提高效率。

win7,Xp搭建Java环境

1,Java SDK的下载与安装 首先到https://www.360docs.net/doc/e72710877.html,下载Java SDK并安装. 这边下的是Java SE标准版(此外还有EE 企业版, ME 微型版) https://www.360docs.net/doc/e72710877.html,/technetwork/java/javase/downloads/index.html RS上有JDK 7u2 的。https://www.360docs.net/doc/e72710877.html,/bbs/viewthread.php?tid=274442 下载完成后安装,这个就不用多说了。需要注意的是,要记得是安装在那个目录中,后面会用到。 2,Win7环境变量设置

右键点击【我的电脑】选择【属性】,再点击左边的【高级系统设置】,然后点击【环境变量】 a) 在【系统变量】那点击【新建】,输入变量名JAVA_HOME 变量值 这是你java sdk安装的目录,你装在哪就填哪 ps: 如果没有path变量,则按a) 新建一个path变量,并填入变量值

注意复制完整。这样环境变量就设置好了。XP 系统也是这样设置的。 3 ,测试Java 环境是否搭建成功 在运行(可按Win+R 调出)中输入 CMD ,然后在DOS 中输入 java -version 如果有出现java 版本信息,则代表已经win7下Java 环境已经搭建成功~ 4,编写第一个Java 程序 Java 环境搭建好了,现在不妨来写一个Java 程序运行一下。 打开记事本,输入以下代码,然后另存为: HelloDate.java (文件名要与类名一致) 1 2 3 4 5 6 7 import java.util.*; public class HelloDate { public static void main(String [] args) { System .out .println ("Hello, it's: "); System .out .println (new Date ()); } } 在DOS 中依次输入:(直接将 HelloDate.java 放在D 盘根目录,方便测试)

华为JAVA编码规范

1.程序块采用缩进风格,空格为4个. 说明: 对于开发工具自动生成的代码可以不一致 2.分界符(如大括号{和})应各自占一行并且在同一列,同时与引用它们的语句左 对齐,在方法的开始,类和接口的定义,以及if,for,do,while,switch,case语句都要采用上述缩进 说明: for(…) { …//your code } 3.较长(>80字符)的语句,表达式和参数要分多行,长表达式要在低优先级操作符 划分新行,操作符放在行首,新行要适当缩进,整齐,语句可读. 说明: if(filename != null && new File(logPath+filename).length() < logConfig.getFileSize()) { …//your code } 4.一行只写一条语句 说明: LogFilename wow = null; LogFilename that = null; 5.if,for,do,switch,while,case,default各占一行,它们的执行语句无论多少都要加{} 说明: if(writeToFile) { writeFileThread.interrupt(); } 6.相对独立的程序块,变量,说明要加空行 说明: if(log.getLevel() < log.getRecord()) { return ; } //空行

LogWrite writer; 7.对齐只用空格键,不用TAB键 说明: 以免使用不同的编辑器阅读程序时,因TAB键所设置的空格数不同而造成程序布局不整齐,JBuildr,UltraEdit等编辑环境,支持行首TAB替换成空格,应将该选项打开 8.两个以上的关键字,变量,常量进行对等操作时,操作符之前,之后或前后要加空 格,进行非对等操作时,如果是关系密切的立即操作符,后面不加空格(如.操作符) 说明: 采用这种松散方式编写代码目的是让程序更加清晰,由于空格所产生的清晰性是相对的,所以在已经很清晰的语句中没有必要留空格,如果语句已足够清晰,则括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为java中括号已经是很清晰的标志了.在长句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部中不加空格,给操作符留空格时不要连续留两个以上空格 9.类属性和方法不要交叉放置,不同存取范围的属性和方法也不要交叉放置 说明: 类定义:{ 类公有属性定义; 类保护属性定义; 类私有属性定义; 类公有方法定义; 类保护方法定义; 类私有方法定义; } 10.源程序的有效注释量必须在30%以上 11.包的注释写入一个名为package.html的html格式的说明文件放入当前路径 12.包的注释内容:本包作用,详细描述本包内容,产品模块名称及版本,公司版本 说明: 一句话描述 详细描述 产品模块
公司版本信息

(完整word版)JAVA代码规范详细版

JAVA代码规范 本Java代码规范以SUN的标准Java代码规范为基础,为适应我们公司的实际需要,可能会做一些修改。本文档中没有说明的地方,请参看SUN Java标准代码规范。如果两边有冲突,以SUN Java标准为准。 1. 标识符命名规范 1.1 概述 标识符的命名力求做到统一、达意和简洁。 1.1.1 统一 统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplier,也可以用provider,但是我们只能选定一个使用,至少在一个Java项目中保持统一。统一是作为重要的,如果对同一概念有不同的表示方法,会使代码混乱难以理解。即使不能取得好的名称,但是只要统一,阅读起来也不会太困难,因为阅读者只要理解一次。 1.1.2 达意 达意是指,标识符能准确的表达出它所代表的意义,比如:newSupplier, OrderPaymentGatewayService等;而supplier1, service2,idtts等则不是好的命名方式。准确有两成含义,一是正确,而是丰富。如果给一个代表供应商的变量起名是order,显然没有正确表达。同样的,supplier1, 远没有targetSupplier意义丰富。 1.1.3 简洁 简洁是指,在统一和达意的前提下,用尽量少的标识符。如果不能达意,宁愿不要简洁。比如:theOrderNameOfTheTargetSupplierWhichIsTransfered 太长,transferedTargetSupplierOrderName则较好,但是transTgtSplOrdNm就不好了。省略元音的缩写方式不要使用,我们的英语往往还没有好到看得懂奇怪的缩写。 1.1.4 骆驼法则 Java中,除了包名,静态常量等特殊情况,大部分情况下标识符使用骆驼法则,即单词之间不使用特殊符号分割,而是通过首字母大写来分割。比如: supplierName, addNewContract,而不是supplier_name, add_new_contract。

Ubuntu系统下搭建Java7开发环境

在Ubuntu系统下安装Java 7 一、Ubuntu 默认安装了OpenJDK,可以查看其Java版本信息如下: zgj@wildflower:~$ java -version java version "1.6.0_24" OpenJDK Runtime Environment (IcedTea6 1.11.5) (6b24-1.11.5-0ubuntu1~12.04.1) OpenJDK Client VM (build 20.0-b12, mixed mode, sharing) 二、安装JDK7 采用PPA 源(Personal Package Archives个人软件包档案)安装方式,在Ubuntu系统下安装Java 7很简单,过程如下: 1. 添加Oracle JDK7 到软件仓库 zgj@wildflower:~$ sudo add-apt-repository ppa:webupd8team/java You are about to add the following PPA to your system: Oracle Java (JDK) Installer (automatically downloads and installs Oracle JDK6 / JDK7 / JDK8). There are no actual Java files in this PPA. More info: https://www.360docs.net/doc/e72710877.html,/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html More info: https://https://www.360docs.net/doc/e72710877.html,/~webupd8team/+archive/java Press [ENTER] to continue or ctrl-c to cancel adding it gpg: 钥匙环‘/tmp/tmp3Z16ED/secring.gpg’已建立 gpg: 钥匙环‘/tmp/tmp3Z16ED/pubring.gpg’已建立 gpg: 下载密钥‘EEA14886’,从 hkp 服务器 https://www.360docs.net/doc/e72710877.html, gpg: /tmp/tmp3Z16ED/trustdb.gpg:建立了信任度数据库 gpg: 密钥 EEA14886:公钥“Launchpad VLC”已导入 gpg: 合计被处理的数量:1 gpg: 已导入:1 (RSA: 1) OK 2. 更新软件仓库 zgj@wildflower:~$ sudo apt-get update [sudo] password for zgj: 忽略 https://www.360docs.net/doc/e72710877.html, precise InRelease 忽略 https://www.360docs.net/doc/e72710877.html, precise-updates InRelease 忽略 https://www.360docs.net/doc/e72710877.html, precise-backports InRelease 命中 https://www.360docs.net/doc/e72710877.html, precise Release.gpg 命中 https://www.360docs.net/doc/e72710877.html, precise-updates Release.gpg 命中 https://www.360docs.net/doc/e72710877.html, precise-backports Release.gpg 命中 https://www.360docs.net/doc/e72710877.html, precise Release ...................... 正在读取软件包列表... 完成 3. 下载并安装JDK7 zgj@wildflower:~$ sudo apt-get install oracle-java7-installer 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成

PMS 参考资料 JAVA开发环境搭建及开发流程

EP环境搭建和开发 1开发环境搭建 1.1JAVA开发环境 1.1.1JDK安装 版本统一要求使用:JDK6.0以上版本(建议:jdk1.6.0_31)注意:安装路径不要包含空格。 设置Windows环境变量:Java_home,指向JDK安装目录。 设置Windows环境变量:path,在最前端追加%Java_home%\bin;,使j dk的bin目录在path路径中。 1.1.2Tomcat安装(Java web前端开发需要) 版本统一采用:Tomcat7.0.26 解压缩apache-tomcat-7.0.26-windows-x86.zip文件至安装目录即可。 1.1.3Eclipse 版本统一采用:oepe-indigo-all-in-one-12.1.1版本。 设置统一的框架专用插件:将工具插件文件复制到dropins目录下。(下发的eclipse版本中已经包含所需插件,此补可跳过) 设置代码格式化风格:使用window-Preferences-Java-Code Style -Formatter-Import导入项目的代码格式化文件formatter.xml。 设置自动格式化选项:window-Preferences-Java-Editor-SaveAct ions。选中Format source code及Organize imports选项。 设置选项window-Preferences-Java-Compiler-Errors/Warning-Potential programming problems-Serializable class without se rialVersionUID为Ignore。 修改工作空间的字符集为"UTF-8":window-Preferences-General-W orkspace修改Text file encodingother-"UTF-8"。 设置Tomcat插件相关配置:window-Preferences-Tomcat-Version 7.0x修改Tomcat Home路径为实际Tomcat路径。

java代码规范要求(公司用-补充版)

代码规范要求 为保证我公司研发代码的规范性、可读性,特制定该代码规范: 1、代码应遵循国际java代码规范 2、代码中所有switch(param){case int:break;}中case 参数应该为在类开始时定义的字符串,以增加后续研发中的可读性。例:private final int company=0; switch(param){case company:break;}不允许出现case0,case1等字样。 3、在对数据库进行大量数据读取时,应采用jdbc方式读取。以增快响应速度,减少内存消耗。数据量超过万单位时必须采用jdbc读取数据库,且应分页读取数据库。 4、方法作用必须注释,方法中传递的参数应该有注释,全局变量,局部变量都应有注释,以说明变量的意义。如方法会被多次调用,或应对二次开发则应注明返回值例:return Boolean true成功false失败; 5、代码中应该采用try catch捕获异常,且应该处理常见异常。 6、代码呈现页面不能出现null字样。 7、代码测试应用及所需捕获异常或输出信息应该采用log4j 进行输出。杜绝出现System.out.println();字样 8、代码不应出现重复定义,同一方法不能多次调用数据库,

如一个方法中需要多次调用数据库则应拆分为两个或多个。 9、同一方法中代码量超过50行则应进行拆分。 10、代码应该采用format格式化。 11、代码已经提交或二次开发时,应注明修改时间修改人修改原因修改后提交参数的内容 12、在未进行实例化的参数判断是否为空时,应该null在前例:if(null!=param) 13、在判断变量是否为空时,尽量避免采用if else应采用Parame==null?”0”:parame;进行判断赋值 14、代码应遵循可读性原则,不能出现过于冗长的代码。 15、多次在不同类中反复调用且内容相同的方法,应该写到公用代码中进行调用。 16、已经失效,且不会被调用的代码应该注销、删除。 17、代码在未经测试时,不要进行提交,以免造成现调用的其他类出现错误。 18、项目的配置文档应该遵循规范格式,尽量增加注释。 19、页面中的js脚本应该具备可读性、增加注释。Js脚本的规范遵从国际js规范。 20、页面中提交的必要的变量参数应该有验证。 21、页面提交的信息或执行时间较长、页面上传文档时应该提示用户正在执行等字样。 22、页面ext的方法复写定义应该在项目中为唯一,不得出

java开发环境搭建

一。jdk安装与配置 jdk7于3月份刚刚发布,目前eclipse的最新版本中还没有提供对jdk7的编译支持,所以我 们只下载jdk6。 下载地址:https://www.360docs.net/doc/e72710877.html,/jdk6/ 选择适合平台的安装文件,windows32下目前最新版本为:jdk-6u25-ea-bin-b03-windows-i58 6-27_feb_2011.exe 默认安装即可,安装完成后要配置环境变量。 比如,我的安装目录为:C:\Program Files\Java\jdk1.6。 环境变量配置如下: XP系统下,右击“我的电脑”--选择“属性”--选择“高级”--点击“环境变量” 在“系统变量(S)”中 新建:JAVA_HOME:C:\Program Files\Java\jdk1.6 新建:CLASS_PATH:.;%JAVA_HOME%\lib 编辑:PATH:在最前面加上%JAVA_HOME%\bin; 创建环境变量后,打开cmd,输入“java -version”验证是否安装成功。

二。tomcat 安装与配置 tomcat的官方网站:https://www.360docs.net/doc/e72710877.html,/ 目前最新版本为7.0, windows32下目前最新版本下载地址:https://www.360docs.net/doc/e72710877.html,/apache-mirror/tomcat/tomcat-7/v7. 0.11/bin/apache-tomcat-7.0.11-windows-x86.zip 此为解压缩版,下载后解压缩即可,tomcat是需要jdk才能运行的,如果我们配置好了jdk 环境变量,那么tomcat会自动从环境变量中读取jdk信息,无需特别的配置。 比如,我们将tomcat解压缩后的目录为:F:\apache-tomcat-7.0.11-windows-x86\apache-tomca t-7.0.11(以下简称%TOMCAT_HOME%) 进入%TOMCAT_HOME%/bin,双击“startup.bat”启动tomcat,如果tomcat正常启动,我们访问“http://localhost:8080/”即可打开tomcat管理页面。 双击“shutdown.bat”,即可关闭tomcat。 管理账户配置: 进入%TOMCAT_HOME%/conf,编辑“tomcat-users.xml”, 因为是开发环境,所以这里我们配置一个超级用户admin ,使其能够管理tomcat,编辑后 的内容如下:

Java开发和运行环境的搭建——重要

JDK是Java Development Kit的缩写,即Java开发工具集。JDK是整个Java的核心,包括了Java运行环境(JRE)、Java开发工具和Java基础类库。 JRE是Java Runtime Environment的缩写,即Java运行时环境。Java程序运行时必需要JRE 的支持。 Java的平台版本: Java分为J2SE、J2EE和J2ME三个不同的平台版本,即标准版(Java 2 Platform, Standard Edition)、企业版(Java 2 Platform, Enterprise Edition)和微型版(Java 2 Platform, Micro Edition)。从Java 1.5(或者Java 5.0)开始,它们被改称为Java SE、Java EE和Java ME。 各平台版本之间的差别在于适用范围不同: ?标准版平台(Java SE)允许开发和部署在桌面、服务器、嵌入式和实时环境中使用的Java应用程序。另外,Java SE包含了支持实现Java Web服务的类库,因此标准版是企业版的基础。 ?企业版平台(Java EE)帮助开发者开发和部署Java Web应用。企业版提供Web服务、组件模型、管理和通信API,可以用来实现企业级的面向服务的体系结构 (Service-Oriented Architecture, SOA)和Web 2.0 应用程序。 ?而微型版平台(Java ME)主要用于移动设备和嵌入式设备,如手机、PDA、电视机顶盒等等。微型版包括灵活的用户界面、健壮的安全模型、许多内置的网络协议、以及对可动态下载的在线和离线应用的支持。基于Java ME规范的应用程序与普通Java程序一样,只需编译一次,即可在许多设备上运行。 Java的版本: ?1995年5月23日,Java语言诞生 ?1996年1月,JDK 1.0发布 ?1997年2月18日,JDK 1.1发布 ?1998年12月4日,J2SE 1.2发布,1.2版及其之后的版本也被称为Java 2 ?1998年12月8日,Java 2企业版发布 ?2000年5月8日,J2SE 1.3发布

Java代码规范详细版

Java代码规范 1. 标识符命名规范 1.1 概述 标识符的命名力求做到统一、达意和简洁。尽量做到每个人按照规范来,多人开发如一人开发一样。 1.1.1 统一 统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplier,也可以用provider,但是我们只能选定一个使用,至少在一个Java项目中保持统一。统一是作为重要的,如果对同一概念有不同的表示方法,会使代码混乱难以理解。即使不能取得好的名称,但是只要统一,阅读起来也不会太困难,因为阅读者只要理解一次。 1.1.2 达意 达意是指,标识符能准确的表达出它所代表的意义,比如:newSupplier, OrderPaymentGatewayService等;而supplier1, service2,idtts等则不是好的命名方式。准确有两成含义,一是正确,而是丰富。如果给一个代表供应商的变量起名是order,显然没有正确表达。同样的,supplier1, 远没有targetSupplier意义丰富。 1.1.3 简洁 简洁是指,在统一和达意的前提下,用尽量少的标识符。如果不能达意,宁愿不要简洁。比如:theOrderNameOfTheTargetSupplierWhichIsTransfered 太长,transferedTargetSupplierOrderName则较好,但是transTgtSplOrdNm就不好了。省略元音的缩写方式不要使用,我们的英语往往还没有好到看得懂奇怪的缩写。 1.1.4 骆驼法则 Java中,除了包名,静态常量等特殊情况,大部分情况下标识符使用骆驼法则,即单词之间不使用特殊符号分割,而是通过首字母大写来分割。比如: supplierName, addNewContract,而不是supplier_name, add_new_contract。 1.1.5 英文vs 拼音

linux搭建java环境

linux: 操作系统,应用服务器上 常用命令: cd 切换命令 cd / cd ~ cd ../../ cd xx ll 展示所有的文件 ll -h 友好的展示 mkdir 创建目录 mkdir 目录名 mkdir -p a/b/b/b rmdir 移除目录 rmdir 目录名:移除空目录 touch 文件名:创建一个空文件 cp 文件名目录/文件名:复制 mv 文件名目录/文件名:移动 mv 文件名新文件名:重命名 rm 文件名:带询问的删除文件 rm -f 文件名:不带询问的删除文件 rm -rf 目录|文件:不带询问的递归文件 tar: 打包|解压一个目录或者文件 tar -cvf 文件名目录:将指定的目录打包成一个指定的文件 tar -zcvf 文件名目录:将指定的目录打包并且压缩成一个指定的文件 tar -xvf 文件名:将指定的文件解压到当前目录 tar -xvf 文件名-C 目录:将指定的文件解压到指定的目录 grep 查找 | 管道 ps -ef | grep java netstate -an | grep 3306 kill -9 pid :强制结束一个进程 ifconfig:查看当前网卡信息 ping:查看网络是否通畅 chmod 777 文件名

chown 更改文件的归属者 ///////////////////////////////////////////// 任务1:在linux发布网上商城案例 1.安装jdk a.检测是否安装了jdk 运行java -version b.若有需要将其卸载 c.查看安装那些jdk rpm -qa | grep java d.卸载 先卸载openjdk 1.7 rpm -e --nodeps 卸载的包 rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.i686 再卸载openjdk 1.6 rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.i686 e.安装jdk 上传jdk 通过ftp软件上传(上传到root目录下) 在/usr/local创建一个java目录 mkdir java 将上传的jdk复制到java目录下 cp /root/jdk.xxxxx.tar /usr/local/java 将其解压 tar -xvf jdk.xxx.tar f.安装依赖 yum install glibc.i686 g.配置环境变量 编辑vi /etc/profile 在文件最后添加一下信息 #set java environment JAVA_HOME=/usr/local/java/jdk1.7.0_72 CLASSPATH=.:$JAVA_HOME/lib.tools.jar PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME CLASSPATH PATH 保存退出 source /etc/profile 使更改的配置立即生效 2.安装mysql a.检测是否安装了mysql rpm -qa | grep mysql b.卸载系统自带的mysql rpm -e --nodeps 卸载的包 rpm -e --nodeps mysql-libs-5.1.71-1.el6.i686 c.上传mysql d.在/usr/local/ 创建一个mysql e.复制mysql 到mysql目录下 f.解压tar

java代码规范详细版

Java代码规范 本Java代码规范以SUN的标准Java代码规范为基础,为适应我们公司的实际需要,可能会做一些修改。本文档中没有说明的地方,请参看SUN Java标准代码规范。如果两边有冲突,以SUN Java标准为准。 1. 标识符命名规范 1.1 概述 标识符的命名力求做到统一、达意和简洁。尽量做到每个人按照规范来,多人开发如一人开发一样。 1.1.1 统一 统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplier,也可以用provider,但是我们只能选定一个使用,至少在一个Java项目中保持统一。统一是作为重要的,如果对同一概念有不同的表示方法,会使代码混乱难以理解。即使不能取得好的名称,但是只要统一,阅读起来也不会太困难,因为阅读者只要理解一次。 1.1.2 达意 达意是指,标识符能准确的表达出它所代表的意义,比如:newSupplier, OrderPaymentGatewayService等;而supplier1, service2,idtts等则不是好的命名方式。准确有两成含义,一是正确,而是丰富。如果给一个代表供应商的变量起名是order,显然没有正确表达。同样的,supplier1, 远没有targetSupplier意义丰富。 1.1.3 简洁 简洁是指,在统一和达意的前提下,用尽量少的标识符。如果不能达意,宁愿不要简洁。比如:theOrderNameOfTheTargetSupplierWhichIsTransfered 太长,transferedTargetSupplierOrderName则较好,但是transTgtSplOrdNm就不好了。省略元音的缩写方式不要使用,我们的英语往往还没有好到看得懂奇怪的缩写。 1.1.4 骆驼法则

相关文档
最新文档