为什么80%的码农都做不了架构师?>>>
简介
Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
语言特征
Java编程语言的风格十分接近C语言、C++语言。Java是一个纯粹的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
Java不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的性能。
编辑Java源代码可以使用任何无格式的纯文本编辑器,在Windows操作系统上可以使用微软记事本(Notepad)、EditPlus等程序,在Linux平台上可使用vi工具等。
在记事本中输入如下代码:
public class HelloWorld {
//Java程序的入口方法,程序将从这里开始执行
public static void main(String[] args){
//向控制台打印一条语句
System.out.println("HelloWorld!");
}
}
编辑上面的Java文件时,注意程序中粗体字标识的单词,Java程序严格区分大小写。将上面文本保存为 HelloWorld.java,该文件就是Java程序的源程序。编写好Java程序的源代码后,接下来应该编译该Java源文件来生成字节码了。
主要特性
Java语言是易学的。Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,而是引用。并提供了自动的废料收集,使得程序员不必为内存管理而担忧。
Java语言是强制面向对象的。
Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。
Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
Java语言是健壮的。Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。
Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。
Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。
Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。[9]
Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。
Java是性能略高的。与那些解释型的高级脚本语言相比,Java的性能还是较优的。
Java语言是原生支持多线程的。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable)的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。
Java语言是动态的。Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。
差异
熟悉C语言和C++语言的读者一定想搞清楚这个问题,实际上,Java确实是从C语言和C++语言继承了许多成份,甚至可以将Java看成是类C语言发展和衍生的产物。比如Java语言的变量声明,操作符形式,参数传递,流程控制等方面和C语言、C++语言完全相同。尽管如此,Java和C语言,C++语言又有许多差别,主要表如下几个方面:
Java中对内存的分配是动态的,它采用面向对象的机制,采用运算符new为每个对象分配内存空间,而且,实际内存还会随程序运行情况而改变。程序运行中 Java系统自动对内存进行扫描,对长期不用的空间作为”垃圾”进行收集,使得系统资源得到更充分地利用.按照这种机制,程序员不必关注内存管理问题,这使Java程序的编写变得简单明了,并且避免了由于内存管理方面的差错而导致系统出问题。而C语言通过malloc()和free()这两个库函数来分别实现分配内存和释放内存空间的,C++语言中则通过运算符new和delete来分配和释放内存。在C和C++这种机制中,程序员必须非常仔细地处理内存的使用问题。一方面,如果对己释放的内存再作释放或者对未曾分配的内存作释放,都会造成死机;而另一方面,如果对长期不用的或不再使用的内存不释放,则会浪费系统资源,甚至因此造成资源枯竭。
Java不在所有类之外定义全局变量,而是在某个类中定义一种public静态的变量来完成全局变量的功能。
Java不用goto语句,而是用try-catch-finally异常处理语句来代替goto语句处理出错的功能。
Java不支持头文件,而C语言和C++语言中都用头文件来声明类的原型、全局变量、库函数等,这种采用头文件的结构使得系统的运行维护相当繁杂。
Java不支持宏定义。Java只能使用关键字final来定义常量。
Java对每种数据类型都分配固定长度。比如,在Java中,int类型总是32位的,而在C语言和C++语言中,对于不同的平台,同一个数据类型分配不同的字节数,同样是int类型,在PC机中为二字节即16位,而在VAX-11中,则为32位。这使得C语言造成不可移植性,而Java则具有跨平台性(平台无关性)。
类型转换不同。在C语言和C++语言中,可通过指针进行任意的类型转换,常常带来不安全性,而在Java中,运行时系统对对象的处理要进行类型相容性检查,以防止不安全的转换。
结构和联合的处理。Java中根本就不允许类似C语言的结构体(struct)和联合体(union)包含结构和联合,所有的内容都封装在类里面。
Java不再使用指针。指针是C语言和C++语言中最灵活,也最容易产生错误的数据类型。由指针所进行的内存地址操作常会造成不可预知的错误,同时通过指针对某个内存地址进行显式类型转换后,可以访问一个C++中的私有成员,从而破坏安全性。而Java用“引用”的方式,对指针进行完全地控制,程序员不能直接进行任何指针操作。
避免平台依赖。Java语言编写的类库可以在其它平台的Java应用程序中使用,而不像C++语言必须运行于单一平台。
在B/S开发方面,Java要远远优于C++。
优劣势
优势:Java适合团队开发,软件工程可以相对做到规范。由于Java语言本身的极其严格语法的特点,Java语言无法写出结构混乱的程序。这将强迫程序员的代码软件结构的规范性。这是一个很难比拟的优势。
劣势:J2EE的架构很完美,第一版软件可以做满意,但是很不适合互联网模式的持续不断修改。互联网软件工程管理上的不足,持续的修修补补导致架构的破坏。
主要服务
JDBC(Java Database Connectivity)提供连接各种关系数据库的统一接口,作为数据源,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯Java API 编写数据库应用程序,同时,JDBC也是个商标名。
EJB(Enterprise JavaBeans)使得开发者方便地创建、部署和管理跨平台的基于组件的企业应用。
Java RMI(Java Remote Method Invocation)用来开发分布式Java应用程序。一个Java对象的方法能被远程Java虚拟机调用。这样,远程方法激活可以发生在对等的两端,也可以发生在客户端和服务器之间,只要双方的应用程序都是用Java写的。
Java IDL(Java Interface Definition Language) 提供与CORBA(Common Object Request Broker Architecture)的无缝的互操作性。这使得Java能集成异构的商务信息资源。
JNDI(Java Naming and Directory Interface)提供从Java平台到的统一的无缝的连接。这个接口屏蔽了企业网络所使用的各种命名和目录服务。
JMAPI(Java Management API)为异构网络上系统、网络和服务管理的开发提供一整套丰富的对象和方法。
JMS(Java Message Service)提供企业消息服务,如可靠的消息队列、发布和订阅通信、以及有关推拉(Push/Pull)技术的各个方面。
JTS(Java transaction Service)提供存取事务处理资源的开放标准,这些事务处理资源包括事务处理应用程序、事务处理管理及监控。
JMF(Java Media Framework API),她可以帮助开发者把音频、视频和其他一些基于时间的媒体放到Java应用程序或applet小程序中去,为多媒体开发者提供了捕捉、回放、编解码等工具,是一个弹性的、跨平台的多媒体解决方案。
Annotation(Java Annotation),在已经发布的JDK1.5(tiger)中增加新的特色叫Annotation。Annotation提供一种机制,将程序的元素如:类,方法,属性,参数,本地变量,包和元数据联系起来。这样编译器可以将元数据存储在Class文件中。这样虚拟机和其它对象可以根据这些元数据来决定如何使用这些程序元素或改变它们的行为。
在Java技术中,值得关注的还有JavaBeans,它是一个开放的标准的组件体系结构,它独立于平台,但使用Java语言。一个JavaBean是一个满足JavaBeans规范的Java类,通常定义了一个现实世界的事物或概念。一个JavaBean的主要特征包括属性、方法和事件。通常,在一个支持JavaBeans规范的开发环境(如Sun Java Studio 和IBM VisualAge for Java)中,可以可视地操作JavaBean,也可以使用JavaBean构造出新的JavaBean。JavaBean的优势还在于Java带来的可移植性。EJB (Enterprise JavaBeans) 将JavaBean概念扩展到Java服务端组件体系结构,这个模型支持多层的分布式对象应用。除了JavaBeans,典型的组件体系结构还有DCOM和CORBA,关于这些组件体系结构的深入讨论超出了本书的范围。
JavaFX Sun刚刚发布了JavaFX技术的正式版,它使您能利用JavaFX 编程语言开发富互联网应用程序(RIA)。JavaFX Script编程语言(以下称为JavaFX)是Sun微系统开发的一种declarative,staticallytyped(声明性的、静态类型)脚本语言。JavaFX技术有着良好的前景,包括可以直接调用Java API的能力。因为JavaFXScript是静态类型,它同样具有结构化代码、重用性和封装性,如包、类、继承和单独编译和发布单元,这些特性使得使用Java技术创建和管理大型程序变为可能。
JavaFX从它2007年发布以来,表现一直差强人意。Oracle收购了Sun之后,在JavaFX中投入了大量的精力进行推广和更新。JavaFX比较出名的应用应该是在2010年温哥华冬奥会上,调整了JavaFX中的很多概念,以及重新设计和实现了很多重要组件之后,得到的就是现在的JavaFX 2.0。JavaFX 2.0的beta版已经发布,正式版则定于2010年第3季度发布。JavaFX 2.0的新特性使得开发人员应该需要重新审视它在RIA开发领域中的位置。在很多情况下,JavaFX 2.0也会是不错的选择。
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入
管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。
JPA(Java Persistence API),JPA通过JDK 5.0注解或XML(标准通用标记语言的子集)描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
JSP(Java Server Pages)是由Sun Microsystems倡导、许多参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
框架服务
Spring Framework【Java开源J2EE框架】
Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。
Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的Inversion of Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他O/R mapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的 aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器集成的强大而灵活的MVCWeb框架。【SpringIDE:Eclipse平台下一个辅助开发插件】。
WebWork 【Java开源Web框架】
WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE Web框架。WebWork目前最新版本是2.1,WebWork2.x前身是Rickard Oberg开发的WebWork,但WebWork已经被拆分成了Xwork1和WebWork2两个项目。Xwork简洁、灵活功能强大,它是一个标准的Command模式实现,并且完全从web层脱离出来。Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL – the Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。WebWork2建立在Xwork之上,处理HTTP的响应和请求。WebWork2使用ServletDispatcher将HTTP请求的变成Action(业务层Action类),session(会话)application(应用程序)范围的映射,request请求参数映射。WebWork2支持多视图表示,视图部分可以使用JSP,Velocity,FreeMarker,JasperReports,XML等。在WebWork2.2中添加了对AJAX的支持,这支持是构建在DWR与Dojo这两个框架的基础之上。【EclipseWork:用于WebWork辅助开发的一个Eclipse插件】
Struts【Java开源Web框架】
Struts是一个基于SunJ2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。【StrutsIDE:用于Struts辅助开发的一个Eclipse插件】
Hibernate 【Java开源持久层框架】
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。Eclipse平台下的Hibernate辅助开发工具:【Hibernate Synchronizer】【MiddlegenIDE】
JDiy 【Java极速开发框架. 开源】
JDiy是一款java极速开发框架,无需ORM,极少的代码便可以完成数据库的CRUD(增删改查);
可同时用于javaEE或者javaSE开发环境;完美支持各大主流数据库,如:MySQL, SQL Server, Oracle, DB2, PostgreSQL,SQLite;
同时JDiy内置一套精简而不失强大的智能开发平台(开发者登录后,随心所欲地零代码生成网站管理系
JFinal【Java极速WEB+ORM框架】
jfinal是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!主要特点1.MVC架构,设计精巧,使用简单 2.遵循COC原则,零配置,无xml 3.独创Db + Record模式,灵活便利 4.ActiveRecord支持,使数据库开发极致快速 5.自动加载修改后的java文件,开发过程中无需重启web server 6.AOP支持,拦截器配置灵活,功能强大 7.Plugin体系结构,扩展性强 8.多视图支持,支持FreeMarker、JSP、Velocity9.强大的Validator后端校验功能 10.功能齐全,拥有struts2的绝大部分功能 11.体积小仅218K,且无第三方依赖
Quartz 【Java开源Job调度】
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或EJBs。Quartz的最新版本为Quartz 1.5.0。
Velocity 【Java开源模板引擎】
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity也可以为Turbine web开发架构提供模板服务(template service)。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。【VeloEclipse :Velocity在Eclipse平台下的一个辅助开发插件】
IBATIS 【Java开源持久层框架】
使用ibatis提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate 会自动生成SQL 语句,而ibatis 则要求开发者编写具体的SQL语句。相对Hibernate等“全自动”ORM机制而言,ibatis 以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。作为“全自动”ORM 实现的一种有益补充,ibatis 的出现显得别具意义。
Compiere ERP&CRM 【Java开源ERP与CRM系统】
Compiere ERP&CRM为全球范围内的中小型企业提供综合型解决方案,覆盖从客户管理、供应链到财务管理的全部领域,支持多组织、多币种、多会计模式、多成本计算、多语种、多税制等国际化特性。易于安装、易于实施、易于使用。只需要短短几个小时,您就可以使用申购-采购-发piao-付款、报价-订单-发piao-收款、产品与定价、资产管理、客户关系、供应商关系、员工关系、经营业绩分析等强大功能了。
Apache MINA 【java开源socket框架】
ApacheMINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的网络应用程序。它提供了一个通过java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的事件驱动的异步API。
开发工具
IntelliJ IDEA【Java开发工具】
IntelliJ IDEA是JetBrains的产品,比老一代Java开发工具Eclipse更漂亮,更智能。Google官方Android开发工具Android Studio就是基于intellij IDEA开发的。Intellij IDEA拥有出色的界面设计,使用Darculah黑色界面主题会让你爱不释手。在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计等方面的功能可以说是超常的。IntelliJ IDEA分为商业版本,个人版本,与community社区版本。其中,community社区版本是免费的,但是功能性并不弱,对于学习者和个人开发者来说完全足够了。
Eclipse 【Java开源开发工具】
Eclipse平台是IBM向开放源码社区捐赠的开发框架,它之所以出名并不是因为IBM宣称投入开发的资金总数 —4千万美元,而是因为如此巨大的投入所带来的成果:一个成熟的、精心设计的以及可扩展的体系结构。
NetBeans【Java开源开发工具】
NetBeans IDE 是一个为软件开发者提供的自由、开源的集成开发环境。您可以从中获得您所需要的所有工具,用Java、C/C++ 甚至是Ruby 来创建专业的桌面应用程序、企业应用程序、web 和移动应用程序。此IDE 可以在多种平台上运行,包括Windows、Linux、Mac OS X以及Solaris;它易于安装且非常方便使用。
XPlanner【Java开源项目管理】
XPlanner 一个基于Web的XP团队计划和跟踪工具。XP独特的开发概念如iteration、user stories等,XPlanner都提供了相对应的的管理工具,XPlanner支持XP开发流程,并解决利用XP思想来开发项目所碰到的问题。XPlanner特点包括:简单的模型规划,虚拟笔记卡(Virtual note cards),iterations、user stories与工作记录的追踪,未完成stories将自动迭代,工作时间追踪,生成团队效率,个人工时报表,SOAP界面支持。
HSQLDB【Java开源DBMS数据库】
HSQLDB(Hypersonic SQL)是纯Java开发的关系型数据库,并提供JDBC驱动存取数据。支持ANSI-92 标准SQL语法。而且他占的空间很小。大约只有160K,拥有快速的数据库引擎。
Liferay【Java开源Portal门户】
代表了完整的J2EE应用,使用了Web、EJB以及JMS等技术,特别是其前台界面部分使用Struts 框架技术,基于XML的portlet配置文件可以自由地动态扩展,使用了Web Services来支持一些远程信息的获取,使用Apache Lucene实现全文检索功能。
JetSpeed 【Java开源Portal门户】
Jetspeed是一个开放源代码的企业信息门户(EIP)的实现,使用的技术是Java和XML。用户可以使用浏览器,支持WAP协议的手机或者其它的设备访问Jetspeed架设的信息门户获取信息。Jetspeed扮演着信息集中器的角色,它能够把信息集中起来并且很容易地提供给用户。
JOnAS 【Java开源J2EE服务器】
JOnAS是一个开放源代码的J2EE实现,在ObjectWeb协会中开发。整合了Tomcat或Jetty成为它的Web容器,以确保符合Servlet 2.3和JSP 1.2规范。JOnAS服务器依赖或实现以下的Java API:JCA、JDBC、JTA 、JMS、JMX、JNDI、JAAS、JavaMail。
JFox3.0 【Java开源J2EE服务器】
JFox是Open Source Java EE Application Server,致力于提供轻量级的Java EE应用服务器,从3.0开始,JFox提供了一个支持模块化的MVC框架,以简化EJB以及Web应用的开发! 如果您正在寻找一个简单、轻量、高效、完善的Java EE开发平台,那么JFox正是您需要的。
Java IDE
当今最流行的是IntelliJ IDEA、Eclipse、Myeclipse、Jbuilder、Jdeveloper、Netbeans、JCreator等。
JDK
JDK是由一套独立程序构成的集合,每个程序都是从命令行调用的,用于开发和测试Java程序。除了JDK,还可以使用别的Java开发工具。
架构设计编辑
概念
软件架构作为一个概念,体现在技术和业务两个方面。
从技术角度来说:软件架构随着技术的革新不断地更新其内容,软件架构建立于当前技术和一些基本原则的基础之上。
基本原则:分层原则、模块化原则、接口实现分离原则、细节隐藏原则、依赖倒置原则
平台构架
平台
Java平台由Java虚拟机(Java Virtual Machine)和Java应用编程接口(Application ProgrammingInterface、简称API)构成。Java应用编程接口为此提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。Java应用[10] 编程接口已经从1.1x版发展到1.2版。常用的Java平台基于Java1.5,最近版本为Java1.8。
Java分为三个体系JavaSE(Java2 Platform Standard Edition,java平台标准版),JavaEE(Java 2 Platform,Enterprise Edition,java平台企业版),JavaME(Java 2 Platform Micro Edition,java平台微型版)。
Java SE
Java SE(Java Platform,Standard Edition)。Java SE 以前称为J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的Java应用程序。Java SE 包含了支持Java Web 服务开发的类,并为Java Platform,Enterprise Edition(Java EE)提供基础。
Java EE
Java EE(Java Platform,Enterprise Edition)。这个版本以前称为J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在Java SE 的基础上构建的,它提供Web 服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和Web 2.0 应用程序。
Java ME
Java ME(Java Platform,Micro Edition)。这个版本以前称为J2ME,也叫K-JAVA。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。
发展前景编辑
自从Sun被甲骨文收购以后,Java的发展前景就变得扑朔迷离起来,很多程序开发者都感到很迷惑。2010年4月9日,被称为Java之父的詹姆斯·高斯林又在个人博客上宣布离开Oracle,这一事件更为Java的前景增加了一层迷雾。但是在进入5月份之后,一切开始变得明朗起来。
在Oracle的活动发布网站上,连续发布了多个关于Java的推广活动。5月12日,Oracle主要产品负责人Dave Hofert将大谈对JavaSE商业应用的改进和革新。根据宣传资料,在这次演讲中,DaveHofert将提到以下问题:商业版与社区版本之间平台支持的差异。如何获得专家帮助,以帮助企业增强其Java应用。对于旧版本的安全修补问题。可使用的发布工具和更新。6月18、19、20、27日,将分别在赫尔辛基、斯图加特、布达佩斯、伦敦举行Oracle、Sun专家与用户见面会,在见面会上与用户一起探讨Java的发展路线。主要讨论的问题包括Oracle将如何继续投资和改进Java技术,并且还会向用户通报JavaSE、JavaME专家团队的最新消息、JavaFX和JDK7最新的消息,以及OracleBerkeley DB的相关信息。5月3日,已经离开Oracle近一个月的Java之父詹姆斯·高斯林在他的博客上表达了对NetBeans 6.9 和 FX1.3发布的关心。这两个项目最新版本的发布,可以证明Oracle已经开始兑现当初的承诺。詹姆斯·高斯林在其早期的博客中,也透露了不会放弃Java事业,只是需要解决一些与Oracle之间的法律问题。这一切迹象表明,Oracle绝对不会轻易放弃Java这块巨大的蛋糕,并且Oracle也开始逐渐学会了对开源社区的尊重。首先在JDK的商业版本方面,Oracle将会继续深入挖掘Java的商业利益,与其固有产品进行更深入的整合。在社区版本方面,Oracle将与Java开发者一起探讨和研发Java的技术。这里需要特别提到的一个产品是Oracle BerkeleyDB,该产品是Oracle一直支持的一个开源非关系数据库产品,在NoSQL大行其道的今天,如果Oracle能够将BerkeleyDB与Java进行深入整合,将会为Java带来更多的活力和生命。从詹姆斯·高斯林的表现来看,他似乎与Oracle之间已经达成某种谅解,并且有进一步合作的可能性。
贡献及影响
1991年,Sun的James Gosling,Bill Joe等人,为电视、控制家用电器的交互操作开发了一个Oak(橡树)软件,他是Java的前身。
当时,Oak并没有引起人们的注意,直到1994年,随着互联网和3W的飞速发展,他们用Java编制了HotJava浏览器,得到了Sun首席执行官Scott McNealy的支持,得以研发和发展。由于Oak商标已经被Oak Technology注册,1995年Oak短暂更名为Green,最后更名为Java。Java的得名还有段小插曲呢,一天,Java小组成员正在喝咖啡时,议论给新语言起个什么名字的问题,有人提议用Java(Java是印度尼西亚盛产咖啡的一个岛屿),这个提议得到了其他成员的赞同,于是就采用Java来命名此新语言。很快Java被工业界认可,如IBM Microsoft.DEC等购买了Java的使用权,并被美国杂志PC Magazine评为1995年十大优秀科技产品。从此,开始了Java应用的新篇章。
Java的诞生是对传统计算机模式的挑战,对计算机软件开发和软件产业都产生了深远的影响:
软件4A目标要求软件能达到任何人在任何地方在任何时间对任何电子设备都能应用。这样能满足软件平台上互相操作,具有可伸缩性和重用性并可即插即用等分布式计算模式的需求。
基于构建开发方法的崛起,引出了CORBA国际标准软件体系结构和多层应用体系框架。在此基础上形成了Java.2平台和.NET平台两大派系,推动了整个IT业的发展。
对软件产业和工业企业都产生了深远的影响,软件从以开发为中心转到了以服务为中心。中间提供商,构件提供商,服务器软件以及咨询服务商出现。企业必须重塑自我,B2B的电子商务将带动整个新经济市场,使企业获得新的价值,新的增长,新的商机,新的管理。
对软件开发带来了新的革命,重视使用第三方构件集成,利用平台的基础设施服务,实现开发各个阶段的重要技术,重视开发团队的组织和文化理念,协作,创作,责任,诚信是人才的基本素质。
Java模拟器
Java手机游戏模拟器主要针对诺基亚S60系列手机以及其他大屏手机(小屏游戏也可运行,但不能全屏显示),是一款非常简单而且实用的JAVA游戏模拟器,可以正常运行绝大部分JAVA手机游戏!注:暂不支持游戏后缀名为sis的游戏。程序的使用是傻瓜式的,在电脑上安装好以后,所有的游戏jar文件都会和模拟器相关连,直接双击游戏jar文件就可以进入模拟器玩游戏啦!电脑的小数字键盘和方向键就可以直接控制游戏,与模拟器的按键相对应,当然也可以用鼠标直接点击控制。
虚拟机
Java虚拟机(Java Virtual Machine) 简称JVM,Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。
引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。
字节码校验器,类加载器,垃圾回收机制(人为不可控制,优先级别最低)。
内存模型
在处理器层面上,内存模型定义了一个充要条件,“让当前的处理器可以看到其他处理器写入到内存的数据”以及“其他处理器可以看到当前处理器写入到内存的数据”。有些处理器有很强的内存模型,能够让所有的处理器在任何时候任何指定的内存地址上都可以看到完全相同的值。而另外一些处理器则有较弱的内存模型,在这种处理器中,必须使用内存屏障(一种特殊的指令)来刷新本地处理器缓存并使本地处理器缓存无效,目的是为了让当前处理器能够看到其他处理器的写操作或者让其他处理器能看到当前处理器的写操作。这些内存屏障通常在lock和unlock操作的时候完成。内存屏障在高级语言中对程序员是不可见的。
相关消息
在宣布修正Java严重0day漏洞的消息发出一天后,甲骨文发布了Java SE 7u11更新,它包含了安全漏洞CVE-2013-0422的补丁,同时也改变了默认的Java安全级别设置,任何未签名的Java Applet或Java Web Start应用程序运行时总是会被提示,这样可以防止恶意应用被下载,对用户来说这可能会带来的影响是需要多确认一下。
其他应用编辑
Android是第一个内置支持Java的操作系统,
Android应用程序使用Java语言编写。Android开发水平的高低很大程度上取决于Java语言核心能力是否扎实。另外一方面,3G应用往往会和企业级应用相互结合。因此,在3G—Android课程体系中将Android课程与Java EE课程紧密结合,以Android课程为主,以Java EE课程为辅,配合真实的企业级项目,不但可以深入掌握基于Android平台的智能手机开发技术,更重要的是还系统掌握了智能移动终端与Java EE服务器端相结合的诸多领域商业的应用。
Java试图通过新的方式解决软件编写的复杂性。很多人认为Java语言做到了它承诺的一切。但是Java并不是一门完美的语言。
整体性
并不是所有的工程和环境需要企业级别的复杂性,比如一个简单的个人网站或者独自编程的程序师所写的程序。这些程序师会发现Java的复杂管理对于自己要做的程序来说过于强大了。一些人觉得Java在面向对象上面做的没有Ruby和Smalltalk纯粹。但是最新出现的用Java实现的语言Groovy解决了这些问题。
作为一种已经创建的新技术,Java显然综合了很多语言的特性,比如C++、C语言、Python等等。一些对于Java的评论认为Java的不变性在动摇。
语言问题
有些程序师不喜欢原始类型(primitive type)和类(class)的分离,尤其是那些曾经使用过Smalltalk和Ruby的程序师。Java的代码相对于其他的代码来说过于冗长,这与它的轻便化声明相违背。
Java是一种单层继承的语言。这也导致了程序师在试图使用多重继承时候的不便,而很多语言都可以使用这个特性。但是Java可以使用接口类,把多重继承可能导致的风险减少到最小。Java不支持运算符重载,这是为了防止运算符重载使得代码的功能变得不清晰。但是用Java实现的语言Groovy可以进行运算符重载。过去Java对于文本的操作和其他语言,比如Perl和PHP相比差的较多,但Java在1.4版本时候引入了正则表达式。
类库问题
使用Swing平台编写的带有GUI(图形用户接口)的程序和其他原始程序非常不同。选用AWT工具包编写程序的程序师看到的都是原始接口,而且也无法获得先进的GUI编程支持,如果使用的话,就要提供每个平台上面所需的API,这将是一项庞大的工程。Swing则是完全用Java语言所写的程序,避免了接口元素重复的问题,只使用所有平台都支持的最基本的绘图机制。但是很多用户不知道如何在Java风格和Windows风格之间进行转换,结果造成了Java程序的接口在很多程序中非常特殊。苹果电脑已经提供了优化过的Java运行时程序,包含了Mac OS X的经典Aqua接口风格。
性能问题
由于Java编译器和虚拟机的不同对Java代码的性能影响比语言本身的影响大的多,所以统一讨论Java的程序的性能经常是有误导性的。据IBM的数据,在同样的硬件上2001年时的IBMJDK版本的性能是1996年的JDK版本的十倍左右。即使是在同一时期,不同JDK和JRE的性能也不一样,比如SUN、IBM、BEA等都有自己开发的JDK和JRE。
Java语言的一些特性不可避免的有额外的性能代价。例如数组范围检查、运行时类型检查等等;Java程序的性能还会因为不同的动态复杂性和垃圾处理机制使用的多少而各有不同。如果JVM的实现比较优化的话,那么这些功能甚至可以增加存储器分配的性能。这和总是使用STL或者托管C++的程序的情况类似。
Java的设计目的主要是安全性和可携性,所以对于一些特性。比如对硬件架构和存储器地址访问的直接访问都被去除了,如果需要间接调用这些底层功能的话,就需要使用JNI(Java本地接口)来调用本地代码。而间接访问意味着频繁调用这些特性时性能损失会很大,微软的.NET平台也有这样的问题。