01_Java概述

java

1.1 Java 简介与历史

  JAVA是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由Sun(升阳)公司的James Gosling(詹姆斯·高斯林)等人于1990年代初开发。它来自于Sun公司的一个叫Green的项目,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。开始他们准备采用C++,但C++太复杂,安全性差,最后基于C++开发一种新语言Oak(橡树,Java的前身)。

  Oak是一种用于网络的精巧而安全的语言,Sun公司曾以此投标一个交互式电视项目,但结果被SGI打败。加上智能化家电的市场需求没有预期的高,Sun放弃了该项计划。在Oak几近失败之时,Mark Ardreesen开发的Mosaic和Netscape启发了Oak项目组成员,他们用Java编制了HotJava浏览器,得到了Sun公司首席执行官Scott McNealy的支持,触发了Java进军Internet。

  在1995年5月23日以“Java”的名称正式发布。为什么不叫Oak?因为Oak已被一家显卡制造商注册了。

  Java的名字的来源:Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。Java语言中的许多库类名称,多与咖啡有关,如JavaBeans(咖啡豆)、NetBeans(网络豆)以及ObjectBeans (对象豆)等等。SUN和JAVA的标识也正是一杯正冒着热气的咖啡,如图1-1:

图1-1  Java图标

  伴随着互联网的迅猛发展而发展,Java逐渐成为重要的网络编程语言。在2009年4月20日,甲骨文以74亿美元收购Sun,Java也随之成为甲骨文公司的产品。这一度闹的沸沸扬扬,让人感觉Java前途未卜。但是还好,现在已经基本达成共识。

  Java技术是由美国Sun公司倡导和推出的,它包括Java语言和Java Media APIS、Security APIs、Management APIs、Java Applet、Java RMI、JavaBean、JavaOS、Java Servlet、JavaServer Page 以及JDBC等。现把Java技术的发展历程简述如下:

  ·1990年,Sun公司James Gosling领导的小组设计了一种平台独立的语言Oak,主要用于为各种家用电器编写程序。

  ·1995年1月,Oak被改名为Java;1995年5月23日,Sun公司在Sun World 95上正式发布Java和HotJava浏览器。

  ·1995年8月至12月,Netscape公司、Oracle公司、Borland公司、SGI公司、Adobe公司、IBM公司、AT&T公司、Intel公司获得Java许可证。

  ·1996年1月,Sun公司宣布成立新的业务部门——JavaSoft部,以开发、销售并支持基于Java技术的产品,由Alan Baratz任总裁。同时推出Java开发工具包JDK(Java Development Kit)1.0,为开发人员提供用来编制Java应用软件所需的工具。

  ·1996年2月,Sun公司发布Java芯片系列,包括PicoJava、MicroJava和UltraJava,并推出Java数据库连接JDBC(Java Database Connectivity)。

  ·1996年3月,Sun公司推出Java WorkShop。

  ·1996年4月,Microsoft公司、SCO公司、苹果电脑公司(Apple)、NEC公司等获得Java许可证。Sun公司宣布允许苹果电脑、HP、日立、IBM、Microsoft、Novell、SGI、SCO、Tamdem等公司将Java平台嵌入到其操作系统中。

  ·1996年5月,HP公司、Sybase公司获得Java许可证。北方电讯公司宣布把Java技术和Java微处理器应用到其下一代电话机中的计划。5月29日,Sun公司在旧金山举行第一届JavaOne世界Java开发者大会,业界人士踊跃参加。Sun公司在大会上推出一系列Java平台新技术。

  ·1996年6月,Sun公司发布JSP1.0,同时推出JDK1.3和Java Web Server 2.0。

  ·1996年8月,JavaWorkShop成为Sun公司通过互联网提供的第一个产品。

  ·1996年9月,Addison-Wesley和Sun公司推出Java虚拟机规范和Java类库。

  ·1996年10月,德州仪器等公司获得Java许可证。Sun公司提前完成JavaBean规范并发布,同时发布第一个Java JIT(Just-In-Time)编译器,并打算在Java WorkShop和Solaris操作系统中加入JIT。10月29日,Sun公司发布Java企业计算技术,包括JavaStation网络计算机、65家公司发布的85个Java产品及应用、7个新的Java培训课程及Java咨询服务、基于Java的Solstice互联网邮件软件、新的Java开发者支持服务、HotJava Views演示、Java Tutor、Java Card API等。Sun公司宣布完成Java Card API规范,这是智能卡使用的第一个开放API。Java Card规范将把Java能力赋予全世界亿万张智能卡。

  ·1996年11月,IBM公司获得JavaOS和HotJava许可证。Novell公司获得Java WorkShop许可证。Sun公司和IBM公司宣布双方就提供Java化的商业解决方案达成一项广泛协议,IBM公司同意建立第一个Java检验中心。

  ·1996年12月,Xerox等公司获得Java或JavaOS许可证。Sun公司发布JDK1.1、Java商贸工具包、JavaBean开发包及一系列Java APIs;推出一个新的JavaServer产品系列,其中包括Java Web Server、Java NC Server和JavaServer Toolkit。Sun公司发布100%纯Java计划,得到百家公司的支持。

  ·1997年1月,SAS等公司获得Java许可证。Sun公司交付完善的JavaBean开发包,这是在确定其规范后不到8个月内完成的。

  ·1997年2月,Sun公司和ARM公司宣布同意使JavaOS运行在ARM公司的RISC处理器架构上。Informix公司宣布在其Universal Server和其他数据库产品上支持JDK1.1。Netscape公司宣布其Netscape Communicator支持所有Java化的应用软件和核心API。

  ·1997年3月,HP公司获得Java WorkShop许可证,用于其HP-UX操作系统。西门子、AG公司等获得Java许可证。日立半导体公司、Informix公司等获得JavaOS许可证。Novell公司获得Java Studio许可证。Sun公司发售的JavaOS 1.0操作系统,这是一种在微处理器上运行Java环境的最小、最快的方法,可提供给JavaOS许可证持有者使用。Sun公司发售HotJava Browser 1.0,这是一种Java浏览器,可以方便地按需编制专用的信息应用软件,如客户自助台和打上公司牌号的网络应用软件。

  ·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)。

  ·1999年11月,Sun公司发布JSP1.1,同时推出JSWDK1.0.1和Java Servlet 2.2。

  ·2000年5月8日,JDK1.3发布。

  ·2000年5月29日,JDK1.4发布。

  ·2000年9月,Sun公司发布JSP1.2和Java Servlet 2.3 API。

  ·2001年6月5日,NOKIA宣布,到2003年将出售1亿部支持Java的手机。

  ·2001年9月24日,J2EE1.3发布。

  ·2002年2月26日,J2SE1.4发布,自此Java的计算能力有了大幅提升。

  ·2004年9月0日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。

  ·2009年04月20日,甲骨文74亿美元收购Sun。取得java的版权。

  ·2011年7月,甲骨文公司发布java7的正式版。

  现在最新的已经是Java8了。

1.2 Java 的特点

1.2.1 Java 语言的优点

  Java语言是一种优秀的编程语言。它最大的优点就是与平台无关,在Windows 9x、Windows NT、Solaris、Linux、MacOS以及其它平台上,都可以使用相同的代码。“一次编写,到处运行”的特点,使其在互联网上被广泛采用。

由于Java语言的设计者们十分熟悉C++语言,所以在设计时很好地借鉴了C++语言。可以说,Java语言是一种比C++语言“还面向对象”的一种编程语言。Java语言的语法结构与C++语言的语法结构十分相似,这使得C++程序员学习Java语言更加容易。

  当然,如果仅仅是对C++改头换面,那么就不会有今天的Java热了。Java语言提供的一些有用的新特性,使得使用Java语言比C++语言更容易写出“无错代码”。

这些新特性包括:

  1、提供了对内存的自动管理,程序员无需在程序中进行分配、释放内存,那些可怕的内存分配错误不会再打扰设计者了;

  2、去除了C++语言中的令人费解、容易出错的“指针”,用其它方法来进行弥补;

  3、避免了赋值语句(如a = 3)与逻辑运算语句(如a == 3)的混淆;

  4、取消了多重继承这一复杂的概念。

  Java语言的规范是公开的,可以在http://www.sun.com上找到它,阅读Java语言的规范是提高技术水平的好方法。

1.2.2 Java 语言的特性

  Java语言有许多有效的特性,吸引着程序员们,最主要的有以下几个:

1. 简洁有效

  Java语言是一种相当简洁的“面向对象”程序设计语言。Java语言省略了C++语言中所有的难以理解、容易混淆的特性,例如头文件、指针、结构、共用体、运算符重载、虚基类、多继承等。使得它更加严谨、简洁。Java语言不使用指针,并提供了自动的垃圾回收机制,使得程序员不必为内存管理而担忧。

2. 可移植性

  对于一个程序员而言,写出来的程序如果不需修改就能够同时在Windows、MacOS、UNIX等平台上运行,简直就是美梦成真的好事!而Java语言就让这个原本遥不可及的事已经越来越近了。使用Java语言编写的程序,只要做较少的修改,甚至有时根本不需修改就可以在不同平台上运行了。

3. 面向对象

  可以这么说,“面向对象”是软件工程学的一次革命,大大提升了人类的软件开发能力,是一个伟大的进步,是软件发展的一个重大的里程碑。

在过去的30年间,“面向对象”有了长足的发展,充分体现了其自身的价值,到现在已经形成了一个包含了“面向对象的系统分析”、“面向对象的系统设计”、“面向对象的程序设计”的完整体系。所以作为一种现代编程语言,是不能够偏离这一方向的,Java语言也不例外。

Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。相对C++而言,Java语言是一个纯粹的面向对象程序设计语言。

4. 解释型

  Java语言是一种解释型语言,相对于C/C++语言来说,用Java语言写出来的程序效率低,执行速度慢。但它正是通过在不同平台上运行Java解释器,对Java代码进行解释,来实现“一次编写,到处运行”的宏伟目标的。为了达到目标,牺牲效率还是值得的,况且,现在的计算机技术日新月异,运算速度也越来越快,用户是不会感到太慢的。

5. 适合分布式计算

  Java语言具有强大的、易于使用的联网能力,非常适合开发分布式计算的程序。Java应用程序可以像访问本地文件系统那样通过URL访问远程对象。

使用Java语言编写Socket通信程序十分简单,使用它比使用任何其它语言都简单。而且它还十分适用于公共网关接口(CGI)脚本的开发,另外还可以使用Java小应用程序(Applet)、Java服务器页面(Java Server Page,简称JSP)、Servlet等等手段来构建更丰富的网页。

6. 拥有较好的性能

  正如前面所述,由于Java是一种解释型语言,所以它的执行效率相对就会慢一些,但由于Java语言采用了两种手段,使得其性能还是不错的。

A、Java语言源程序编写完成后,先使用Java伪编译器进行伪编译,将其转换为中间码(也称为字节码),再解释;

B、提供了一种“准实时”(Just-in-Time,JIT)编译器,当需要更快的速度时,可以使用JIT编译器将字节码转换成机器码,然后将其缓冲下来,这样速度就会更快。

7. 健壮、防患于未然

  Java语言在伪编译时,做了许多早期潜在问题的检查,并且在运行时又做了一些相应的检查,可以说是一种最严格的“编译器”。

它的这种“防患于未然”的手段将许多程序中的错误扼杀在摇蓝之中。经常有许多在其它语言中必须通过运行才会暴露出来的错误,在编译阶段就被发现了。

另外,在Java语言中还具备了许多保证程序稳定、健壮的特性(Java的强类型机制、异常处理、废料的自动收集等),有效地减少了错误,这样使得Java应用程序更加健壮。

8. 具有多线程处理能力

  线程,是一种轻量级进程,是现代程序设计中必不可少的一种特性。多线程处理能力使得程序能够具有更好的交互性、实时性。

Java在多线程处理方面性能超群,具有让设计者惊喜的强大功能,而且在Java语言中进行多线程处理很简单。并提供多线程之间的同步机制(关键字为synchronized)。

9. 具有较高的安全性

  由于Java 语言在设计时,在安全性方面考虑很仔细,做了许多探究,使得Java语言成为目前最安全的一种程序设计语言。

尽管Sun公司曾经许诺过:“通过Java可以轻松构建出防病毒、防黑客的系统”,但“世界上没有绝对的安全”这一真理是不会因为某人的许诺而失灵验的。

就在JDK (Java Development Kit)1.0发布不久后,美国Princeton(普林斯顿)大学的一组安全专家发现了Java 1.0安全特性中的第一例错误。从此,Java安全方面的问题开始被关注。不过至今所发现的安全隐患都很微不足道,而且Java开发组还宣称,他们对系统安全方面的Bugs非常重视,会对这些被发现的Bugs立即进行修复。

而且由于Sun公司开放了Java解释器的细节,所以有助于通过各界力量,共同发现、防范、制止这些安全隐患。

10. 是一种动态语言

  Java是一种动态的语言,Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java能进行运行时的类型检查。

11. 是一种中性结构

  “Java 编译器生成的是一种中性的对象文件格式。”也就是说,Java 编译器通过伪编译后,将生成一个与任何计算机体系统无关的“中性”的字节码。

这种中性结构其实并不是Java首创的,在Java出现之前UCSD Pascal系统就已在一种商业产品中做到了这一点,另外在UCSD Pascal之前也有这种方式的先例,在Niklaus Wirth实现的Pascal语言中就采用了这种降低一些性能,换取更好的可移植性和通用性的方法。

Java的这种字节码经过了许多精心的设计,使得其能够很好地兼容于当今大多数流行的计算机系统,在任何机器上都易于解释,易于动态翻译成为机器代码。

1.3 Java 平台架构与版本

  Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface,简称API)构成。Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。Java应用编程接口已经从1.1x版发展到1.2版。目前常用的Java平台基于Java1.5和Java1.6,最新版本为Java1.7和Java1.8。

Java分为三个体系:

  ·Java SE (Java2 Platform Standard Edition,java平台标准版)

Java SE(Java Platform,Standard Edition)。Java SE 以前称为J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的Java 应用程序。Java SE 包含了支持Java Web 服务开发的类,并为Java Platform Enterprise Edition(Java EE)提供基础。

  ·Java EE (Java 2 Platform Enterprise Edition,java平台企业版)

Java EE(Java Platform,Enterprise Edition)。这个版本以前称为J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在Java SE 的基础上构建的,它提供Web 服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和Web 2.0 应用程序。

  ·Java ME (Java 2 Platform Micro Edition,java平台微型版)

Java ME(Java Platform,Micro Edition)。这个版本以前称为J2ME,也叫K-JAVA。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。

1.4 Java 虚拟机(JVM)

  Java虚拟机(即JVM,Java Virtual Machine的缩写) 是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。

1.4.1 什么是Java虚拟机

  1、Java的安全性和可移植性的关键在于Java编译器的输出并不是可执行代码,而是字节码。

  2、字节码是一套设计用来在Java运行时环境执行的高度优化指令集,该运行时环境就称为Java虚拟机(JVM)。

  3、在标准形式下,JVM是一个字节码解释器。

  4、可以将JVM看成一个微型操作系统,它依附于计算机具体的操作系统之上,JVM本身具有一套虚拟机器指令,并有自身的栈、寄存器组件等等,通过JVM 将编译过的 .class 文件与底层硬件平台、操作系统联系起来。有利于跨平台(即可移植性)。

1.4.2 JVM的功能是什么

  1、提供运行时环境

  2、提供垃圾回收机制

  3、提供中立的体系结构,即字节码

1.4.2.1 提供运行时环境

1>. Class loader 类加载器 —— 加载代码

  加载程序执行所需要的全部类。使用“命名空间”分隔本地文件系统的类和网络导入的类。全部类被加载后,可执行文件的内存就确定下来,防止未授权的访问。

2>. Byte code verifier 字节码校验器 —— 校验代码

  代码是否符合JVM规定的文件格式、是否有访问权限的违例、是否引起操作数的堆栈溢出、参数类型是否正确、是否有转型错误发生等。

3>. JIT code generator JIT代码生成器 —— 执行代码

  JIT编译器:Just In Time 实时编译器。JIT编译器是Java 虚拟机的一部分,它的主要用途是将字节码指令集转换为针对某一特定微处理器的机器代码指令。通过使用JIT编译器提高了Java 代码的执行速度。

  JVM提供运行时环境原理如图1-2所示:

图1-2  JVM运行时环境

1.4.2.2 提供垃圾回收机制

  其它编程语言,例如C++,内存的分配和释放都是程序员的责任。Java编程语言提供了一种系统级线程来跟踪内存的分配情况,程序员不用去管内存的回收情况,JVM会自动完成检查和释放不再需要的内存。

1.4.2.3 提供中立的体系架构

  一般的高级语言编写的程序如果要在不同的平台上运行,需要利用不同的编译工具编译成不同的目标代码,即跟具体的体系架构和处理器是相关的。而引入Java语言虚拟机后,Java程序在不同平台上运行时不需要重新编译。Java屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。

综上所述,JVM的功能如图1-3所示:

图1-3  Java虚拟机

  从图1-3中不难明白JAVA可以实现可移植性的原因,只要在操作系统上(WINNT、Linux、Unix)植入JVM(Java虚拟机),JAVA程序就具有可移植性,也符合SUN公司提出的口号“Write Once, Run Anywhere”(即:一次编写,处处运行)。

1.5 JDK 的安装及环境变量的配置

  JDK(Java SE Development Kit)即java标准开发包,是Sun提供的一套用于开发Java应用程序的开发包,它提供了编译、运行java程序所需要的各种工具和资源,包含java编译器、java运行时环境(JRE)、以及常用的java类库等。

  要开发Java程序,首先需要安装JDK,然后配置好环境变量即可。这里我选用的是j2sdk1.6版本。

  安装分为两个步骤:

  1、安装JDK:jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe

  2、配置环境变量path。

  安装过程如下:

图1-4  启动JDK安装程序

图1-5  将安装路径设置为c:\j2sdk

  之后按照默认的安装设置即可。

  安装完毕在JDK安装路径下面看到如下文件路径:

  bin:该路径下存放了jdk的各种工具命令,常用的javac、java等命令

  demo:该路径下存放了JDK提供的演示代码。

  jre:(Java Runtime Environment,Java运行环境),该路径下安装的是运行java程序所必需的JRE环境。包含JVM标准实现及Java核心类库。

  lib:该路径在存放的是JDK工具命令的实际执行程序,如tools.jar

  sample:该路径下存放了JDK提供的一些简单示例代码。

  src.zip:该压缩包里存放的就是java所有核心类库的源代码。

  从图1-3可以看出,在编译Java程序时需要用到javac这个命令,执行Java程序需要java这个命令,而这两个命令并不是windows自带的命令,所以使用它们的时候需要配置好环境变量,这样就可以在任何的目录下使用这两个命令了。

  那么该如何设置环境变量呢?

  在“我的电脑”上点击右键->选择“属性”->选择“高级”->“环境变量”,弹出“环境变量对话框”,如图1-6所示:

图1-6  系统环境变量的配置

  在“系统变量”栏选择“新建”,在变量名编辑框中输入:JAVA_HOME,在变量值编辑框中输入:c:\j2sdk\

  在“系统变量”栏选择“新建”, 在变量名编辑框中输入:CLASSPATH,在变量值编辑框中输入:.;%JAVA_HOME%\lib

  在“系统变量”栏中找到“Path”,选择“编辑”,在变量值的最前面加上:%JAVA_HOME%\bin;

  如何检测环境变量配置成功呢?

  启动命令行,输入:java -version 或 javac –version,如果你能看到JAVA的版本号,如 1.6.0,表示环境变量配置成功。这样就可以在命令行的任何目录下使用javac和java这两个命令了来编译运行Java程序了。

·编译Java源代码:

  进入DOS命令行,改变当前路径到源文件所在目录:

    javac HelloWorld.java

  带包名的源代码编译:

    javac -d . ./HelloWorld.java //将包生成到当前

·运行JAVA应用程序

  执行不带包名的JAVA应用程序:

     java HelloWorld

  执行不带包名的JAVA应用程序,指定classpath的执行方式:

     java -classpath . com.itjob.HelloWorld 或 java com.itjob.HelloWorld

注意:

  编译时,Java源文件名要包含扩展名,而在执行Java代码时,不要扩展名。

CLASSPATH环境变量作用:

  当我们使用“java java类名”命令来运行java程序时,JRE到哪里搜索java类?在当前路劲下。

  Jdk1.4及之前版本,需要在CLASSPATH环境变量里面添加一点“.”。用来告诉jre需要在当前路径下面搜索java类,另外编译和运行还需要JDK的lib路径的dt.jar、tools.jar文件的java类。

  在jdk1.5及以上版本完全不用设置CLASSPATH,sun公司改进jdk设计,jre会自动搜索当前路径下面的类文件,而且使用java的编译和运行工具时,系统可以自动加载dt.jar和tools.jar文件中的java类。

  但是如果你在jdk1.5及以上版本设置了CLASSPATH环境变量,jre就会按你指定的路径搜索Java类。如果CLASSPATH没有包含一点(.),那么jre就不会在当前路径中搜索java类。所以这是要注意的。

  如果我们希望运行java程序时,临时指定jre搜索java类的路径,可以使用-classpath选项,格式如下:

  java  -classpath  dir1;dir2;…;dirN  java类

  如果你想CLASSPATH环境指定的搜索路径有效,而且还会在当前路径搜索java类,格式如下

  java  -classpath  %CLASSPATH%;.;dir1;dir2;…;dirN  java类

1.6 编写第一个 Java 程序

  说了这么多,现在就自己来动手编写一个Java的程序来亲自感受一下Java语言的基本形式。需要说明的是,JAVA 程序分为两种形式:一种是网页上使用的Applet程序(Java小程序),另一种是Appliction程序(即:Java应用程序),我们主要讲解的是Java Application程序。

范例:Hello.java 

public class Hello

{

//程序的入口,所有程序由此开始运行

public static void main(String args[])

{

//此语句表示向屏幕上打印"Hello World !"字符串

   System.out.println("Hello World !");

}

}

  将上面的程序保存为Hello.java文件,并在命令行中输入javac Hello.java,没有错误后输入java Hello。

  输出结果:

       Hello World !

程序说明:

  程序的主要功能是将“Hello World!”输出到屏幕上。里类名需要跟文件的名称一模一样。前面提过,程序是由逐条执行的指令构成的,在执行的时候是不是从上到下逐条执行呢?其实不是的。正如我们的房子,不管有大多,有多少个房间都要从大门进入一样,程序也要从一个固定的位置开始执行,我们把这个位置称为“程序入口”,而main()方法就是程序的入口,所以在所有的Java Application中,都是从public static void main(String args[])开始运行的,在后面的章节中会详细讲解main方法的各个组成部分。

  System.out是指标准输出,通常与计算机的接口设备有关,如打印机、显示器等。其后所连接的println,是由print与line所组成的,意义是将后面括号中的内容打印在标准输出设备——显示器上。左、右括号之间的内容,即是欲打印到显示器中的参数,参数可以是字符、字符串、数值、常量或是表达式。当参数为字符串时以一对双引号(“”)包围;变量则直接将其名称做为参数;表达式作为参数时,要用括号将表达式包围起来。println()中有多个参数时,以加号连接这些将被打印的数据。在此,加号是“字符串合并”的意思,并非作为算术运算符号的用途。

  上面的程序如果暂时不明白也没有关系,只要将程序一点一点都敲下来,之后按照步骤编译、执行,就可以了,在这里只是让大家对Java Application程序有一个初步印象,以后所有的内容讲解的都将围绕Java Application程序进行。

1.7 classpath 的指定

  在java中可以使用set classpath命令指定java类的执行路径。下面通过一个实验来了解classpath的作用。

  假设当前路径在d:\盘下,而Hello.class位于c:\盘下,那么现在我们就不能用java Hello来执行程序。而我又不想切换路径到c:\盘下。该怎么解决呢?

  在D盘下的命令行窗口执行下面的指令:

  set classpath=c:

  之后在D盘根目录下执行:java Hello,如下图所示:

图1-7  classpath验证

  由上面的输出结果可以发现,虽然在D盘中并没有Hello.class文件,但是却也可以用java Hello执行Hello.class文件,之所以会有这种结果,就是因为在D盘中使用set classpath命令,将类的查找路径指向了C盘,所以在运行时,会从C盘下开始查找。

  或者直接利用如下命令:java  -classpath  c:\  Hello

1.8 开发环境的搭建

  Eclipse是一个开放可扩展的集成开发环境(IDE)。它不仅可以用于Java的开发,通过开发插件,它可以构建其他的开发工具。

  MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSP, CSS, Javascript, SQL, Hibernate。

  EditPlus是共享软件,它的官方网址是:www.editplus.com。EditPlus也是功能很全面的文本、HTML、程序源代码编辑器。默认的支持HTML、CSS、PHP、ASP、Perl、C/C++、Java、JavaScript和VBScript的语法着色。通过定制语法文件还可以扩展到其他程序语言。可以在Tools菜单的Configure User Tools菜单项配置用户工具。

  这里给大家介绍下利用EditPlus来构建Java的开发环境:

  1、从菜单栏中依次打开 “Tools”à“Configure User Tools…”

  2、找到“Groups and tool items”,点击“Group Name…”可以为这个组编辑一个名字,我们为它取名:“java”

配置JAVAC:

  1、点“Add Tool>>”à“Program”

  2、“Menu text”处填上你想要自定义的功能的名字,我们取名:“java builder”

  3、点“Command”后的浏览按钮,找到javac.exe的路径。我的路径为:“C:\Program Files\Java\jdk1.6.0_10\bin\javac.exe”。

  4、点“Argument”右边的倒三角按钮选择“File Name”或直接填写:$(FileName)

  5、点“Initial directory”右边的倒三角按钮选择“File Directory”或直接填写: $(FileDir)

  6、在“Action”里面选择“Capture output”。

配置JAVA:

  1、点“Add Tool>>”à“Program”

  2、“Menu text”处填上你想要自定义的功能的名字,我们取名:“java application run”

  3、点“Command”后的浏览按钮,找到java.exe的路径。我的路径为:“C:\Program Files\Java\jdk1.6.0_10\bin\java.exe”。

  4、点“Argument”右边的倒三角按钮选择“File Name Without Extension”或直接填写:$(FileNameNoExt)

  5、点“Initial directory”右边的倒三角按钮选择“File Directory”或直接填写: $(FileDir)

  6、在“Action”里面选择“Capture output”。

  至此,你的EditPlus就可以编译运行Java程序了。

1.9 程序的检测

  Java程序的错误主要有两种:

  ·语法错误:编译时错误

  ·语义错误:运行时错误

1.9.1 语法错误

  通过下面的范例来了解Java语法错误:

范例:TestJava1_1.java 

 1 //下面程序的错误属于语法错误,在编译的时候会自动检测到

2 public class TestJava1_1

3 {

4   public static void main(String args[])

5   {

6     int num1 = 2; // 声明整数变量num1,并赋值为2

7     int num2 = 3; 声明整数变量num2,并赋值为3

8

9   System.out.println("我有"+num1" 本书!");

10   System.out.println("你有"+num2+"本书!")

11   )

12 }

  程序TestJava1_1在语法上犯了几个错误,若是通过编译器编译,便可以把这些错误找出来。首先,可以看到第4行,main() method的主体以左大括号开始,应以右大括号结束。所有括号的出现都是成双成对的,因此第11行main() method主体结束时应以右大括号做结尾,而Careers2_4中却以右括号“)”结束。

  注释的符号为“//”,但是在第7行的注释中,没有加上“//”。在第9行,字符串的连接中少了一个“+”号,最后,还可以看到在第10行的语句结束时,少了分号作为结束。

  上述的四个错误均属于语法错误。当编译程序发现程序语法有错误时,会把这些错误的位置指出,并告诉设计者错误的类型,即可以根据编译程序所给予的信息加以更正。将程序更改后重新编译,若还是有错误,再依照上述的方法重复测试,这些错误就将会被一一改正,直到没有错误为止。上面的程序经过检测、调试之后运行的结果如下:

输出结果

  我有2 本书!

  你有3 本书!

1.9.2 语义错误

  当程序本身的语法都没有错误,但是运行后的结果却不符合设计者的要求,此时可能犯了语义错误,也就是程序逻辑上的错误。想要找出语义错误会比找语法错误更难,以下面的程序进行简单的说明:

范例:TestJava1_2.java 

//下面这段程序原本是要计算一共有多少本书,但是由于错把加号写成了减号,

//所以造成了输出结果不正确属于语义错误

public class TestJava1_2

{

  public static void main(String args[])

  {

    int num1 = 4 ; //声明一整型变量num1

    int num2 = 5 ; //声明一整型变量num2

    System.out.println("我有"+num1+" 本书! ");

    System.out.println("你有"+num2+" 本书! ");

    // 输出num1-num2的值s

    System.out.println("我们一共有"+(num1- num2)+ " 本书! ");

  }

}

输出结果:

  我有4 本书! 

  你有5 本书! 

  我们一共有–1 本书! 

  可以发现,在程序编译过程中并没有发现错误,但是运行后的结果却是不正确的,这种错误就是语义错误,就是因失误将“num1+num2”写成了“num1-num2”,虽然语法是正确的,但是却不符合程序的要求,只要将错误更正后,程序的运行结果就是想要的了。

  总结:类名不能随便起;main方法的void不能少;Java对大小写敏感;语句后面不能少了“;”;

1.10 提高程序的可读性

  能够写出一个程序的确很让人兴奋,但如果这个程序除了本人之外,其他人都很难读懂,那这就不算是一个好的程序,所以每个程序设计者在设计程序的时候,也要学习程序设计的规范格式,除了前面所说的加上注释之外,还应当保持适当的缩进,可以看见上面的范例程序都是按缩进的方法编写的,是不是觉得看起来很清晰、明白?可以比较下面两个程序,相信看完之后,你就会明白程序中使用缩进的好处了!

  有缩进的样例,可以发现这样的程序看起来比较清楚:

范例:TestJava1_3.java 

public class TestJava1_3

{

  public static void main(String args[])

  {

    int x;

    for(x=1;x<=3;x++)

    {

      System.out.print("x = "+x+", ");

      System.out.println("x * x = "+(x*x));

    }

  }

}

下面的程序与前面程序的输出结果是一样的,但不同的是,这个程序没有采用任何缩进,所以看起来很累:

范例:TestJava1_4.java 

public class TestJava1_4{ 

public static void main(String args[]){

int x ; for(x=1;x<=3;x++){

System.out.print("x = "+x+", ");

System.out.println("x * x = "+(x*x));}}}

  TestJava1_4这个例子虽然简短,而且语法也没有错误,但是因为编写风格的关系,阅读起来肯定没有TestJava1_3这个程序好读,所以建议大家尽量使用缩进,养成良好的编程习惯。

范例TestJava1_3和TestJava1_4运行后的输出结果如下:

  x = 1 , x * x = 1

  x = 2 , x * x = 4

  x = 3 , x * x = 9

1.11 Java编码约定

  虽然任何一个合法的标识符都可以用来当作变量、类、方法、常量、接口等的名称,d但要尽量做到顾名思义,且遵循Java编程语言极力推荐的编码约定:

  ·class——类名应该采用大小写混合,且单词首字母都是大写。比如:class Person

  ·interface——接口命名规则和类一样。

  ·method——方法应该采用大小写混合,且首字母要小写。比如:addStuInfo()

  ·variable——变量应该采用大小写混合,且首字母要小写。比如:myName

  ·constant——常量应该采用全部大写的形式。比如:MAX_SIZE

  ·control structure——控制结构,即使是单个语句,也通常利用{}扩起来。

  ·缩进规则:同层对齐、异层缩进

  ·注释:在编写代码的过程中,适当的加入对代码的注释,能增加阅读性。

·本章摘要:

  1、Java简介与历史发展。

  2、Java程序比较特殊,它必须先经过编译,然后再利用解释的方式来运行。

  3、Byte-codes最大的好处是——跨平台,可让“一次编写,处处运行”成为可能。

  4、JDK、JRE、JVM相关概念。

  5、配置Editplus的Java编译运行环境。

  6、编写入门的Java Application程序。

  7、使用classpath可以指定class的运行路径。

  8、Java程序的错误分为:语法错误和语义错误。

  9、提高程序可读性的方法有:

  (1)在程序中加上批注;

  (2)为变量取个有意义的名称;

  (3)保持每一行只有一个语句;

  (4)适当的缩进。

感谢阅读。如果感觉此章对您有帮助,却又不想白瞟

                                 

以上是 01_Java概述 的全部内容, 来源链接: utcz.com/z/393371.html

回到顶部