Java技术概览

Java主要用来干什么?

换句话来说就是Java可以用在什么地方?Java是一种编程语言,能干的事情当然就是用来写程序了,这不是废话吗?没错,但关键的问题是写什么样的程序?所以,首先大家需要了解的是都有什么类型的程序。都有哪些类型呢?这个问题很难说得清楚,因为分类方式不同,得到的结果也是不一样的。

从运行机制上来分,可以大致分为两种类型:

l           基于桌面的应用软件

这是大家非常熟知的一种软件类型,从开始菜单中所看到的绝大部分的软件,都是属于桌面应用软件。特点就是不需要互联网连接,本机运行,速度快,方便使用硬件资源等。

l           基于网络的应用软件

这个网络可以理解为互联网或局域网,这种软件的典型特点就是它的运行需要服务器和客户端的支持。我们打开浏览器(客户端),访问网站(服务器),能够看到各种信息,做各种各样的工作,就是非常典型的互联网应用。软件的绝大部分功能运行在服务器端,客户端只负责与用户打交道,获取用户的输入,将用户的输入传递到服务器,服务器处理用户的输入,完成之后,将处理结果返回到客户端,客户端负责把处理结果呈现出来。

软件的分类实在是太多了,比如硬件运行需要硬件的驱动程序,这种跟硬件打交道的程序一般用C语言来编写。我们在开始菜单中看到的各式各样的桌面应用软件则大部分是由C++/VB/Dephi等语言来编写的。

在基于网络的应用软件中,最常见的应用就是基于Web的应用。大家经常使用QQ软件,你怎么用的呀?首先下载QQ软件,然后安装,然后就可以跟别的QQ用户聊天了!它也是一种网络应用,但不是基于Web的应用。所谓基于Web的应用,一般来说客户端就是浏览器,通过浏览器来访问的应用软件称为Web应用。当然,腾讯公司已经推出了基于WebQQ软件,大家不妨也可以体验一下,只要打开浏览器,访问相应的网址,你用浏览器也可以上QQ了!体验的结果告诉我们,这种方式非常方便,我们无需下载任何QQ软件到本机,也无需安装除了浏览器之外的其它程序,也避免了因为软件升级而需要重新安装客户端带来的麻烦。正是因为基于Web的应用软件具备方便部署、统一维护,对于软件的用户来说,无需安装,只要能够连接到服务器就可以使用等等诸多优点,所以,现在最热门的软件开发领域就是基于Web的应用软件的开发。

 

在基于Web的应用软件开发领域,又可以分为两大类:互联网领域和企业应用领域

l           互联网领域:

换句直白的话来说,就是网站开发。主流技术是PHP/ASPJAVA技术,在这个领域不是主流。主要是因为相对于PHP/ASP的开发简单/入门容易来说,JAVA显得太过于笨重,JAVA适合于大型应用,比如对事务处理能力要求较高的电子商务网站。阿里巴巴已经从早期的PHP转移到了JAVA

l           企业应用领域

在企业应用开发领域,JAVA技术是绝对的主流。企业和政府,这两大有钱的主,早就已经开始了轰轰烈烈的信息化进程,企业的各种业务,政府部门的各种繁杂事务,都需要借助于计算机来解放人的劳动,提供工作的效率。给企业和政府开发的各种应用软件,绝大部分都是用JAVA语言来开发的。

 

由此可知,JAVA语言的热门方向就是企业级的应用软件开发。

 

当然,手机的软件开发方面,JAVA技术也在占据越来越重要的地位。不管怎么样,学习JAVA技术,在很长一段时间里面,都是会大有用武之地的。

 

Java技术包括什么东西?

按照应用领域的不同,JAVA平台技术分为三大类别:

Java SE – Java标准版,主要用来开发桌面应用软件,服务器软件等

Java EE – Java企业版,它以Java SE为基础,提供了众多的技术规范,制定了企业级应用开发的标准

Java ME – Java精简版,它是对Java SE的精简,主要用于手机/PDA等设备上的软件开发,此版本并非简单的JAVA SE的子集,而是还有一些专门用于这些设备的API(称为Profile

 

JavaSEJAVA技术的基础,我们必须在掌握这个技术的基础上,才有可能精通其它方面的技术。JavaEEJAVA技术的核心,也是我们要学习的重点内容。如果有志于手机软件(比如手机游戏)方面的开发,那么掌握Java ME也是非常有必要的,随着手机的大规模普及,以及对手机功能的开拓,这方面的软件开发人才需求,也在逐渐增加。

 

Java技术开发软件,我们需要什么?

要理解这个问题,我们首先要理解用Java开发软件的基本过程,不管你开发的是桌面应用软件还是基于Web的企业应用或者是在手机上运行的JAVA程序,它们都有一些共通的过程,同时也有很大的区别。

 

如果大家用其它语言比如CC++VB开发过程序,那么对这个过程会比较容易理解。用那些语言来开发程序的时候,通常是:

 

编写程序代码 à 将程序代码编译为可执行程序 à 运行程序

 

这里面关键的步骤是“将程序代码编译为可执行程序”。其中的关键是理解什么是“可执行程序”。大家印象中的可执行程序应该就是一个.exe文件(基于Windows操作系统),然后鼠标点击就可以运行了。这个可执行文件当然就是相对于不同的操作系统和硬件能够执行的二进制文件了。不同的操作系统和硬件,编译出来的二进制可执行文件是不一样的。所以一个在Windows操作系统下面编译出来的可执行文件拿到Linux操作系统下面是不能运行的(废话)。

 

所以,对于C/C++这种语言编写的程序,如果想要在不同的操作系统中运行,就需要拿到不同的操作系统中重新编译为可执行程序之后,才能运行。代码中的某些逻辑在不同的硬件平台上(与编译器也有关系)也有可能是不同的。比如C语言中的int类型,在16位机上是2byte,在32位机上是4byte,在64位机上是8byte。所以,要实现C/C++这些语言的真正跨平台是非常困难的。

 

Java则不同,Java语言在设计之初的目标之一就是实现真正的跨平台。

 

l           Java程序开发的共通过程是:

 

编写程序代码 à 将程序代码编译为.class文件 à 运行Java虚拟机程序读取.class文件并执行它

 

不同的操作系统或计算机平台,将会有不同的Java虚拟机程序(JVM – Java Virtual Machine )。SUN公司制定了Java虚拟机标准,同时它也提供了虚拟机程序供大家免费下载。在http://java.sun.com的官方网站上,你可以选择到不同硬件平台/操作系统的虚拟机程序。(我们以后的开发和运行都会在大家熟悉的windows平台上进行。)

 

当然,因为Java虚拟机实际上是一个标准,所以任何人都可以按照这个标准来编写虚拟机,比如IBMBEA等大公司就有他们自己的虚拟机。不过在绝大多数情况下,我们将选择SUN公司自身的JAVA虚拟机。

 

所以:

如果我们要开发JAVA程序,那么我们需要一个编译器和一个Java虚拟机,简单来讲,我们需要一个JDK,在初始阶段,可以简单认为:

Java编译器+Java虚拟机=JDK

JDK,是Java Development KitJava开发工具包)的缩写。

 

如果我们只是单纯想运行一个Java程序,那么,我们只需要一个JRE,在初始阶段,可以简单认为:

JRE=Java虚拟机

JREJava Runtime EnvironmentJava运行环境)的缩写。

 

所以,也可以简单认为:

JDK = JRE + Java编译器

 

上面的总结只是为了大家能够快速理解JAVA技术,忽略了很多其它方面的内容。比如JDK实际上除了Java编译器和Java虚拟机之外,还包含了Java调试器,Java反编译器,Java文档生成器等等很多其它的东西;JRE除了Java虚拟机之外,还包括了用于在浏览器中运行Java程序的插件等等。

 

有很多公司或组织为Java开发了JDK/JRE,比如SUN/IBM/BEA等,现在最流行最常用当然就是SUN公司开发的JDK了,所以,我们后面所有的课程,都将基于SUN公司的JDK来开发。

 

l           JAVA开发基于Web的应用软件

这是我们学习的重点。即用Java EE开发基于Web的企业应用软件。这种软件与普通的JavaSE程序不同,对于普通的JavaSE程序,我们只需一个编译器编译代码,并用一个虚拟机运行.class文件即可。而基于Web的软件,我们至少还需要一个JavaEE应用服务器和一个浏览器。JavaEE应用服务器是一种“看守进程”,启动之后,将长时间运行(几天、几个月、几年),一旦客户端通过浏览器访问(HTTP协议)服务器,服务器将运行相关的.class文件来执行各种功能,并将结果返回到浏览器(也是通过HTTP协议)显示。(可演示)

 

SUN公司JDK版本发布的历史

l           1995年,JDK1.0

l           1998年,JDK1.2,称Java2(开始真正流行起来)

l           1999年,Java技术被划分为J2SEJ2EEJ2ME

l           2000年,J2SE 1.3

l           2002年,J2SE 1.4

l           2005年,J2SE 1.5正式发布,同时也公布了JavaSE 6(此时尚未正式发布),此后,Java2时代(从JDK1.2JDK1.4称为Java2,无Java3Java4的说法)结束,不再叫J2SE/J2EE/J2ME,而是改称JavaSE/JavaEE/JavaME

l           20061129Java SE 6.0正式发布

l           ????年,Java SE 7(已发布测试版,从https://jdk7.dev.java.net/ 可以获知开发进度和下载)

 

历史上1.4版本是最广泛应用的,但历史有点久远了;1.6已经是非常稳定的版本,但很多现在企业中常见的应用服务器可能还不支持这个版本;1.5则是已经得到广泛支持的稳定的版本。所以,我们选择1.5这个版本。

 

当然,我们无需过多关心JDK的版本,凡是已经发布的版本,都是非常稳定的。而且,对于JAVA语言的核心来说,版本之间的差异并不大,我们基于1.5来学习,同时也需要关注1.41.5之间的差异,以及了解1.6中的新特性即可。

 

SayHello – 第一个JAVA程序

下面我们开始开发第一个Java程序,由此开始来了解Java编程。

1、  获取JDK

a)         可以从java.sun.com网站上下载

2、  安装JDK

3、  编写SayHello.java

4、  编译SayHello.java à SayHello.class

a)         运行javac.exe来编译:javac SayHello.java

-          'javac' 不是内部或外部命令,也不是可运行的程序

-          或批处理文件。

b)        因为无法找到javac.exe这个编译程序

c)        所以可以使用set PATH=”c:/xx/xx/bin”;%PATH% 命令,来把javac.exe程序所在的目录添加到PATH环境变量中,以便windows操作系统能够搜索到javac.exe。最好添加在最前面(理由后面再说)。

d)        之所以添加双引号,是因为路径中有空格(如果没有空格,可以不添加双引号)

5、  运行SayHello.class

a)         java SayHello 你的姓名 其它信息

b)        用空格来分开不同的参数,放在类名后面的参数,称为“程序参数”(Program arguments

 

基本概念:

Java源文件以.java为扩展名

Java源文件中只能包含一个定义为publicclass(类)

那个被定义为public的类的名称,必需与.java文件的名称一致(大小写也必须一致)

Java虚拟机将读取这个.class文件,并执行其中的指令

 

 

JDK/JRE/JVM/java.exe/javac.exe介绍

我们下载的JDK安装包包含的内容,如下图所示:

 

 

在安装的时候,如果选择同时安装JRE,则安装完成之后,目录结构如下图:

 

 

l           private JRE

jdk1.6.0_18目录下面有一个子目录jre,这就是private JRE所在的目录。所谓私有JRE,即JDK中的工具包需要用到的JRE。这个jre目录名称是固定的,不能更改。为什么JDK中的工具包需要用到JRE呢?比如javac.exe,这是JDK工具包中的编译器,用来将JAVA源文件编译为.class文件,这个编译器实际上是用Java语言编写的,它的主要执行类位于Program Files/Java/jdk1.6.0_18/lib/tools.jar下面,这时候javac.exe就会使用私有JRE来运行tools.jar这个包里面编译器类,来对JAVA源文件进行编译。实际上,在JDK安装目录下面的bin目录中的大部分.exe文件,都仅仅只是一个外壳(包装器)而已。

l           public JRE

公共JRE在安装过程中可以选择为别的位置。它包括各种浏览器的插件,以便于能够在浏览器中执行JAVA小应用程序(Applet)。公共JRE在安装过程中,会把一部分动态链接库(DLL文件)和java.exe拷贝到c:/windows/system32目录下面。此目的是为了方便客户在安装完JRE之后,无需改动PATH环境变量(搜索路径)即可运行JAVA程序。那么,如果我们在安装完JRE之后(无论是单独安装JRE,还是在安装JDK的同时选择安装公共JRE都是一样的),不作任何环境变量的配置,直接打开控制台,运行java命令,会如何呢?控制台将会执行在c:/windows/system32目录下的java.exe外壳程序,它将会找到公共JRE中的jvm.dll(这才是真正的JAVA虚拟机)以及其它需要的动态链接库,运行Java虚拟机,Java虚拟机会自动加载公共JRE下面的一个rt.jar包,它是Java核心类库所在。

c:/windows/system32/目录下的java.exe程序是如何得知公共JRE所在的位置的呢?这主要通过注册表。

 

注册表信息:

 

 

点开Java Development Kit下面的1.6,可以看到有JavaHome的定义(指向jdk1.6.0_18目录):

 

点开Java Runtim Environment下面的1.6可以看到JavaHome(指向了jre6目录)

 

由上可知,java.exe通过注册表(通过CurrentVersion得到当前版本号,通过版本号找到JavaHome)找到了公共JRE所在,也就找到了JAVA虚拟机的所在。

 

所以,我们首先要搞清楚哪个java.exe被执行了,其次要搞清楚java.exe找到了哪个JRE!这两件事情弄清楚了,很多其它的问题,也就有答案了。

 

client JREserver JRE

执行命令:java –version

 

C:/Documents and Settings/Lee>java -version

java version "1.6.0_18"

Java(TM) SE Runtime Environment (build 1.6.0_18-b07)

Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)

 

执行命令:java –server –version

C:/Documents and Settings/Lee>java -server -version

java version "1.6.0_18"

Java(TM) SE Runtime Environment (build 1.6.0_18-b07)

Java HotSpot(TM) Server VM (build 16.0-b13, mixed mode)

 

这两个命令分别指示java.exe这个外壳程序,加载专用于客户端桌面应用程序的JVM,或者是加载专用于服务器端的JVM,这就要求JREbin目录下要有clientserver两个目录。两个不同的JVM,分别针对桌面应用和服务器应用进行了不同的优化,所以,应根据相应情况选择。

 

不管是client还是server JVM都进行了性能上的优化,这种优化技术称为HotSpotHotSpot性能优化技术是从JDK1.3.1版本开始使用的,它是取代之前版本的虚拟机所用的JIT技术的。

关于HotSpot性能优化技术的介绍:

原文:http://java.sun.com/products/hotspot/whitepaper.html

翻译:http://lifethinker.javaeye.com/blog/215401

 

如果我们在安装JDK的同时安装了JRE,那么,你需要将JDK下面的bin目录添加到PATH的最前面,否则,你运行java –server –version的时候,将提示错误信息(演示一遍)

 

在以后的学习中,我们将逐步深入Java虚拟机的内核,了解Java虚拟机的运作机制,掌握面向对象的分析和设计方法。

 

概念总结

Java虚拟机和Java API在一起组成了一个“平台”,这个组合,除了被称为“Java运行时环境(JRE,Java Runtime Environment)”之外,也称为Java平台(从版本1.2开始到版本1.5止,称为Java2平台)。所谓Java API,即Java提供的核心类库(.class文件)。

 

不同的虚拟机和Java API组合,就成为不同的Java平台。

 

Java SE,全称为Java Platform Standard EditionJava平台标准版),主要用于桌面应用开发,它根据不同的计算机硬件及操作系统,提供了多个不同的虚拟机软件,同时这个版本也包含了标准的Java API

 

Java EE,全称为Java Platform Enterprise EditionJava平台企业版),主要用于企业级应用开发,它以Java SE作为基础,使用Java SE一样的虚拟机,除了包括标准的Java API之外,还提供了一个Java API的超集(专用于Java EE,比如包含一些在标准Java API中没有的Servlet/EJB等)。

 

Java ME,全称为Java Platform Micro EditionJava平台微型版/个人版),主要用于消费性的电子产品和嵌入式设备(手机/PDA等),这些产品的存储容量和计算能力均不能跟计算机相比,因此Java ME的虚拟机也是专为此种电子产品设计,而且包含的Java API要比标准版的Java API少得多。

 

Java平台中还有一个不太引人注意的领域:Java Card平台,它主要用于智能卡。即在智能卡上运行Java程序。

 

JDK,全称为Java Development Kit,即Java开发工具包

 

JVM,全称为Java Virtual Machine,即Java虚拟机,在不同的语境下,它可能指的是:

l           Java虚拟机规范(一个文档)

l           或一个具体的实现(一个程序)

l           或一个运行中的虚拟机实例(一个进程)

Java虚拟机规范是由SUN制定的,可以从http://java.sun.com/docs/books/jvms/ 下载。任何人都可以根据这个规范来实现自己的虚拟机产品(称为一个具体的实现)。比如我们从SUN的网站下载的JDKJRE中就包含了JVM,那就是一个具体的针对某个硬件和操作系统平台的实现。当运行一个JAVA程序时,我们就需要启动一个“Java虚拟机实例”来运行它。如果在同一台计算机中,我们独立地运行多个JAVA程序,那么我们就有了多个“运行中的虚拟机实例”(也可以称为“JVM进程”),在windows的进程列表中将可以看到多个“java.exe”,这里的每个JAVA程序,都运行在它自己的JVM进程中。

发布了34 篇原创文章 · 获赞 30 · 访问量 38万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章