《企业通用培训就业培训讲义》由会员分享,可在线阅读,更多相关《企业通用培训就业培训讲义(14页珍藏版)》请在金锄头文库上搜索。
1、第一章: Java开始 ITjob就业培训第一章: Java开始学习目标n Java技术的组成n Java虚拟机的主要功能n JAVA内存垃圾自动回收机制n 运行代码的步骤n 编写、编译并运行简单Java应用程序Java历史1991年,电视机,机顶盒,录象机的开发设计需要一种可移植、方便、高效的计算机语言。为了满足这种需求,由Sun公司的Patrick Haughton和James Gosling领导的技术小组开发了JAVA。上世纪九十年代中期,Sun推出了Sun Java Development Toolkits 1.0,简称JDK1.0。JDK1.0是一个功能强大的软件包,可以用来开发小应
2、用程序和多种操作系统(Sun Solaris,Windows Nt,Windows 95,Macintosh)的应用程序。1998年Sun推出Java 2 Platform,它定义了所有Java技术的概念和标准,即包括已经实现的技术也包括尚未实现的技术;即包括Sun的实现的,也包括其它公司的实现。目前,Java 2 SDK1.6是Java 2 Platform的最新定义。这个定义又可以细分为四个版本:标准版:J2SE(Java SE),用于开发普通的小应用程序和应用程序。它是我们这门课程要讲述的内容。(Java SE的体系结构)企业版:J2EE(Java EE),用于企业级应用。微型版:J2M
3、E(Java ME),用于开发移动电话,机顶盒,个人数字设备等。JavaCard:适用于智能卡的Java平台。(Java各版本应用领域)Java技术概述任何复杂的事物都可以分解成一些相对简单的组成部分。Java作为一门丰富而复杂的新技术,它由下列这些技术层面组成:n Java编程语言:定义变量、表达式、逻辑控制等基本规则。n Java类库:Java 软件工具包(SDK)为程序员提供了几千个类,包括基本的数学函数、数组和字符串、窗口,GUI,I/O,网络等。n Java运行环境:包括Java字节代码的加载器、校验器以及Java虚拟机。n Java虚拟机:Java技术出于跨平台,可移植的考虑,没有
4、将程序的源代码编译连接成CPU的指令序列,直接交给计算机执行。Java技术在不同的硬件,不同的操作系统之上,定义了完全相同的支持Java程序运行的虚拟计算机。Java源程序被编译成字节(byte)代码,编译后的文件名后缀是.class文件,增加一段解说在Java虚拟机上运行。n Java工具:编译器,注释器(interpreter),文档生成器等工具。n Java小应用程序:小应用程序(Applets)是一种贮存于WWW服务器上的用Java编写的程序,它通常由浏览器下载到客户系统中,并通过支持Java运行环境的浏览器运行。它由超文本标识语言(HTML)的Web页来调用。n Java应用程序:J
5、ava Applications是一种独立的程序,它不需要任何Web浏览器来执行。它们是普通的应用程序;应改为逗号可运行于任何具备Java运行环境的设备中。n 其它Java程序:JavaBean,Servlet,JSP等。Java技术的优点Java技术取得今天这样的成就,依赖于这门技术的先进性,Java技术具有下列优点:n 简单、健壮:java=(c+)-+,继承了c+语言的优点,去掉了c+的难点,又加入了新的特性;许多高级语言都要由程序员进行指针运算和存储器管理。这项工作即复杂又容易出错。Java不需要程序员进行指针运算和存储器管理,简化了设计,减少了出错的可能性。n 面向对象:Java是面
6、向对象的程序设计语言。与面向过程的语言相比,面向对象的语言更能反映人类对世界的认识和处理模式,具有良好的代码重用性。处理复杂、庞大而且不断变化的信息系统,必须使用面向对象的程序设计语言。n 分布式:目前,在所有软件产品中,仅供单个计算机使用的单机版软件所占的比例越来越小。大多数软件都可以运行在网络环境中。Java拥有一个网络协议对象库(TCP/IP,HTTP,FTP等),可以象错别字,改为像访问当地文件一样访问Internet上的对象。n 改进的解释性:为弥补解释语言速度较慢的不足,Java采用预编译的办法,将源程序生成字节代码,减轻运行时的解释工作。另一方面,有些Java运行环境采用Just
7、-In-Time(JIT)编译器将字节代码编译成机器码直接运行,这种运行环境对于重复执行的服务器端软件特别有效,可以达到C语言的速度。n 安全:Java语言在编译时删除了指针和内存分配,在运行时检查字节代码,拒绝执行非法的内存访问,超越权限的访问等。可以防御黑客攻击。n 平台无关:Java通过采用虚拟机技术真正实现了与平台无关。Java软件是真正跨平台可移植的。编译过的JAVA文件,即可以在windowns上运行,也可以Linux、Unix等系统上运行。加一段文字解说n 多线程:允许一个应用程序同时做多个任务。n 动态性:Java允许下载代码模块,因此,当程序运行时也能动态升级。n 高性能:经
8、过实际的综合评测得出结论,Java是高性能的。 Java虚拟机Java虚拟机在Java运行环境中处于核心地位。Java虚拟机使Java语言可以跨多种平台运行,保障了SUN提出的write once, run anywhere的特性,其组成为:n 指令集(中央处理器CPUn 寄存器n 类文件格式n 栈n 垃圾收集堆n 存储区Java虚拟机隐藏了计算机硬件和操作系统的复杂性。改为逗号使我们只面对单一的支持Java的计算机。当我们写好Java源程序后,使用编译器将源代码转换成JVM的指令序列(字节代码),保存为.class文件增加文件。执行Java程序时,JVM负责解释字节代码, JVM的指令转换成
9、真实的机器指令,并执行。自动内存回收(垃圾收集)垃圾回收就是将程序不再使用的内存块释放出来,以提供给其它程序使用。程序运行时需要占用一定内存空间,当程序退出后应该把占用的内存释放,在c, c+语言中由程序保证内存的释放,但如果程序员忘记释放内存,就会在内存中“垃圾”增多,影响其它程序运行;Java语言实现自动垃圾回收处理,减轻了程序员的负担,杜绝了因内存管理而导致的程序中的问题。程序员可以建议垃圾回收,通过调用System.gc()实现。常见垃圾收集机制介绍JVM中内存划分为:堆栈(Stack)、堆(Heap)、静态存储(Static)大多数垃圾收集使用了根集(root set)这个概念;所谓
10、根集就量错别字,改为是正在执行的Java程序可以访问的引用变量的集合(包括局部变量、参数、类变量),程序可以使用引用变量访问对象的属性和调用对象的方法。垃圾收集首选需要确定从根开始哪些是可达的和哪些是不可达的,从根集可达的对象都是活动对象,它们不能作为垃圾被回收,这也包括从根集间接可达的对象。而根集通过任意路径不可达的对象符合垃圾收集的条件,应该被回收。简单的说,就是没有任何引用指向这块内存空间,该空间的内存就可以被回收。增加一段文字说明引用计数法(Reference Counting Collector)一般来说,堆中的每个对象对应一个引用计数器。当每一次创建一个对象并赋给一个变量时,引用计
11、数器置为1。当对象被赋给任意变量时,引用计数器每次加1当对象出了作用域后(该对象丢弃不再使用),引用计数器减1,一旦引用计数器为0,对象就满足了垃圾收集的条件。基于引用计数器的垃圾收集器运行较快,不会长时间中断程序执行,适宜地必须 实时运行的程序。但引用计数器增加了程序执行的开销,因为每次对象赋给新的变量,计数器加1,而每次现有对象出了作用域生,计数器减1。Tracing算法(Tracing Collector)基于tracing算法的垃圾收集器从根集开始扫描,识别出哪些对象可达,哪些对象不可达,并用某种方式标记可达对象,例如对每个可达对象设置一个或多个位。在扫描识别过程中,基于tracing
12、算法的垃圾收集也称为标记和清除(mark-and-sweep)垃圾收集器。compacting算法(Compacting Collector)为了解决堆碎片问题,基于tracing的垃圾回收吸收了Compacting算法的思想,在清除的过程中,算法将所有的对象移到堆的一端,堆的另一端就变成了一个相邻的空闲内存区,收集器会对它移动的所有对象的所有引用进行更新,使得这些引用在新的位置能识别原来 多余一个空格,可删除的对象。在基于Compacting算法的收集器的实现中,一般增加句柄和句柄表。垃圾回收的几个特点垃圾收集发生的不可预知性:由于实现了不同的垃圾收集算法和采用了不同的收集机制,所以它有可能
13、是定时发生,有可能是当出现系统空闲CPU资源时发生,也有可能是和原始的垃圾收集一样,等到内存消耗出现极限时发生,这与垃圾收集器的选择和具体的设置都有关系。垃圾收集的精确性:(a)垃圾收集器能够精确标记活着的对象;(b)垃圾收集器能够精确地定位对象之间的引用关系。前者是完全地回收所有废弃对象的前提,否则就可能造成内存泄漏。而后者则是实现归并和复制等算法的必要条件。所有不可达对象都能够可靠地得到回收,所有对象都能够重新分配,允许对象的复制和对象内存的缩并,这样就有效地防止内存的支离破碎。垃圾收集的实现和具体的JVM 以及JVM的内存模型有非常紧密的关系。不同的JVM 可能采用不同的垃圾收集,而JV
14、M 的内存模型决定着该JVM可以采用哪些类型垃圾收集。现在,HotSpot 系列JVM中的内存系统都采用先进的面向对象的框架设计,这使得该系列JVM都可以采用最先进的垃圾收集。代码运行过程Java源程序通过编译,转换成字节码。字节码被存储在.class文件中。构成Java软件程序的字节代码在运行时被加载、校验并在解释器中运行。当运行Applets时,字节码可被下载,然后由浏览器中的JVM进行解释。解释器具备两种功能,一是执行字节代码,二是对底层硬件做适当调用。在一些使用Java技术的运行环境中,部分校验过的字节码被编译成机器码并直接运行于硬件平台。这就使Java软件代码能够以接近C或C+的速度
15、运行,只是在加载时,因为要编译成机器码而略有延迟。Java技术运行字节代码包含如下三大步骤:n 加载代码由类加载器执行n 校验代码由字节码校验器执行n 执行代码由运行时的解释器执行(Java程序运行的三大步骤)类加载器类加载器为程序的执行,加载所需要的类。类加载器将本地文件系统的类名空间,与来自网络的类名空间相分离,以增加安全性。当全部类被加载后,可执行文件的存储器格式被确定。这时,特定的存储器地址被分配给变量并创建检索表格。由于存储器格式在运行时出现,因而Java技术解释器增加了保护以防止对限制代码区的非法访问。JVM中有四种类加载器,分别为(本节以下内容可以在以后再理解):n BootStrapClassLoader:启动类加载器:虚拟机启动时最先加载系统加载关键的运行类的加载器。n ExtClassLoader:扩展类加载器,专门用来加载所有java.ext.dirs下的.jar文件。开发者可以通过把自己的.jar文件或库文件加入到扩展目录的classpath,使其可以被扩展类加载器读取。n AppClassLoader:应用(系统)类加载器,用来读取所有的对应在java.class.path系统属性的路径下的类以上三个类在