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