1、1,Java技术及其应用,第1章 语言基础,2,本章将对Java的数据类型、表达式、控制流程、字符串、正则表达式等逐一进行详细介绍。,3,1.1 数据类型,整型浮点型基本类型 字符型 数据类型 布尔型复合类型 数组类型类/接口类型,4,字符集 Java 语言采用unicode字符集,含有65535个字符,所以字母包括下面几种: A-Z,a-z 汉字、日文片假名、平假名和朝鲜文,5,Java的标记共有5种: 标识符(identifier),关键字(keywork),字面量(literal),运算符(operator)和分隔符(separator)。 还有不属于标记集的注释。,1.1.1 Java
2、的标记集,6,1. 标识符,标识符是赋给变量、类和方法的词,如我们前面见到过的HelloWorld等。Java的标识符必须是由字母、下划线“_”及美元符号“$”开头的字符数字串,数字0-9,字母包括大小写A-Z,以及编码小于十六进制数的Unicode字符。 以下是合法的标识符:x,y,HelloWorld,text_1 等 ( 建议不用“$”,不用“_”开头,不用全部大写字母)。以下则是不合法的标识符:5days,book-2,room# 等 ( 用关键字做标识符也不合法)。,7,2. 关键字,关键字是Java语言本身使用的特殊词,不能作为标识符赋给变量、类和方法。表1.1列出了Java使用的
3、关键字,带一个*号者保留未用,带*者是1.2版加入的,带*者是 1.4版加入的,而带*者是5.0版加入的。,8,3. 字面量,字面量表示Java语言中数与字符的明显值,即常量。,9,4. 运算符,Java语言用一些符号表示一些基本运算形式,这些符号叫运算符或操作符。,10,运算优先级(优先级由高到低)后缀(postfix)运算: . () expr+ expr-一元(unary)运算: +expr -expr +expr -expr ! 建立(creation)或转型(cast): new (type)expr乘(multiplicative): * / %加(additive): + -移位
4、(shift): 关系(relational): = instanceof相等(equality): = !=按位与(bitwise AND): &按位异或(bitwise exclusive OR): 按位或(bitwise inclusive OR): |逻辑与(logical AND): &逻辑或(logical OR): |条件(conditional): ?:赋值(assignment): = op=,11,5. 分隔符,分隔符用于告诉编译器代码从哪里分开和组合,常用的有()、;、,等。,12,Java有三种注释格式:/* . */ 用于多行注释。/ . 用于单行注释,到行尾自动终止
5、。/* . */ 用于自动文档产生器javadoc产生注释文档,它必须位于声明(declaration)部分之前。,6.注释,13,变量用于表示Java在内存中存储的一个数据,它用带有类型的标识符表示,需要用声明语句来建立: type identifier ,identifier;,1.1.2 基本数据类型的变量与声明,14,1.整数类型,常量: 十进制:123,6000 八进制:077,065 十六进制:0x234,0xab12 整形变量的定义分为四种:,int,byte,short,long,15,int型,变量定义int x;int tom_12,jafei,年龄 定义同时可赋值:int
6、 tom_12=100,jafei,年龄20; 对于int型变量,内存分配为4个字节,占32位,取值范围-231 231-1,-2147483648-2147483647,16,byte型,变量定义byte w;byte x,y,z; 定义同时可赋值:byte x=12,y=24,z=36; 对于byte型变量,内存分配1个字节,占8位,取值范围-27 27-1,-128-127,17,short型,变量定义short h;short m,$12,_aort; 定义同时可赋值:short m=12,$12=20; 对于short型变量,内存分配2个字节,占16位,取值范围-215 215-1,
7、-32768-32767,18,long型,变量定义long 长型long I,j,k;对于long型变量,内存分配8个字节,占64位,取值范围-263 263-1,-92233720368477808-92233720368477807,19,2.浮点类型,float型 常量:12.23f, 32.00F, 2e40f 变量的定义:float x;float x1,x2,x3;定义时赋初值:float x1=12.23f,x2=32.00f,x3; 对于float型变量,内存分配4个字节,占32位.,有效位6-7位,20,double 型,常量:12.23d, 32.00D, 123.0,6
8、e-120 变量定义:double d;double d1,d2,d3; 定义时可以赋初值:double d1=1223.f,d2=32.00d,d3; 内存分配8个字节,占64位,有效位15位,21,3.字符类型,常量:a、A 、8 、? 变量定义:char q;char c,type,cat; 定义同时可赋值: char c=a,type,cat;,22,反斜线序列支持转义字符序列 描述 继续下行n 换行t 横向跳格b 退格r 回车f 走纸 反斜线 单引号“ 双引号ddd 3位八进制数xdd 2位十六进制数udddd Unicode字符,23,4.逻辑型,常量:true、false 变量的
9、定义:boolean x;boolean x,y,tom; 定义同时可赋值:boolean x=true,tom=false;,Which?,24,变量声明之后,它的作用范围(scope)就确定了: 从变量声明的位置开始到它所在的代码块(block)结束之处。 所谓块就是由花括号对 包含的一段代码。 如果在一个大范围内嵌套了一个小范围,而两个范围的某个变量同名,当程序进入小范围时,大范围的同名变量会被隐藏不用,直到退出小范围才恢复使用。,1.1.3 变量范围,25,class myApp public static void main(String args) int x;.public vo
10、id mymethod() char y;.整数变量x的作用范围在main方法中,不能用在mymethod方法中; 而字符变量y只能用于mymethod中,不能用于main中。,26,数组是Java的一种复合类型,是由同类型的对象组成的,这些对象可由索引(indexing)来引用。,1.1.4 数组类型,27,声明数组,格式:数组元素类型 数组名字 数组元素类型 数组名字; 二维数组:数组元素类型 数组名字 数组元素类型 数组名字;,28,例如: float boy; double girl char cat float a double b; 也可用定义的类来声明数组: Point line
11、 ;,29,创建数组,数组声明后,要用new 运算符为其分配内存空间 分配内存空间时必须指明数组的长度 格式如下: 数组名字new 数组元素类型个数 如:boy=new float5; int age=new int10;,30,声明数组时内存情况:float boy;,0x785ba,31,创建数组后,内存情况:boy=new float5;,Boy0,Boy1,Boy2,Boy3,Boy4,32,数组元素的使用,数组元素的使用是通过下标实现的 Java的数组下标由0开始 例:boy0=100f;boy4=500f; 1。数组初始化 float boy =100f,200f,300f,400
12、f,500f,33,2。拷贝数组 当把一个数组变量拷贝给另一个变量时,两个变量都指向相同的数组Float girl=boy;,34,如果只是想把一个数组中的值拷贝给另一个变量,可用arraycopy方法。(lang包中的System类) 格式: System.arraycopy(from,fromIndex,to,toIndex,count);,35,例:int small=2,3,4,5,6,7;int big=9,8,7,6,5,4,3,2,1; System.arraycopy(small,1,big,0,3); 输出big的值为: 3,4,5,6,5,4,3,2,1,36,3。排序 调
13、用Java.util.Arrays类中的 sort方法,可对一个数组中的数字进行排序 Static void sort(数组); 例:Arrays.sort(boy);,37,4.命令行参数 每个Java应用程序都有一个带String args参数的main方法。 这个参数用来接收命令行上的参数 例:public class Message public static void main(String args),38,If (args0.equals(“-h”)System.out.print(“Hello”); Else if(args0.equals(“-g”);System.out.p
14、rint(“goodbye,”); For(int I=1;Iargs.length;I+)System.out.print(“ “+argsI); System.out.println(“!”); ,39,如果程序用如下方法调用 java Message g cruel word 则args数组内容如下:程序运行结果:goodbye,cruel world! Args参数从命令行第三个参数开始取值,Args0:,“-g”,Args1:,“Cruel”,Args2:,“World”,40,示例:MyArray.java 运行的结果为:1 0 0 00 1 0 00 0 1 00 0 0 1,4
15、1,Java的表达式由标识符、关键字、字面量、运算符、分隔符以及变量等元素构成,对这些元素执行运算并返回某个值。表达式可用于对变量赋值,也可以作为程序控制的条件。 表达式进行的运算取决于构成的各种元素的类型,以及运算的优先顺序,按先高后低,先左后右的规则进行,加了括号()的部分则首先计算。,1.2 表达式,42,表达式可以分为 算术运算(+,-,*,/,%,+,-), 关系运算(,=,&,|,), 赋值运算(=,op=), 条件运算(?:), 强制类型转换(type)expr, 其他运算( 如实例运算 instanceof,分量运算(.),内存分配运算new,方法调用运算()等)。,43,算术
16、运算对整型和浮点型数据进行操作,分为一元运算和二元(binary)运算两种。 一元运算 用法 描述+ +op 正值- -op 负值+ +op,op+ 加一- -op,op- 减一 示例:Uanry.java 运行后输出为: -2 22 44 2,1.2.1 算术运算,44,二元运算 用法 描述+ op1+op2 加- op1-op2 减* op1*op2 乘/ op1/op2 除% op1%op2 求模(取余) 例子:Binary.java 输出结果为: 30.0+27.0=57.0 30.0-27.0=3.0 30.0*27.0=810.0 30.0/27.0=1.1111112 30.0%
17、27.0=3.0,45,1.2.2 关系运算,关系运算是两个操作数的比较,主要用于整型和浮点型数据, 运算结果是个布尔型值true或false(而不是数字1或0),可用于逻辑判断。,46,关系运算 用法 描述op1op2 大于= op1=op2 大于等于= op1=op2 相等!= op1!=op2 不等 例子:Relation.java 运行结果: 1020:false 10=20:false 10!=20:true,47,布尔逻辑运算包括逻辑非 (logical negation)(!),逻辑与(&),逻辑或(|)三种,用于对布尔型数据进行运算。,1.2.3 布尔逻辑运算,48,布尔逻辑运
18、算op1 op2 !op1 op1&op2 op1|op2true true false true truetrue false false false truefalse true true false truefalse false true false false 例子:LogicOp.java输出: !true:false true&false:false true|false:true,49,位运算注意用于对整型数据进行二进制位的操作。,1.2.4 位运算,50,位运算 用法 描述 op1 按位取反& op1&op2 按位与| op1|op2 按位或 op1op2 按位异或 op1o
19、p2 op1右移op2位 op1op2 op1无符号右移op2位 示例:BitwiseOp.java 运算结果: 60:-61 60&2:0 60|2:62 602:62 602:15 602:15,51,赋值运算是把右边的表达式的值赋给左边的变量,运算顺序从右向左。 若在“=“号前加其他二元运算符op,构成op=,称为组合(combination)赋值运算。实际上是 a = a op b简写为 a op= b。,1.2.5 赋值运算,52,组合赋值 用法 描述+= op1+=op2 op1=op1+op2-= op1-=op2 op1=op1-op2*= op1*=op2 op1=op1*o
20、p2/= op1/=op2 op1=op1/op2%= op1%=op2 op1=op1%op2&= op1&=op2 op1=op1&op2|= op1|=op2 op1=op1|op2= op1=op2 op1=op1op2= op1=op2 op1=op1op2= op1=op2 op1=op1op2 例子:AssignOp.java 输出: true&=false:false true|=false:true true=false:true,53,条件运算(?:)是个三元(ternary)运算符,格式为:expression ? statement1 : statement2表达式 e
21、xpression 的布尔值为真时执行statement1,为假时执行 statement2,Statement1和statement2的数据类型要一致。 例子:TernaryOp.java 输出: 10 010 20,1.2.6 条件运算,54,1.2.7 类型转换运算,Exchange!,byte,short,int,long,char,float,double,55,造型,大多数的数值转换是遵循优先级的关系自动完成的 而有些转换则是通过造型来完成的 语法:,(转换后类型),被转换的变量名,例:double x=9.987;int nx=(int) x;转换后 nx=9 强转时,当心丢失数
22、据,56,造型,若要把一个浮点数转换成与其最接近的数(即进行四舍五入)需使用Math.round()方法(lang包Math类) 例:double x=9.987;int nx=(int)Math.round(x); 结果:nx=10,57,Java的其他运算如实例运算instanceof,分量运算,方法调用(),内存分配运算new等将在以后各章陆续出现。,1.2.8 其他运算,58,Java的控制流程(control flow)用于使程序按正确顺序逐步进行,为程序提供了运行方向。有了控制流方法,程序就可以进行选择、重复等动作。Java的控制流方法包括如下四类: 选择类(decision ma
23、king): if-else,switch 循环类(loop): for,while,do-whlie 异常处理类(exceptions): try-catch-throw 杂类(miscellaneous): break,continue,lable,return,1.3 控制流程,59,if-else流程是Java语言的基本控制方法,格式如下:if (boolean-expr) statement1; else statement2; 根据表达式boolean-expr的布尔值选择执行,为真时执行statement1语句,为假时执行statement2语句(若无else部分则不做任何事情)
24、。 例子:IfelseOp.java 输出: 1110,1.3.1 if-else流程,60,switch流程也是选择型的,适用于多于两种选择的情况,其格式如下:switch (expression) case value1: statement1;break;case value2: statement2;break;case valueN: statementN;break;default : statement; 例子:SwitchOp.java输出: op13,1.3.2 switch流程,61,1.3.3 for流程,for流程是循环类流程,其作用是重复执行称为循环体的一段程序。其格
25、式为:for (初始表达式; 结束判断; 迭代表达式) 循环体; 例子:ForOp.java 输出: 1 2 3 4 5 6 7 8 92 4 6 8 10 12 14 16 189 18 27 36 45 54 63 72 81,62,对于数组类型和收集(Collection)类,Java新增了一种叫增强的for语句的语法,可以使for循环更紧凑和易读。int a = 0,1,2,3,4,5,6,7,8,9;for (int i : a) System.out.println(“This is: “ + i);例子:EnhancedFor.java 输出:This is: 0 This is
26、: 1 This is: 2 This is: 9,1.3.4 增强的for流程,63,while流程也属于循环类,常用于循环次数不固定的场合。其格式为:初始化while (条件表达式) 循环体;迭代部分;程序首先判断条件表达式的布尔值,为假则不进入循环; 为真则进入循环体。每循环一次都要再次判断条件表达式,直到表达式为假时才退出循环。 例子:WhileOp.java 输出: 0 1 2 3 4 5 6 7 8 9,1.3.5 while流程,64,do-while流程先执行循环体一次,再判断条件表达式决定是否继续循环。其格式为:初始化do 循环体;迭代部分; while (条件表达式);进入
27、do后,即使条件表达式为假,也执行循环体一次,然后再根据条件表达式的真假决定循环或退出。 例子:DowhileOp.java 输出: 0 1 2 3 4 5 6 7 8 9,1.3.6 do-while流程,65,除了用于退出switch流程外,break还用于退出for,while,do-while等流程。其格式如下:break label;其中label(标号)是可选部分。如果没有label部分,break只退出一层程序块,即一对花括号范围。,1.3.7 break流程,66,如果希望退出多层程序块,只需在某块前加个标号,同时在 break 后面加上同一标号,就可以达到目的。这是Java对
28、break功能的扩充,见后面label部分的说明。 例子BreakOp.java 输出: 0 1 2 3 4即当i=5时循环中断了。,67,continue流程用于提前结束本次循环,即使循环体中还有其他语句未执行也不执行了,转去判断循环条件表达式,以决定继续循环或退出。其格式为:continue label;同样,label是可选部分。如果没有label,continue只结束一层循环,即所在一对花括号范围。 例子:ContinueOp.java 输出: 0 1 2 3 4 6 7 8 9当i=5时循环提前结束,没有输出,1.3.8 continue流程,68,1.3.9 label流程,la
29、bel提供了控制多层循环的方法,可与break或continue配合使用。一般是在某个循环体前加上标号,在break或continue后使用该标号,从而控制循环。其格式为:label: statement;break label(或 continue label); 为了保持程序的结构化特点,不要随意在非循环结构体语句前加标号,只限于加在循环结构前。 例子:LabelOp.java 输出:0 1 2 0 1 2 0 1 2 0 1 2 0 1 2当j=3时提前结束外层循环,进行下一次外循环。,69,1.3.10 return流程,return是指从方法中返回。其格式为:return expre
30、ssion;expression是返回一个值给调用方法的地方,如果方法声明为void型,则不用返回任何值。注意返回值类型必须与方法声明的类型一致。,70,Java没有字符串类型 用String类来创建一个字符串变量,因此字符串变量是一个类类型变量,即是一个对象 字符串常量:“123.45”,“你好”,“hello!” 声明字符串对象:String s;,1.4 字符串,71,1.4.1 String类,创建String类对象可以用串字面量: String s =“Good morning”; 它与下式等价:String s = new String(“Goog morning”);,72,获取
31、字符串的长度,使用String 类中的length()方法可以获取一个字符串的长度 String s=“I am a teacher”; String tom=“我是老师” int n1,n2; n1=s.length();n2=tom.length(); 则:n114,n2=4,73,字符串与数值的转化,java.lang包中的Integer类、Long类、Float类、Double类分别提供了相应的方法用来进行字符串与数值间的转换 转化为整形Integer.parseInt(字符串) 例: Integer.parseInt(“12345”) 再如:long x;String s=“1000
32、”;x= Long.parseLong(s);,74,转化为float型或double型,格式: Float.valueOf(String s).floatValue(); Double.valueOf(String s).doubleValue(); 例:float x; double y;String s=“23.45”;x=Float.valueOf(s).floatValue();y=Double.valueOf(s).doubleValue();,75,数值转化为字符,使用String类中定义的valueOf()方法,便可将一个数值 转换为字符串 如:float x=123.45f;
33、String s;s=String.valueOf(x);,76,字符串检索,可以用String类中的方法:indexOf(string s)indexOf(String s,int startpoint)例:String me=“I am a teacher”;tom.indexOf(“a”);/结果为2tom.indexOf(“w”,3);/结果为-1,77,获得字符串的子串,格式: substring(int startpoint); substring(int start,int end) String jerry=“I love tom”; s1=jerry.substring(2)
34、; s2=jerry.substring(2,5),78,1.4.2 StringBuilder类,StringBuilder类对象是可以修改的字符串,它除了有长度方法length()外,还有容量方法capacity()。创建StringBuilder类对象格式如下:StringBuilder strb = new StringBuilder(); / 建立空的Stringbuilder对象, 容量是16单元 可以带整型参数(即指定缓冲区大小),如:StringBuilder strb = new StringBuilder(int initCapacity); 例子:Myrever.java
35、 运行结果:abcdefg is reversed to:gfedcba,79,1.4.3 StringTokenizer类,Java早期版本用这个类来分割字符串,现在有更好的正则表达式方法和Sanner类方法。 StringTokenizer st = new StringTokenizer(“this is a test“); while (st.hasMoreTokens() System.out.println(st.nextToken(); 输出: this is a test,80,1.5 数学类,Math类提供了许多实现标准数学运算功能的方法,还有一些数学值如PI。所有的Math
36、成员都是静态的,不必为该类创建实例,直接用 Math.method(variable) 就可以调用这些方法,注意其返回类型和参数变量。 随机函数 Math.random()虽然让人捉摸不定,但也不是喜怒无常,它的返回值永远是大于等于0.0,且小于1.0的double类型的数。 例子: 运行结果:Mysin.javaSin(PI/2)=0.9999999999932537,81,1.6 正则表达式,正则表达式(Regular Expression)是功能强、灵活的文本处理工具,它用某字符串集合中各串的公共特征来描述这个字符串集。这种特征可以称为模式(pattern),利用模式处理文本比利用字符串
37、比较更有效。 java.util.regex包 主要有Pattern、Matcher、PatternSyntaxException等三个类支持正则表达式。,82,1.6.1正则表达式基础,如果想表示一个数可能是负值,可以用负号加问号放在数前,比如-?8。如果表示一位数字,可以用反斜线和d表示,应该写为d。如果表示一位数以上,正则表达式写为d+。如果表示一个数前面可能有正号或负号,应该写为-|+,其中|是逻辑或。 例子:ReguBasic.java 输出结果: true true true,83,1.6.2 正则表达式字符类,abc a, b, 或 c (简单类) abc 除了 a, b 或 c
38、外的任何字符 (非) a-zA-Z a到z, 或A到Z, 含 (范围) a-dm-p a到d, 或m到p: a-dm-p (并) a-z&def d, e或f (交) a-z&bc a到z, 除了b和c: ad-z (差) a-z&m-p a到z, 且非m到p: a-lq-z (差) 例子:CharaClass.java 输出结果: false true true,84,1.6.3 预定义字符集,. 任何字符 (不一定匹配行终止符) d 一位数字: 0-9 D 一位非数字: 0-9 s 一个空白字符: tnx0Bfr S 一个非空白字符: s w 一个词字符: a-zA-Z_0-9 W 一个非
39、词字符: w 例子:PreChara.java 输出结果: false true true,85,1.6.4 量词,量词用来说明读入文本的方式,有贪心的(Greedy)、不情愿的(reluctant)、占有的(Possessive)三种。贪心是指匹配器先读入整个输入串进行匹配,不行再减少一个字符重新匹配。不情愿是指匹配器一次只读入一个字符进行匹配,最后才会读整个字符串。占有的是指匹配器读入整个输入串进行匹配一次,不减少字符。,86,1.6.5 边界匹配符, 行的开头$ 一行的尾部b 一个词的边界B 一个非词的边界A 输入的开头G 前次匹配的尾部Z 输入的尾部,但是用于最后终止符(如果有)z 输
40、入的尾部,87,1.6.6 Pattern类,Pattern类提供了一个编译方法compile(),可接受一组标志影响模式匹配的方式。如Pattern.CANON_EQ,允许标准对等;Pattern.CASE_INSENSITIVE,允许不分大小写字母匹配;Pattern.COMMENTS,允许模式中有空白字符和注释;Pattern.MULTILINE,允许多行方式;Pattern.DOTALL,允许.代表任何字符;Pattern.LITERAL,允许模式字面解析;Pattern.UNICODE_CASE,允许也按统一码匹配;Pattern.UNIX_LINES,允许UNIX行方式。 例子:M
41、ysplit.java 输出结果:abc defg hijk lmnop qrst uv,88,1.6.7 Matcher类,Matcher类提供了解释模式和执行匹配操作的方法,如start(),end(),lookingAt(),find(),matches(),appendReplacement(StringBuffer sb, String replacement),appendTail(StringBuffer sb),replaceAll(String replacement),replaceFirst(String replacement),quoteReplacement(Str
42、ing s)等。 例子:Mymatch.java 输出结果:Match 1: 0-3 Match 2: 5-8 Match 3: 13-16 Match 4: 17-20 Match 5: 21-24,89,1.6.8 PatternSyntaxException类,这个类用于检查正则表达式模式中的语法错误,它提供了几个方法帮助查找错误,如:getDescription(),getIndex(),getPattern(),getMessage()等。,90,1.7 注解,注解(annotation)提供程序信息,可以是给编译器的信息,可以是编译时刻和部署时刻的处理,也可以是运行时刻的处理。注解
43、是用符号引导的标识,可以加在类、域、方法和其他元素前面。 比如: Author(name=“zhangsan”) class Myclass /说明类的作者 Override void mymethod() /说明该方法是重写基类同名方法而不是重载 SQLInteger Integer age; /说明该域遵循注解SQLInteger的约束,91,1.8 编译工具,Java源程序需要编译成字节码(bytecode)文件,即.class文件,然后由Java虚拟机(又叫解释器)运行。Sun公司免费提供了JDK(Java Development Toolkit),目前的版本是JDK 6,又有人称它为
44、JDK1.6.0 。,92,1.9 平台环境,要运行Java程序,需要底层操作系统、虚拟机、类库和各种配置数据,构成平台环境。还可以安装其他公司也推出的Java集成开发环境,如IBM公司的Eclipse开发环境等。,93,1.9.1 PATH和CLASSPATH,如果在Windows平台开发Java,必须设置环境变量PATH和CLASSPATH。假如JDK安装在D:jdk6文件夹中,PATH变量后添加Djdk6bin(用分号隔开)。CLASSPATH的缺省值是“.”,表示当前目录。如果类在其他地方,比如在D:javalib,要加在CLASSPATH的“.”后(用分号隔开)。,94,1.9.2
45、编译与运行,在命令提示符窗口输入编译命令和解释命令,比如运行例1.1,在后输入: javac MyArray.java 编译成功后会生成一个MyArray.class文件,这就是所谓的字节码。现在可以用java解释器运行这个class,可以不键入class后缀。 java MyArray,95,1.9.3 命令行参数,Java语言支持命令行参数(command line argument),在用解释器执行应用程序时在命令行输入一些参数给程序,使用户可以影响应用程序的操作。 Java应用程序可以接受任何数量的命令行参数,它们跟在程序名后,用空格隔开,运行系统把命令行参数送到程序的main()方法的字符串数组String args中。,96,1.9.4 Eclipse开发环境,JDK的不足之处是要在命令提示符窗口输入命令,而人们更希望使用集成开发工具。本书推荐使用Eclipse,它是开放源代码的可扩展集成开发平台,可以很方便地开发Java软件,如果加入其他插件,它的功能会不断增加。 Eclipse可以在http:/www.eclipse.org处下载,eclipse-jee-europa-fall2-win32用在Windows平台,安装它之前先要安装好JDK才行。,