由全球位网民共同编辑的总计词条文字。(
 

目录

[显示全部]


编辑本段

JAVA - 概述

JAVA

编程范型: Object-oriented, structured,
imperative
面市時間: 1990年
设计者: 升阳电脑
型态系统: Static, strong, safe, nominative
主要实作产品: Numerous
启发语言: Objective-C, C , Smalltalk, Eiffel, C#[1]
影响语言: C#, D, J#, PHP, Ada 2005
操作系统: 跨平台
Website: http://www.java.com/
Java,是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由升阳(Sun Microsystems)公司的詹姆斯·高斯林James Gosling)等人于1990年代初开发。它最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机电话闹钟烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,在1995年5月以“Java”的名称正式发布了。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

Java 编程语言的风格十分接近C 语言。继承了 C 语言面向对象技术的核心,Java舍弃了C 语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间。在 Java SE 1.5 版本中Java又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。

Java不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。不过,这同时也在一定程度上降低了 Java 程序的运行效率。但在J2SE1.4.2发布后,Java的执行速度有了大幅提升。

与传统程序不同,Sun 公司在推出 Java 之际就将其作为一种开放的技术。全球数以万计的 Java 开发公司被要求所设计的 Java 软件必须相互兼容。“Java 语言靠群体的力量而非公司的力量”是 Sun 公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。

Sun公司对Java编程语言的解释是:Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。

Java平台是基于Java语言的平台。这样的平台目前非常流行,因此微软公司推出了与之竞争的.NET平台以及模仿Java的C#语言a。

编辑本段 回目录

JAVA - 名字起源

一天,几位Java成员组的会员正在讨论给这个新的语言取什么名字,当时他们正在咖啡馆喝着Java(爪哇)咖啡,有一个人灵机一动说就叫Java怎样,这个提议得到了其他人的赞同,于是,Java这个名字就这样传开了。原来看SUN的JAVA标识没去多想,现在看看,这不就是一杯正冒着热气的咖啡吗?

编辑本段 回目录

JAVA - 历史

早期的Java

JAVA

Java平台和语言最开始只是升阳公司在1990年12开始研究的一个内部项目。升阳公司的一个叫做帕特里克·诺顿的工程师被升阳自己开发的C 和C语言编译器搞得焦头烂额,因为其中的API极其难用。帕特里克决定改用NeXT,同时他也获得了研究公司的一个叫做“Stealth 计划”的项目的机会。

“Stealth 计划”后来改名为“Green计划”,詹姆斯·高斯林和麦克·舍林丹也加入了帕特里克的工作小组。他们和其他几个工程师一起在加利福尼亚州门罗帕克市沙丘路的一个小工作室里面研究开发新技术,瞄准下一代智能家电(如微波炉)的程序设计,升阳公司预料未来科技将在家用电器领域大显身手。团队最初考虑使用C 语言,但是很多成员包括升阳的首席科学家比尔·乔伊,发现C 和可用的API在某些方面存在很大问题。

工作小组使用的是内嵌类型平台,可以用的资源极其有限。很多成员发现C 太复杂以至很多开发者经常错误使用。他们发现C 缺少垃圾回收系统,还有可移植的安全性、分布程序设计、和多线程功能。最后,他们想要一种易于移植到各种设备上的平台。

根据可用的资金,比尔·乔伊决定开发一种集C语言和Mesa语言大成的新语言,在一份报告上,乔伊把它叫做“未来”,他提议升阳公司的工程师应该在C 的基础上,开发一种面向对象的环境。最初,高斯林试图修改和扩展C 的功能,他自己称这种新语言为 C --,但是后来他放弃了。他将要创造出一种全新的语言,被他命名为“Oak”(橡树),以他的办公室外的树而命名。

就像很多开发新技术的秘密的工程一样,工作小组没日没夜地工作到了1992年的夏天,他们能够演示新平台的一部分了,包括Green操作系统,Oak的程序设计语言,类库,和其硬件。最初的尝试是面向一种类PDA设备,被命名为Star7,这种设备有鲜艳的图形界面和被称为“Duke”的智能代理来帮助用户。1992年12月3日,这台设备进行了展示。

同年11月,Green计划被转化成了“FirstPerson有限公司”,一个升阳公司的全资子公司,团队也被重新安排到了帕洛阿尔托。FirstPerson团队对建造一种高度互动的设备感兴趣,当时代华纳发布了一个关于电视机顶盒的征求提议书时(Request for proposal),FirstPerson改变了他们的目标,作为对征求意见书的响应, 提出了一个机顶盒平台的提议。但是有线电视业界觉得FirstPerson的平台给予用户过多地控制权,因此FirstPerson的投标败给了SGI。与3DO 公司的另外一笔关于机顶盒的交易也没有成功,由于他们的平台不能在电视工业产生任何效益,公司再并回升阳公司。

JAVA遭遇互联网

1994年6、7月间,在经历了一场历时三天的头脑风暴的讨论后,约翰·盖吉詹姆斯·高斯林比尔·乔伊帕特里克·诺顿韦恩·罗斯因埃里克·斯库米,团队决定再一次改变了努力的目标,这次他们决定将该技术应用于万维网。他们认为随着Mosaic浏览器的到来,因特网正在向同样的高度互动的远景演变,而这一远景正是他们在有线电视网中看到的。作为原型,帕特里克·诺顿写了一个小型万维网浏览器,WebRunner,后来改名为HotJava。

同年,Oak改名为Java。商标搜索显示,Oak已被一家显卡制造商注册,因此团队找到了一个新名字。这个名字是在很多成员常去的本地咖啡馆中杜撰出来的。名字是不是首字母缩写还不清楚,很大程度上来说不是。虽然有人声称是开发人员名字的组合:James Gosling(詹姆斯·高斯林) Arthur Van Hoff(阿瑟·凡·霍夫) Andy Bechtolsheim(安迪·贝克托克姆),或“Just Another Vague Acronym”(只是另外一个含糊的缩写)。还有一种比较可信的说法是这个名字是出于对咖啡的喜爱,所以以Java咖啡来命名。类文件的前四个字节如果用十六进制阅读的话,分别为CA FE BA BE, 就会拼出两个单词“CAFE BABE”(咖啡宝贝)。

1994年10月,HotJava和Java平台为公司高层进行演示。1994年,Java 1.0a版本已经可以提供下载,但是Java和HotJava浏览器的第一次公开发布却是在1995年3月23日SunWorld大会上进行的。升阳公司的科学指导约翰·盖吉宣告Java技术。这个发布是与网景公司的执行副总裁马克·安德森的惊人发布一起进行的,宣布网景将在其浏览器中包含对Java的支持。1996年1月,升阳公司成立了Java业务集团,专门开发Java技术。

Java近况

在流行几年之后,Java在浏览器中的地位被逐步侵蚀。它在简单交互性动画方面的用途已经完全被Adobe公司的Flash排挤,2005年Java倾向只被用于雅虎游戏那样的更为复杂的应用程序。Java同时遭受到来自微软的反对,他们决定在新版本的Internet Explorer和Windows中不再附带Java平台。

与此相反。在万维网的服务器端和手持设备上,Java变得更加流行。很多网站在前端使用JSP和其他的Java技术。

在桌面系统上,独立的Java程序还是相对少见,这是因为Java平台的运行开销较大,而许多人的电脑上没有安装Java,由于网络带宽在以前较小,下载Java曾经是个耗时的事情。但是随着计算机计算能力、网络带宽在10年中取得了很大的进步,同时虚拟机和编译器的质量得到了越高,许多应用程序得到了广泛的使用,包括:

开源软件:
NetBeans
Eclipse
JEdit
Azureus BitTorrent客户端。
JNode操作系统

闭源软件:
EIOffice(永中Office)
纯Java 3D游戏合金战士Chrome
还有许多用Java写的软件,可以在 http://www.java.com 找到。 在以下网页可以看到非常多用Java写的程序: http://java.sun.com/products/ 下面有大量用Java Swing开发的桌面Java程序 http://java.sun.com/products/jfc/tsc/sightings/ 目前Java提供以下三个版本:

Java Platform, Enterprise Edition (Java EE:Java平台企业版)
Java Platform, Standard Edition (Java SE:Java平台标准版)
Java Platform, Micro Edition (Java ME:Java平台微型版)
以上为Java各种版本的SUN公司官方中文翻译方式:http://cn.sun.com/press/jun2005/20050627-6.html

版本历史(时间表)

JAVA
1995年5月23日,Java语言诞生
1996年1月,第一个JDK-JDK1.0诞生
1996年4月,10个最主要的操作系统供应商申明将在其产品中嵌入JAVA技术
1996年9月,约8.3万个网页应用了JAVA技术来制作
1997年2月18日,JDK1.1发布
1997年4月2日,JavaOne会议召开,参与者逾一万人,创当时全球同类会议规模之纪录
1997年9月,JavaDeveloperConnection社区成员超过十万
1998年2月,JDK1.1被下载超过2,000,000次
1998年12月8日,JAVA2企业平台J2EE发布
1999年6月,SUN公司发布Java的三个版本:标准版(J2SE)、企业版(J2EE)和微型版(J2ME)
2000年5月8日,JDK1.3发布
2000年5月29日,JDK1.4发布
2001年6月5日,NOKIA宣布,到2003年将出售1亿部支持Java的手机
2001年9月24日,J2EE1.3发布
2002年2月26日,J2SE1.4发布,自此Java的计算能力有了大幅提升
2004年9月30日18:00PM,J2SE1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE1.5更名为Java SE 5.0
2005年6月,JavaOne大会召开,SUN公司公开Java SE 6。此时,Java的各种版本已经更名,以取消其中的数字“2”:J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME
2006年12月,SUN公司发布JRE6.0

编辑本段 回目录

JAVA - 语言特性

Java之所以被开发,是要达到以下五个:

应当使用面向对象程序设计方法学
应当允许同一程序在不同的计算机平台执行
应当包括内建的对计算机网络的支持
应当被设计成安全地执行远端代码
应当易于使用,并借鉴以前那些面向对象语言(如C )的长处。
Java技术主要分成几个部分:Java语言、运行环境JVM、类库。一般情况下说Java时并不区分指的是哪个部分。

面向对象
Java的特点之一就是面向对象,是程序设计方法的一种。“面向对象程序设计语言”的核心之一就是开发者在设计软件的时候可以使用自定义的类型和关联操作。代码数据的实际集合体叫做“对象”。一个对象可以想象成绑定了很多“行为(代码)”和“状态(数据)”的物体。对于数据结构的改变需要和代码进行通信然后操作,反之亦然。面向对象设计让大型软件工程的计划和设计变得更容易管理,能增强工程的健康度,减少失败工程的数量。

面向对象设计另外一个目标就是能产生很多的有关联的类,可以让软件的再开发变得简单。举例来说,很多软件工程都有同样的功能,尤其是很多应用了同一原理组织的软件工程。软件的二次开发者想自己为软件开发插件以增强功能的时候,绝对不想看到混乱的开发代码和管理计划。面向对象的目的就是不生产难懂且难以使用的代码,为软件各个功能群之间建立有效的通信通道。很多开源软件社区正在计划给软件作者提供更多的类来让软件的二次开发变得简便。

跨平台姓

JAVA
Java语言的第二个特性就是跨平台性,也就是说使用Java语言编写的程序可以在编译后不用经过任何更改,就能在任何硬件设备条件下运行。这个特性经常被称为“一次编译,到处运行”。

实现跨平台性的方法是大多数编译器在进行Java语言程序的编码时候会生成一个用字节码(Bytecode)写成的“半成品”,这个“半成品”会在Java虚拟机(解释层)的帮助下运行,虚拟机会把它转换成当前所处硬件平台的原始代码。之后,Java虚拟机会打开标准库,进行数据(图片、线程和网络)的存取工作。主要注意的是,尽管已经存在一个进行代码翻译的解释层,有些时候Java的字节码代码还是会被JIT编译器进行二次编译。

有些编译器,比如GCJ,可以自动生成原始代码而不需要解释层。但是这些编译器所生成的代码只能应用于特定平台。并且GCJ目前只支持部分的Java API。

升阳对于Java的许可是“全兼容的”,这也导致了微软和升阳关于微软的程序不支持RMI和JNI接口、并且增加特性为己所用的法律争端。升阳最终赢得了官司,获得了大约两千万美元的赔偿,法院强制要求微软执行升阳公司关于Java的许可要求。作为回应,微软不再在Windows系统中捆绑Java,最新的Windows版本,Windows Vista和Internet Explorer 7.0版本也不再提供对于Java应用程序和控件的支持。但是升阳公司和其他使用Java运行时系统的公司对于微软的操作对用户提供无偿的第三方插件和程序支持。

Java语言使用解释层最初是为了轻巧性。所以这些程序的运行效率比C语言和C 要低很多,用户也对此颇有微词。很多最近的调查显示Java的程序运行速度比几年前要高出许多,有些同样功能的程序的效率甚至超过了C 和C语言编写的程序。

Java语言在最开始应用的时候是没有解释层的,所有需要编译的代码都直接转换成机器的原始代码。这样做的后果就是获得了最佳的性能,但是程序臃肿异常。从JIT技术开始,Java的程序都经过一次转换之后才变成机器码。很多老牌的第三方虚拟机都使用一种叫做“动态编译”的技术,也就是说虚拟机实时监测和分析程序的运行行为,同时选择性地对程序所需要的部分进行编译和优化。所有这些技术都改善了代码的运行速度,但是又不会让程序的体积变得失常。

程序的轻便性事实上是软件编写很难达到的一个目标,Java虽然成功地实现了“一次编译,到处运行”,但是由于平台和平台之间的差异,所编写的程序在转换代码的时候难免会出现微小的、不可察觉的错误和意外。有些程序员对此非常头疼,他们嘲笑Java的程序不是“一次编译,到处运行”,而是“一次编译,到处调试”。

平台无关性让Java在服务器端软件领域非常成功。很多服务器端软件都使用Java或相关技术建立。

自动垃圾回收(Garbage Collection)
C 语言被用户诟病的原因之一就是大多数C 编译器不支持垃圾收集机制。通常使用C 编程的时候,程序员所创建的对象在创建时在本地堆栈上分配一块内存地址,当不需要这个对象,进行析构或者删除的时候再释放分配的内存地址。如果对象是在堆上分配的,而程序员又忘记进行地址删除,那么就会造成内存泄漏(Memory Leak)。长此以往,程序运行的时候可能会生成很多不清除的垃圾,浪费了不必要的内存空间。更糟糕的是,如果同一内存地址被删除两次的话,程序会变得不稳定,甚至崩溃。因此有经验的C 程序员都会在删除之后将指针重置为0,然后在删除之前先判断指针是否为0。

Java语言则不同,上述的情况被自动垃圾收集功能自动处理。对象的建立和放置都是在内存堆上面进行的。程序或者其他的对象可以锁定一块堆地址来进行其他对象的引用。当一个对象没有任何引用的时候,Java的自动垃圾收集机制就发挥作用,自动删除这个对象所占用的空间,释放内存以避免内存泄漏。但是内存泄漏并不是就此避免了,当程序员疏忽大意地忘记解除一个对象不应该有的引用的时候,内存泄漏仍然不可避免,不过发生的几率要比不启用垃圾收集机制的C 程序少很多。但是总体来讲,自动垃圾收集机制要安全和简单许多。

不同厂商、不同版本的JVM中的内存垃圾回收机制并不完全一样,通常越新版本的内存回收机制越快,IBM、BEA、SUN等等开发JVM的公司都曾宣称过自己制造出了世界上最快的JVM, JVM性能的世界纪录也在不断的被打破并提高。

IBM有一篇有关Java内存回收机制比不启用垃圾收集机制的C 内存处理快数倍的技术文章,可在如下网址找到:
http://www-128.ibm.com/developerworks/cn/java/j-jtp09275.html
而著名的Java技术书籍《Java编程思想》(《Thinking in Java》)也有一段论述Java内存及性能达到甚至超过C 的章节:
http://www.sdau.edu.cn/support/thinkinjava/chapter/appe.htm

但是应该注意到,C 中也可以使用“智能指针”(Smart Pointer)或者使用C 托管扩展编译器的方法来实现自动化内存释放,智能指针可以在标准类库中找到,而C 托管扩展被微软的Visual C 7.0及以上版本所支持。智能指针的优点是不需引入缓慢的垃圾收集机制,而且可以不考虑线程安全的问题,但是缺点是如果不善使用智能指针的话,性能有可能不如垃圾收集机制,而且不断地分配和释放内存可能造成内存碎片,需要手动对堆进行压缩。除此之外,由于智能指针是一个基于模板的功能,所以没有经验的程序员在需要使用多态特性进行自动清理时也可能束手无策。

当然,作为一个“负责任”的程序编撰员,在程序完结前应该手动清理不再需要的变量和物件,令效能有点提升。以Java为例,finalize方法位于 Java.Object 内,而Object 这个类是每一个类自动承继的。因此清理需要的便是覆写finalize便行了。

protected void finalize() throws Throwable{
    super.finalize();
}

当中若有任何变量要清理,可以在super.finalize() 前加上  = null; 或 . = null;

不过事实上,就算使用了 finalize(),你还是不能保证你在堆栈中所使用的空间会马上被回收,垃圾回收机制只有在你的你堆栈已经毫无空间可以使用的情况下,才会真的去进行回收的动作,因此在编程上,还是要避免内存空间的浪费。

接口和类别
Java自带了创建接口的类别,可以这样使用:

public interface Deleteable {
   void delete();
}

这段代码的意思是任何实现(implement)Deleteable接口的类别都必须实现delete()方法。每个类别对这个方法的实现可以自行定制。由此概念可以引出很多种使用方法,下面是一个类别的例子:

public class Fred implements Deleteable {
    //Must include the delete () method to satisfy the Deleteable interface
    public void delete() { //code implementation goes here
    }
    //Can also include other methods
    public void doOtherStuff() {
    }
}

在另外一个类别中,可以使用这样的代码:

public void deleteAll (Deleteable [] list) {
    for (int i = 0; i < list.length; i ) {
         list[i].delete();
    }
}

因为队列中所有的对象都可以使用delete()方法。Deleteable队列中包含Fred对象的引用,而这个类别和其他Deleteable类别在使用deleteAll()方法时候不需要进行任何改变。

之所以这样做就是为了在接口的执行和其代码之间进行区别。举例来说,一个名叫Collection的接口可以包含任何对象所需要的引入、转换和存储数据的方法,其他的类都可以使用这个接口。但是这个接口可以是一个可重定义大小的队列、一个链表或者是其他功能的集合。

这种特性其实是一种折中的办法。Java的设计者们不想让Java有多重继承的特性,因为C 的多重继承显示了这种特性的困难。Java的接口功能可以提供同样的功能,但是又不会很复杂。

编辑本段 回目录

JAVA - Java 5.0的特性

自动装箱/拆箱 (Auto-Boxing/Unboxing)
没有自动装箱/拆箱:

int int1 = 1;
Integer integer2 = new Integer(int1);
int int3 = integer2.intValue();

有自动装箱/拆箱:

int int1 = 1;
Integer integer2 = int1;     // 自动装箱
int int3 = integer2;         // 自动拆箱

泛型 (Generic Types)
泛型就像是C++的模板。原有的Collection API加上泛型支援后,增加对型别的检查,减少程序错误的机会。

没有泛型:

HashMap hm = new HashMap();
int i=1;
String tt="test";
hm.put(new Integer(i), tt);

使用Generic:

HashMap hm = new HashMap();
int i=1;
String tt = "test";
hm.put(i, tt);      // 在这里对int自动装箱成Integer,也使用了参数的型别检查

自动装箱的新功能,可能是从C#语言身上学习来的,Java 已经越来越像C#。然而Java对自动装箱/拆箱的支援,仅是利用编译器实现,在Java Bytecode 中,并无自动装箱/拆箱的操作码 (opcode)。

注释 (Annotation)
Annotation全名是Program Annotation Facility ,是Java SE 5.0的新功能。Java 的 Annotation 类似于 .NET 的属性 (Attribute)。Java 的注释是一种接口 (interface),继承自 java.lang.annotation.Annotation。Class File 则贴上 ACC_ANNOTATION 标签。

// JDK 1.4
/**
 * @todo to be implemented
 **/
void gimmeSomeLoving() {
  throw new Exception("not implemented");
}

// JDK 1.5
@todo void gimmeSomeLoving() {
  throw new Exception("not implemented");
}

枚举类型 (enum)
枚举类型也是J2SE 5.0的新功能。过去 Java 认为 enum 的关键字是不必要的功能,因为用 public static int field 就可以取代 enum,因此过去一直不用。J2SE 5.0中的 class 如果是 enum,在 class file 中会被贴上一个 ACC_ENUM 标签。

// JDK 1.4
class JavaTech {
       public static final int J2ME = 1;
       public static final int J2SE = 2;
       public static final int J2EE = 3;
}

// JDK 1.5
public enum NewJavaTech {
       J2ME, J2SE, J2EE
}

输入输出
试试用位于 java.io 包 (package) 内的BufferedReader。请紧记要 import java.io.*;。尾部"*"是指示要 import 所有位于 java.io 内的类。

import java.io.*;

public class TestRead{
   public static void main(String[] args) throws IOException{
       BufferedReader bufread = new BufferedReader(System.in);
       String str;
       System.out.print("请输入一句字串");
       str = bufread.readLine();
       System.out.println(str);
   }
}

程序码解说: import java.io.* 是把整个包“打开”,那么你便可以承继该包的类,用内里的类创建一个物件。其实 java.io.* 是缺省 import 的,不过 Eclipse 会要求 import java.io 所以功夫不可小!

public class TestRead 是宣告一个“公开”的 class(类别),而名字是TestRead 。

public static void main(String[] args) 是一个主程序。虽然是 Method ,但 main method 对于 Java 执行器来说是第一个执行程序的地方,同样离开了 main method 就等如离开了程序。main method 的宣告式是要背的,当然是有解,不过暂且不说。

BufferedReader bufread = new BufferedReader(System.in) 在此创建一个以 BufferedReader 为蓝图的物件 bufread ,bufread名字是任你定的。详细来说是第一个BufferedReader 是宣告 bufread 是一个会“存储”一个BufferedReader类的物件。new BufferedReader(System.in) 是指创建一个 BufferedReader 的物件。由于BufferedReader 需要一个输入流,因此我们指定了 System.in 给 BufferedReader。

应用程序开发接口
在Java语言中,应用程序接口(API)化身成类,并且分组成为包。每个包中包含有相关的接口和类。对于不同的平台,Java提供了不同版本的包。

API的设定由升阳公司和其他公司通过JCP(Java社群程序)决定。任何公司和个人都可以参与这个工程,对API进行设计。

2004年,IBM和BEA公司准备联合对官方的Java开源软件工程进行支持,但是2005年初,升阳公司拒绝了这个支持。

Hello World

下面这个程序显示“Hello, world!”然后结束运行:

public class HelloWorld {
  public static void main(String[] args) {
    System.out.println("Hello, world!");
  }
}

国际化

Java语言严格区分字节和字符。字符的存储格式为UCS-2,从Java 5开始支持UTF-16字符。Java的程序遂可以使用Unicode字符进行书写。

下面就是一个合法的Java程序,里面包含了中文字符作为类的名称而不是字符串,这个程序可以在编译器中运行通过。

public class 哈啰世界 {
   private string 文本 = "哈啰世界";
}

其它

编辑本段 回目录

JAVA - 深入JAVA

数据类型
任何编程语言都免不了要定义变量,JAVA也不例外。JAVA的变量声明形式如下:

type name;

其中的type是数据类型名,name指定义的该数据类型的一个具体变量。

JAVA的内置数据类型主要有如下几种:

boolean : 布尔值,仅有两个常量,true和false.
byte :字节类型值,长度8位(一个字节),取值范围是-128至127。
short :短整型值,长度16位(两个字节),取值范围是-32768至32767。
int :整型值,长度32位(四个字节),取值范围是-2147483648至2147483647
long :长整型,长度64位(八个字节),取值范围是-9223372036854775808至9223372036854775807
float :单精度IEEE754浮点数,长度32位(四个字节)。
double :双精度IEEE754浮点数,长度64位(八个字节)。
char :字符型,长度16位,支持所有的Unicode和Ascii编码。

JAVA关键字

编辑本段 回目录

JAVA - 关于Java的批评

Java试图通过新的方式解决软件编写的复杂性。很多人认为Java语言做到了它承诺的一切。但是Java并不是一门完美的语言,在编程风格、编程环境和需求方面并没有获得全球性的认可。

并不是所有的工程和环境需要企业级别的复杂性,比如一个简单的个人网站或者独自编程的程序员所写的程序。这些程序员会发现Java的复杂管理对于自己要做的程序来说过于强大了。
Java经常让那些并不是对面向对象编程很热心的程序员感到不满。
一些人觉得Java在面向对象上面做的没有Ruby和Smalltalk纯粹。但是最新出现的用Java实现的语言Groovy解决了这些问题。
作为一种已经建立的新技术,Java显然综合了很多语言的特性,比如C++C语言Python等等。一些对于Java的评论认为Java的不变性在动摇,有些人认为Java只是一种“新的COBOL"语言。

语言问题
有些程序员不喜欢原始类型(primitive type)和类(class)的分离,尤其是那些曾经使用过Smalltalk和Ruby的程序员。他们会问:“这就是一切皆对象(object)?”
事实上,JAVA语言本身只是Smalltalk的一个不完整的代替品。JAVA的流行与SUN背后的支持分不开。
Java的代码相对于其他的代码来说过于冗长,这与它的轻便化声明相违背。
Java语言在单范例程序方面非常出色。历史上的Java则在这方面做的不好。
Java是一种单层继承的语言。这也导致了程序员在试图使用多重继承时候的不便,而很多语言都可以使用这个特性。但是Java可以使用接口类,把多重继承可能导致的风险减少到最小。
Java不支持运算符重载,这是为了防止运算符重载使得代码的功能变的不清晰。但是用Java实现的语言Groovy可以进行运算符重载。
5.0版本增加了大量的基本类的支持,可以节省大量的额外编程工作。
过去Java对于文本的操作和其他语言,比如Perl和PHP相比差的较多,但Java在1.4版本时候引入了正则表达式
准确地说,JAVA不是平台无关的,它本身就是一个平台。

类库问题
使用Swing平台编写的带有GUI(图形用户界面)的程序和其他原始程序非常不同。选用AWT工具包编写程序的程序员看到的都是原始界面,而且也无法获得先进的GUI编程支持,如果使用的话,就要提供每个平台上面所需的API,这将是一项庞大的工程。Swing则是完全用Java语言所写的程序,避免了界面元素重复的问题,只使用所有平台都支持的最基本的绘图机制。但是很多用户不知道如何在Java风格和Windows风格之间进行转换,结果造成了Java程序的界面在很多程序中非常特殊。苹果电脑已经提供了优化过的Java运行时程序,包含了Mac OS X的经典Aqua界面风格。


性能问题
由于Java编译器和虚拟机的不同对Java代码的性能影响比语言本身的影响大的多,所以统一讨论Java的程序的性能经常是有误导性的。据IBM的数据,在同样的硬件上2001年时的IBM JDK版本的性能是1996年的JDK版本的十倍左右。见IBM东京研究院的数据: http://www.is.titech.ac.jp/ppl2004/proceedings/ishizaki_slides.pdf 而即使是在同一时期,不同公司的JDK和JRE的性能也不一样,比如SUN、IBM、BEA等公司都有自己开发的JDK和JRE。

Java语言的一些特性不可避免的有额外的性能代价,例如数组范围检查、运行时类型检查等等。Java程序的性能还会因为不同的动态复杂性和垃圾处理机制使用的多少而各有不同。如果JVM的实现比较优化的话,那么这些功能甚至可以增加内存分配的性能。这和总是使用STL或者托管C++的程序的情况类似。

尽管如此,仍然有许多人认为Java的性能低。这部分归因于Sun公司最初的JVM实现使用未优化的解释机制来执行字节码。一些新版本的JVM使用Just-In-Time(JIT)编译器,在加载字节码的时候将其编译成针对运行环境的本地代码来实现一些本地编译器的优化特性。Just-In-Time机制和本地编译的性能比较仍旧是一个有争议的话题。JIT编译需要很多时间,对于运行时间不长或者代码很多的大型程序并不适宜。但是不算JIT编译阶段的话,程序的运行性能在很多JVM下可以和本地编译的程序一争短长,甚至在一些计算比较密集的数值计算领域也是这样。目前,Java已经使用更先进的HotSpot技术来代替JIT技术,Java的性能有了更进一步的提升。另外,在使用-server选项运行java程序时,也可以对java进行更深入的优化,比如在运行时将调用较多的方法内联(inline)到程序中来提高运行速度,这就是所谓的“动态优化”,而本地编译器是无法做到这一点的;这也是一些java代码比对应用C/C++等语言编写的本地代码运行的更快的原因之一。微软的.NET平台也使用JIT编译器,所以也有类似问题。

Java的设计目的主要是安全性和可移植性,所以对于一些特性,比如对硬件架构和内存地址访问的直接访问都被去除了。如果需要间接调用这些底层功能的话,就需要使用JNI(Java本地接口)来调用本地代码,而间接访问意味着频繁调用这些特性时性能损失会很大,微软的.NET平台也有这样的问题。所以到目前为止,性能敏感的代码,例如驱动程序和3D视频游戏,还是大多使用本地编译,甚至直接以不直接支持面向对象的C语言或机器码编写。但最近已经有了许多用纯Java编写的3D游戏,其效果与用C语言编写的不相上下,例如“合金战士”(英文名:Chrome)。这主要是因为新版的Java 3D技术已经能像C++一样调用硬件加速,也就是使用显卡来加速,无论是C++还是Java语言写的3D游戏都是使用显卡GPU来处理,从而使得CPU可以专注于其它方面的工作。

关于Java的性能,可以参看以下文章: http://www-128.ibm.com/developerworks/cn/java/j-jtp09275.html http://www.matrix.org.cn/thread.shtml?topicId=16092&forumId=18

编辑本段 回目录

JAVA - Java运行时环境

Java运行时环境,即Java Runtime Environment,简称为JRE,是在任何平台上运行Java编写的程序都需要用到的软件。终端用户可以以软件或者插件方式得到和使用JRE。Sun公司还发布了一个JRE的更复杂的版本,叫做JDK,即Java 2 开发包,里面包含了Java需要的编译器、参考文档和调试器等。

JRE的成分:

Java的类库,包含了编译Java程序所需要的最核心文件。
  核心库文件,其中有
    数据结构的库,包括列表、字典和树等
    XML分析库
    安全方面应用库
    国际化和本地化应用库
  综合库文件,包含了程序员和其他系统通信的功能文件。
    JDBC,即Java数据库联通的API
    JNDI,即Java命名和目录接口
    RMI和CORBA用于重新分发软件
  用户界面库文件,包含:
    AWT,即抽象窗口开发包,提供了产生图形用户界面所需要的功能
    Swing库
    其他用于回访媒体文件、录音、截图的库
一个用于执行软件的Java虚拟机
插件,可以在浏览器里面使用
JWS,可以让终端用户连接到互联网
许可文件和文档

编辑本段 回目录

JAVA - 扩展和相关架构

扩展和与Java程序设计语言紧密相关的架构(按字母排序)。

Groovy ,一种用纯Java实现的脚本语言,Python的强有力竞争者
JAIN (Java API for Integrated Networks)Java综合网络应用程序开发接口
JAI,(Java Advanced Imaging)Java进阶图像
JAXP, (Java API for XML Processing) Java XML 处理 API
Java EE(原名J2EE),Java平台企业版
Java ME(原名J2ME) ,Java平台微型版为PDA和智能手机开发的移动版本
Java SE(原名J2SE),Java平台标准版
JDBC ,(Java Database Connectivity)Java数据库联通
JDMK,(Java Dynamic Management Kit)Java动态管理开发包
JDO ,(Java Data Objects)Java数据对象
JJSF,Java服务器界面
JMF,(Java Media Framework) Java媒体框架
JMI,Java元数据接口
JML ,(Java Modeling Language)Java建模软件
JMX ,(Java Management Extensions)Java管理扩展
JNDI ,(Java Naming and Directory Interface)Java命名和目录接口
JNI ,Java原始界面
JOGL,使用OpenGL的低阶三位游戏开发接口
JSML ,(Java Speech API Markup Language)Java的语音和标记语言
JSP ,(JavaServer Pages)Java服务器页面
JSF ,(JavaServer Faces)
JXTA ,P2P虚拟网络协议
Java Card
Java3D ,用于三维游戏编程的高阶应用程序开发接口
JavaSpaces
Jini ,Java网络分布计算结构
Jiro
OSGi,(Dynamic Service Management and Remote Maintenance)动态服务管理和远程控制
Rhino, 用Java实现的JavaScript语言。
Swing, Java 的图像用户界面 API
SWT, Standard Widget Toolkit, 由IBM和Eclipse基金会主导开发的开源图像用户界面API
SuperWaba ,手持设备的虚拟机程序

总的来说java已经变得越来越庞大,或许是有些臃肿,在ROR等各种新的事物的出现的情况下,java或许将会将重点集中在企业级的开发上

编辑本段 回目录

JAVA - 参见

计算机科学课程列表
JNI(Java Native Interface)Java本地接口

编辑本段 回目录

JAVA - 参考文献


Jon Byous, Java technology: The early years. Sun Developer Network, no date [ca. 1998]. Retrieved April 22, 2005.
James Gosling, A brief history of the Green project. Java.net, no date [ca. Q1/1998]. Retrieved April 22, 2005.
James Gosling, Bill Joy, Guy Steele, and Gilad Bracha, The Java language specification, second edition. Addison-Wesley, 2000. ISBN 0201310082.
James Gosling, Bill Joy, Guy Steele, and Gilad Bracha, The Java language specification, third edition. Addison-Wesley, 2005. ISBN 0321246780.
Tim Lindholm and Frank Yellin. The Java Virtual Machine specification, second edition. Addison-Wesley, 1999. ISBN 0201432943.
蔡学镛,〈从编译器与 VM 角度分析 Java2 v5.0 语言的新特色〉

编辑本段 回目录

JAVA - 外部链接

升阳公司
升阳(Sun Microsystems)公司主页(英文)
升阳公司中国主页
Java的官方网站(英文)
Java主页(英文)
Java白皮书(英文)

技术开发
http://jakarta.apache.org Apache基金会的Jakarta项目
Javaeye---深度技术社区
Matrix Java
Java研究组织
CSDN Java频道
CSDN JAVA社区
中文JAVA技术网
JAVA中文站
双子星Java开源技术门户
http://www.javaworld.com.tw/
Javawhat.com
Java resource directory, Java API Specifications, Latest Java News
Java例程网
免费网上Java书
名词解释:JavaFX
名词解释:JavaFX Mobile
Full Java Tutorial
Java 学习笔记

集成开发环境IDE
BEA Workshop – 商业软件, BEA Systems公司开发, 与BEA WebLogic服务器整合。
BlueJ – 免费软件 目前由肯特大学和迪肯大学的联合小组负责维护。
Eclipse – 免费开源软件, Eclipse Foundation开发。
IntelliJ IDEA – 商业软件, JetBrains公司开发。
JBuilder – 商业软件(有试用版), Borland公司开发。
JCreator – 商业软件(有试用版), Xinox公司开发
JDeveloper – 商业软件,Oracle Corporation公司开发, 与Oracle Application Server服务器整合。
NetBeans – 免费开源软件,NetBeans.org社区开发。
Sun Java Studio Enterprise – 商业软件(available free to members of the free Sun Developer Network), Sun Microsystems公司开发。
WebSphere Developer & Development Studio – 商业软件, IBM开发, 与WebSphere Application Server服务器整合。

一般应用
升阳公司的新闻组
维基Java
Java基础应用

Java历史
Java的早年
绿色计划概要
Java传奇
Java历史

Java评论
Java Cover
Java真烂
Java的阴暗面

编辑本段 回目录

JAVA - 参考资料

维基百科

→ 如果您认为本词条还有待完善,请编辑词条 收藏词条至个人空间

开放分类: Java 手机 数码 程序设计 程序设计语言 编程语言 编程软件 计算机科学 软件工程 软件技术 面向对象语言 我来补充

所属分类: Java   手机   数码   程序设计   程序设计语言   编程语言   编程软件   计算机科学   软件工程   软件技术  

"JAVA"维吧(2)个主题进入维吧>> 我来发言>>

点击 回复 标题 作者 时间 最后回复
13 0 前景 邂逅青山 08-09-04 16:27:24 邂逅青山
27 0 Java学习心得 sky2008 08-09-01 16:56:14 sky2008
254 3 艾克司令对“JAVA”的评论 艾克司令 08-09-01 16:44:02 sky2008
89 0 aldactone online 匿名用户 08-04-20 06:54:57 匿名用户

词条基本信息

查看贡献者>> 查看版本>>

最大贡献者

最新编辑者

最新专家点评

暂无专家发言

相关词条

地震后的汶川
风景秀丽的汶川
奥运知识比拼