JDK(Java Developer’s Kit),Java开发者工(gōng)具包,是SUN公司(后被Oracle公司收购)提供(gòng)的基础Java语(yǔ)言开发工具,该工(gōng)具软件包(bāo)含Java语言的编译工具、运行(háng)工具以及执(zhí)行(háng)程序的环(huán)境(即JRE)。 JDK现在是一个开源、免费的工具(jù)。JDK是其它(tā)Java开发工具的基础,也就是说,在安装其它开(kāi)发工具以前,必须首(shǒu)先安装JDK。
Java JDK1.5是(shì)整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的(de)类(lèi)库(rt.jar), SUN公司不断对它(tā)进行(háng)升级(jí),发布了不同(tóng)的版本,jdk1.5 是Sun公司后来发行的版本也就是jdk5.0(JDK1.5 更名后)
1、优势是(shì)运行在Java SE 6中的(de)应用
2、在服(fú)务器桌面上(shàng)运行得更(gèng)快(kuài)的应(yīng)用程序(xù)
3、新的动态连(lián)接’简化故障诊(zhěn)断
4、扩(kuò)大(dà)的Solaris DTrace的支(zhī)持(chí)提供了(le)额外(wài)的(de)价值在Solaris
5、改进(jìn)的’native’的外观设计风格,Solaris操作(zuò)系统,Linux和Windows
6、第一个Java平台为Windows Vista全面支持
7、在提(tí)高效(xiào)益的开发(fā)环(huán)境,以Sun的Java SE 6中(zhōng)
8、JavaScript的集(jí)成平台,包括与脚本语言的(de)框架扩展为Ruby,Python和其他语言的支持
9、总重量轻(qīng)的网络平台服务,开箱即用
10、简(jiǎn)化的GUI设计(jì)和扩大本地平台支持
11、全(quán)部JDBC4实施提供更好的(de)支(zhī)持(chí)XML的数据库
12、Java的数据(jù)库包含了JDK,自由(yóu)使用和(hé)部署Java数(shù)据库
13、全部支持的NetBeans IDE 5.5中
14、Sun开发(fā)者提供的服务,帮助建立更强大(dà)的应用程(chéng)序
1.泛型(Generic)
C++通过模板技术可以指定(dìng)集合的元(yuán)素类型,而Java在1.5之前一直没有相对应的(de)功能。一个(gè)集合(hé)可以放任何类型的对象,相应地(dì)从集合里(lǐ)面拿对象的时候(hòu)我们(men)也(yě)不(bú)得(dé)不对他们进行强制得类型转换。1.5引(yǐn)入了(le)泛型,它允许指(zhǐ)定集合里元素的类型(xíng),这样(yàng)你可(kě)以得到强类型在编译时刻进行类型检查的好处。
Collection c = new ArrayList();
c.add(new Date());
编译器(qì)会给(gěi)出一(yī)个错误(wù),
add(java.lang.String) in java.util.Collection cannot be applied to (java.util.Date)
2.For-Each循环
For-Each循(xún)环(huán)得加入(rù)简化了集合(hé)的遍历(lì)。假设我们要遍历一个(gè)集合对其中的元素进行一些处理。典(diǎn)型的代码(mǎ)为:
void processAll(Collection c){
for(Iterator i=c.iterator(); i.hasNext();){
MyClass myObject = (MyClass)i.next();
myObject.process();
}
}
使用For-Each循(xún)环,我们(men)可以(yǐ)把代码改写成,
void processAll(Collection c){
for (MyClass myObject :c)
myObject.process();
}
这段代码要比上面清晰(xī)许多,并且避(bì)免(miǎn)了强制类型转换(huàn)。
3.自动装包/拆包(Autoboxing/unboxing)
自动装包/拆(chāi)包大大方便了基本类型数(shù)据和它们包(bāo)装类地使用。
自动装包:基本类(lèi)型自动转为包装类.(int >> Integer)
自动拆包:包装类自动转为(wéi)基本类型(xíng).(Integer >> int)
在JDK1.5之前,我们总是对集(jí)合不能存放基本类型而耿耿于怀(huái),现在自(zì)动转换机制解决了我们(men)的问题。
int a = 3;
Collection c = new ArrayList();
c.add(a);//自动转(zhuǎn)换成Integer.
Integer b = new Integer(2);
c.add(b + 2);
这里Integer先自动转换(huàn)为int进行(háng)加法运算,然后(hòu)int再次转换为(wéi)Integer.
4.枚举(Enums)
JDK1.5加入了(le)一个全新类型的“类(lèi)”-枚(méi)举类型。为此JDK1.5引入了一(yī)个新关键字enmu. 我们可以这样来定义一个枚举类(lèi)型。
public enum Color
{
Red,
White,
Blue
}
然后可以这(zhè)样来(lái)使用Color myColor = Color.Red.
枚举类型还提(tí)供了两个有用的(de)静(jìng)态方(fāng)法values()和valueOf(). 我们可以很方便地使用它们,例如
for (Color c : Color.values())
System.out.println(c);
5.可变参数(Varargs)
可(kě)变参数使程序员可以声明一个接受可变数目参数的方(fāng)法。注意,可变参数必须是函数声明中(zhōng)的最后一(yī)个参数(shù)。假设我(wǒ)们(men)要写一个简单的方法打(dǎ)印一(yī)些对象,
util.write(obj1);
util.write(obj1,obj2);
util.write(obj1,obj2,obj3);
…
在JDK1.5之前,我们可以用重载来实现(xiàn),但是(shì)这样就需要写(xiě)很多(duō)的(de)重载函数,显得不是(shì)很(hěn)有效。如果使用可变(biàn)参数的话(huà)我们只需(xū)要一个函数就行了
public void write(Object... objs) {
for (Object obj: objs)
System.out.println(obj);
}
在引入(rù)可变参数(shù)以后,Java的(de)反射(shè)包也更加方(fāng)便使用了。对于c.getMethod("test", new Object[0]).invoke(c.newInstance(), new Object[0])),
现(xiàn)在我们可以这样写了(le)c.getMethod("test").invoke(c.newInstance()),这样的代码比原来清楚了很多。
6.静态导入(Static Imports)
要使用用静态成员(方法和(hé)变量)我们必须给出提供(gòng)这个方法的类。使用静态导(dǎo)入可以使被(bèi)导入类的所有静态变量和静态方法(fǎ)在当前类直接可见(jiàn),使用这(zhè)些静态(tài)成员无需再给出他们的类名。
