




免费预览已结束,剩余141页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录,第一章Java概述一、Java简介和发展史二、Java的特点三、Java核心技术,目录,第二章Java语言基础一、基本数据类型二、引用数据类型三、运算符和表达式四、语句和流程控制五、常用算法六、方法、类、对象七、类的封装、继承和多态八、抽象类、接口和内部类,目录,第三章JDK技术一、JDK简介和API整体介绍二、语言核心包三、常用工具包四、JDK版本新特性,目录,第四章Java平台技术一、Java版本介绍二、JVM虚拟机三、Java反射机制四、异常处理五、线程和IO流操作六、网络编程,目录,第五章Java开发规范一、开发规范二、学习技巧三、编程技巧,目录,第六章Java开发环境一、Java开发环境搭建二、SVN简介三、断点测试和单元测试四、构建工具简介,第1章Java概述,Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。从本章开始,我们将走入Java的世界,学习Java的工作原理,环境搭建,以及开发第一个Java程序。,1.1Java简介,Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。它是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE、JavaEE、JavaME)的总称。,1.1Java简介,Java之父JamesGosling,JamesGosling以“Java技术之父”而闻名于世。他是Java技术的创始人,他亲手设计了Java语言,并开发了Java编译器和Java虚拟机,使Java成为了世界上最流行的开发语言。Java支持的计算模式,已经成为了互联网的标准编程模式以及分布式企业级应用的事实标准。詹姆斯戈士林现任Sun公司副总裁及Sun研究院院士。,1.1.1Java发展历史,1995年5月23日,Java语言诞生,Sun公司发布第1版Java开发工具包(JavaDevelopmentKit,JDK)。1996年1月,JDK1.0和HotJava诞生,HotJava通过嵌入在Web网页中的Applet运行Java程序。1998年12月4日,Sun发布了Java的历史上最重要的一个JDK版本:JDK1.2。这个版本标志着Java已经进入Java2时代。这个时期也是Java飞速发展的时期。1999年6月,SUN公司发布Java的三个版本:标准版(J2SE)、企业版(J2EE)和微型版(J2ME)。,1.1.1Java发展历史,2004年10月,Sun发布了JDK1.5。同时,Sun将JDK1.5改名为J2SE5.0。2005年6月,JavaOne大会召开,SUN公司公开JavaSE6。此时,Java的各种版本已经更名,以取消其中的数字“2”:J2EE更名为JavaEE,J2SE更名为JavaSE,J2ME更名为JavaME。2009年4月20日,甲骨文公司(Oracle)以74亿美元收购Sun,取得Java的版权。2011年7月,甲骨文公司发布Java7的正式版。,1.2Java的特点,1.平台无关性,平台无关性指一个应用程序能够运行于不同的操作系统平台。Java采用虚拟机技术支持平台无关性。Java虚拟机(JVM)是一套支持Java语言运行的软件系统,运行于操作系统之上。Java语言本身设计也体现出平台无关性。,1.2Java的特点,2.完全面向对象和简单性,完全面向对象:所有设计都必须在类中实现,一个Java程序就是多个类的集合。语法:放弃了C+语言的全程变量、goto语句、宏定义、全局函数以及结构、联合和指针数据类型。面向对象概念:放弃了多重继承、友元类和运算符重载,采用“单重继承+接口”的方式代替多重继承,提供语言级的内存自动管理和异常处理方式。,3.可靠性,语言级别:(1)提供严密的语法规则,在编译和运行时进行严格检查,降低程序出错的可能性。(2)提供异常处理机制,是程序具备在运行过程中及时发现并处理运行时错误的能力,保证Java程序运行的稳定和可能。运行架构级别:提供资源回收机制,对内存资源进行自动管理,跟踪程序使用的所有内存资源,自动回收不再被使用的内存资源。,1.2Java的特点,4.安全性,采用域管理方式的安全模型,无论是本地代码还是远程代码,都可以通过配置策略设定可访问的资源域。这种策略使未经授权的代码不能对用户本地资源进行操作,更好地支持了企业级应用,也消除了区分本地代码和远程代码带来的困难。,5.多线程,多线程机制使一个进程能够被划分成多个线程,每个线程执行一个特定功能,多个线程能够并发执行。,6.直接支持分布式的网络应用,JSP提供服务器端的动态Web页面设计,功能更强,效率更高。Java核心类库包括一个支持HTTP、SMTP和FTP等基于TCP/IP协议的类库,使得Java应用程序可凭借URL打开并访问网络上的对象,其访问方式与访问本地文件系统完全相同。,1.3Java核心技术,JDBC(JavaDatabaseConnectivity)即Java数据库连接,定义Java应用程序与关系型数据库连接的规范。JSPJSP是Sun公司推出的一种动态网页技术标准,一种运行于Web服务器端的标记语言,它能够将Java语言直接嵌入到HTML文档中,可以建立跨平台、安全、高效的动态网站。JavaBeans和EJBJavaBeans是Java的对象组件技术,提供组件复用的关键技术,类似于Windows的ActiveX。在JSP中可以使用JavaBeans。EJB(EnterpriseJavaBeans)提供企业级JavaBeans。,第2章Java语言基础,本章将介绍Java语言中的基本数据类型(字符、浮点、常量、变量)和引用数据类型(数组、字符串、集合、泛型)等数据格式,举例各种运算符及相应表达式的作用,讨论Java语句与流程控制;并在此基础上详细说明各种排序算法的内容;最后简要说明Java企业级编程规范。,2.1基本数据类型,数据类型指定了该类数据所占内存空间的大小、取值范围及其可以进行的操作。Java语言中的数据类型可分为基本数据类型和复合数据类型。基本数据类型又称为“原始数据类型”,是其他数据类型的基础。基本数据类型主要包括布尔类型、字符型、整型、浮点型(实型)。,2.1.1Java数据类型一览,2.1.2基本数据数据类型一览,2.1.3基本数据类型变量定义,booleanx,y=truecharx=a,y=97bytex,y=12,shortx,y=12345intx=7,y=1234longx=9876L,y=6floatx=0.56F,y=123.4fdoublex=7,y=-12345.6d,2.1.4变量与常量,变量与常量是程序中的基本数据元素。变量代表运行过程中值可以改变的数据,常量代表运行过程中值恒定不变的数据。变量的4个基本要素:名字、类型、值和作用域。(1)变量声明:修饰符类型变量=表达式,变量=表达式举例:privatecharx=a;publicstaticinta=7;(2)变量参与的运算和操作取决于变量的数据类型。最终变量Java语言提供一种特殊的变量,只能进行一次赋值。采用关键字final声明。举例:finalintvalue;/声明最终变量,声明时没有赋值value=100;/最终变量只能进行一次赋值,2.1.5变量与常量,直接常量指在程序中直接引用的常量,包括数值型常量和非数值型常量。数值型常量包括整数和浮点数;非数值型常量包括字符常量、字符串常量和布尔常量。符号常量以标识符形式出现的常量,在程序中不能改变其值,采用关键字final声明。Java语言约定常量标识符全部用大写字母表示。举例:finalintMAX=10;,2.2引用数据类型,除了简单数据类型外,Java语言还定义了许多复合数据类型,如数组、字符串、集合等。这些复合数据类型都是以类的形式进行定义的,包含许多属性和方法。综合使用简单数据类型和复合数据类型,可以处理实际需求中遇到的各种数据形式,能够编写更加复杂的程序。,2.2.1声明数组,数组是Java语言中的一种复合数据类型,是具有相同数据类型的数据集合。数组中的每个数据称为数组元素,数组元素是有序的。声明数组:数组类型数组名格式格式1:类型名数组名;格式2:类型名数组名;举例inta,b;/等价于inta,b;inta,b;/此处的b不是数组类型floata10;/格式非法,2.2.2创建与引用数组,要想数组能被真正使用,只定义数组是不够的,还需要为其分配内存空间和初始化。格式:数组名=new类型名长度;举例a=newint20;floatf=newfloat100;intlen=10,a=newintlen;数组创建完成后即可使用。数组的使用最普遍的就是访问数组的元素。格式:数组名下标值数组的下标值从0开始计例如:a2=30;,2.2.3二维数组,由于数组的数据类型可以是各种Java数据类型,当然也包括数组类型。这种数组类型的数组就构成了多维数组。实际上二维数组是以一维数组为元素构成的数组。定义二维数组intmat;/声明一个二维数组变量matmat=newint23;/申请23个存储单元intmat=newint23;/声明和申请存储空间可以合起来写intmat=1,2,3,4,5,6;/声明时可以为二维数组赋初值,将值用多层花括号括起来二维数组变量下标下标;matij/表示第i行第j列的数组元素,2.2.4字符串,字符串是Java中经常使用的复合数据类型。在本质上,字符串实际上为char型数组。字符串由Java.lang.String类来表示,该类具有一系列的属性和方法,提供对字符串的各种操作。除了String类,Java还提供了StringBuffer类用来处理可变长度的字符串。,2.2.5创建字符串,同其他类型数据一样,要想使用字符串数据,首先需要创建字符串。创建字符串的语法格式如下图所示。String作为类,具有不同的构造方法。比较特殊的是,String可以同Java中的基本数据类型一样使用,由系统自动完成创建。作为基本数据类型使用的语法格式如下所示。,2.2.6比较字符串,在实际编程过程中,经常需要对两个字符串变量的内容进行比较。Java语言中的String类提供了几个方法分别适合不同情况的字符串比较,如下表所示。注意:比较字符串值是否相等不能使用=。当用=来比较两个对象时,实际的运算是判断是否为同一个对象。即使内容相等,如果为不同的对象,也就是对应的是不同内存地址,返回值也为false。,2.2.7字符串其他常用操作,字符串String作为数组和类,本身提供了许多方法用来进行各种复杂操作。下表列出了字符串一些常用方法及简单说明。字符串的操作方法很多,上面仅列出了一些常用的,实际编程过程中可以查看相关API。,2.2.8StringBuffer类,String对象的长度是不可改变的,如果使用String类频繁地进行字符串拼接操作,那么会产生很多对象。针对此类性能问题,Java语言提供了另一个类StringBuffer可以特别用来处理此类问题。StringBuffer类主要包含如下一些常用方法,如下表所示。,2.2.10数据集合,集合是多个对象的容器,容器里聚集了一组对象。如果需要将不同数据类型的多个对象组织在一起,就需要使用集合。在Java语言中,集合本身是一个框架体系,包含各种集合类。集合框架包括各类集合接口、接口实现类、集合操作,通过继承关系形成自上而下的体系结构。集合框架的核心接口为Collection、List、Set和Map。,2.2.11集合框架,从图中可以看出,List和Set继承了Collection,Map则独成一体。Collection接口是Java集合框架的最顶层接口。Collection中存放的对象允许重复,没有顺序。Collection接口定义了一系列的操作集合中元素的基本方法。List接口继承自Collection接口。List提供了对象的有序存放,其中存放的对象也允许重复。在Collection接口定义的方法基础上,List接口进行了扩展,定义了一些与顺序操作相关的方法。Set接口也继承自Collection接口。Set更像数学概念中的集合,存放的对象不允许重复,也没有顺序。Set接口没有对Collection接口进行扩展。Map接口是相对独立的。Map提供了一种“键-值”对映射的方式存放对象。Map接口定义了一组专门的处理该结构数据的方法。,2.2.12列表(List),List提供了对象的有序存放,其中存放的对象允许重复。List接口的具体实现类主要有ArrayList和LinkedList。其中ArrayList以一种类似数组的形式存储对象,对象的随机访问速度较快。LinkedList实现机制是采用链表,适合于在链表中间需要频繁进行插入和删除对象的操作。在实际的编程过程中,可以根据具体需要进行相应选择。实例:ListarrList=newArrayList();arrList.add(a);arrList.add(b);,2.2.13集合(Set),Set中存放的对象不允许重复,没有顺序。Set接口的具体实现类有HashSet和TreeSet。其中HashSet能快速定位一个元素,但是放到HashSet中的对象需要实现hashCode()方法。TreeSet将放入其中的元素按顺序存放,要求放入其中的对象是可排序的。实例:Setset=newHashSet();set.add(a);set.add(b);,2.2.14映射(Map),Map提供了一种“键-值”对映射的方式存放对象。其中键和值也都可以是对象。对于键对象来说,像Set一样,一个Map容器中的键对象不允许重复。这就保证了键的唯一性,可以根据键对象快速定位值对象。对于值对象来说,则没有唯一性的要求,可以将任意多个键都映射到一个值对象上。Map接口的具体实现类有HashMap和TreeMap。其中HashMap也用到了哈希码的算法,以便快速查找一个键。TreeMap则是对键按序存放,要求放入其中的对象是可排序的。实例:,2.2.15泛型,泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。使用泛型编写的程序具有更好的安全性和可读性。泛型的使用范围很广,可以应用于集合类、定义泛型类、泛型方法等。,2.2.16泛型在集合中的应用,泛型对集合类来说有着非常重要的作用。在集合中引入泛型,能够提供编译时的类型安全,并且从集合中取得元素后不必再强制转换,简化了程序代码。定义泛型集合的语法格式如图6.13所示。其中,参数CollectionType表示集合类型,可以为任意List、Set、Map等集合类型。参数为泛型标识。参数datatype表示集合元素的数据类型,可以是Java语言中的各种数据类型。参数collectionName表示集合名称,可以由用户任意定义,但需要符合Java标识符的命名规范。,2.2.17定义泛型类,泛型类是指包含类型参数的类。在泛型类的内部,类型参数可以用作变量的类型或方法返回参数的类型。另外,一个泛型类可以包含多个类型参数。定义泛型类的语法格式如图6.14所示。,2.2.18创建泛型方法,与泛型类类似,包含类型参数的方法即为泛型方法。同样,一个泛型方法也可以包含多个类型参数。定义泛型方法的语法格式如图6.15所示。,2.2.19使用泛型通配符,泛型一个重要的特点是可以使用“?”作为通配符,以此来匹配任何数据类型。泛型通配符的格式如下所示。因为Object是所有对象类型的父类(包括String),所以想象中List也应该为List的父类,那么上述代码应该没有问题。实际情况却不是这样,编译该程序时系统给出“Typemismatch:cannotconvertfromListtoList”错误。原来对于泛型来说,因为其类型是可变的,List是其他List父类的说法已经不再成立。那么什么是List的父类呢?答案就是包含通配符的List。,2.2.20泛型实例,在泛型接口、泛型类和泛型方法的定义过程中,我们常见的如T、E、K、V等形式的参数常用于表示泛型形参,2.3运算符与表达式,表达式是具有确定值的语句,由操作数和各种运算符按照一定的规则组成,来完成相应的运算。表达式的值可以作为操作数,进而形成更复杂的表达式。对于各种运算符及其对应的表达式,下面分别进行介绍。,2.3.1运算符,运算符是一种特殊符号,用以表示数据的运算、赋值和比较,一般由一至三个字符组成,2.3.2运算符举例,算术运算符一览表,2.3.2运算符举例,比较运算符一览表,2.3.2运算符举例,逻辑运算符一览表,2.3.2运算符举例,赋值运算符一览表,2.3.3表达式,表达式是具有确定值的语句,由操作数和各种运算符按照一定的规则组成,来完成相应的运算。表达式的值可以作为操作数,进而形成更复杂的表达式。表达式定义:符合一定语法规则的操作数和运算符的序列例:a=3;b=a+5;a10,2.4语句与流程控制,语句是编写Java程序的基本代码,语句主要分为以下几种:1、变量说明语句:inta,b,c=5;2、赋值语句:a=10;b=newint10;3、复合语句:使用括起来的若干语句4、控制语句:条件、循环、break、continue5、方法调用语句:System.out.println(“OK!”);6、return语句:用于从方法中返回一个值7、import语句:用于导入所需要的类8、package语句:用于定义类所在的包程序的执行流程是多种多样的。既可以自上而下的顺序执行,又能够在遇到某些条件时进行跳转,还能够对某些操作重复执行。为了控制程序的执行流程,需要使用流程控制语句。流程控制主要包括顺序结构、选择结构、循环结构以及跳转语句。,2.4.1流程控制分类,2.4.2语句分类,2.4.3控制语句,2.4.4控制语句实例1,If语句实例Switch语句实例,2.4.5控制语句实例2,for语句实例,2.4.6控制语句实例3,while语句实例do-while语句实例,2.5常用算法,排序算法有很多,所以在特定情景中使用哪一种算法很重要。为了选择合适的算法,可以按照建议的顺序考虑以下标准:(1)执行时间;(2)存储空间;(3)编程工作。对于数据量较小的情形,(1)(2)差别不大,主要考虑(3);而对于数据量大的,(1)为首要标准。主要排序法有:一、冒泡(Bubble)排序相邻交换二、选择排序每次最小/大排在相应的位置三、插入排序将下一个插入已排好的序列中四、希尔(Shell)排序缩小增量五、归并排序六、快速排序七、堆排序,2.5.1冒泡排序,冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。,2.5.2选择排序,选择排序是一种简单直观的排序方法,每次寻找序列中的最小值,然后放在最末尾的位置。,2.5.3插入排序,插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。,2.5.4希尔(Shell)排序,希尔排序的原理:根据需求,如果你想要结果从大到小排列,它会首先将数组进行分组,然后将较大值移到前面,较小值移到后面,最后将整个数组进行插入排序,这样比起一开始就用插入排序减少了数据交换和移动的次数,可以说希尔排序是加强版的插入排序,2.5.5归并排序,归并排序是将两个(或两个以上)有序表合并成一个新的有序表即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列,2.5.6快速排序,快速排序是对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。,2.5.7堆排序,堆排序是一种利用完全二叉树这种数据结来对数组排序的高效算法,合法的最大堆树要满足一个条件就是每一个结点值都要大于或等于它的孩子结点值。处理的思想和冒泡排序,选择排序非常的类似,一层层封顶,只是最大元素的选取使用了最大堆。最大堆的最大元素一定在第0位置,构建好堆之后,交换0位置元素与顶即可。,2.6.1面向对象基本概念,面向对象的程序设计(ObjectOrientalProgramming,OOP)思想:最近十年发展起来的程序设计模式,其目标是将软件系统待处理问题或者事务抽象为对象(Object),由于对象本身具有一定的特征和行为,因此可以通过对象间的消息传递的方式驱动对象的动作,进而实现软件系统的功能。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。,2.6.2面向对象设计原则,单一职责原则(SRP):一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。开放封闭原则(OCP):软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。依赖倒置原则(DIP):依赖于抽象。体现为高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。接口隔离原则(ISP):使用多个小的专门的接口,而不要使用一个大的总接口。体现为接口应该是内聚的,应该避免“胖”接口。一个类对另外一个类的依赖应该建立在最小的接口上,不要强迫依赖不用的方法。里氏替换原则(LSP):子类必须能够替换其基类。体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。,2.6.3方法的定义,Java方法是组合在一起来执行操作语句的集合。方法声明:修饰符:修饰符是可选的,告诉编译器如何调用该方法。这定义了该方法的访问类型。返回类型:方法可以返回一个值。有些方法没有返回值执行所需的操作。在这种情况下,返回类型是关键字void。方法名称:这是方法的实际名称。方法名和参数列表一起构成了方法签名.参数列表:参数像一个占位符.当调用一个方法,传递一个值给参数。这个值被称为实际参数或参数。参数列表是指类型,顺序和方法的参数的个数.参数是可选的,也就是说,一个方法可以包含任何参数。语句序列:描述实现该方法所要求功能的操作,最后用return语句给出方法返回值,该值的数据类型必须与方法声明的返回值类型匹配;没有返回值时,该语句可以省略,2.6.4类的定义,类与对象是进行面向对象编程的基础。类是具有相同属性特征和行为规则的多个对象的一种统一描述,对象是对类的实例化。在Java语言中,类是一种最基本的复合数据类型,是组成Java程序的基本要素。类的声明:修饰符可以是:publicfinalabstract;类关键字:class;类名:可以自定义,首字母大写,要做到见名知义;成员变量用来刻画类的属性(状态);成员方法用来刻画类的功能;通过成员方法可使实现对成员变量的操作,2.6.5对象的定义,对象是对类的实例化。对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为。对象是动态的,每个对象都有自己的生存周期,都会经历一个从创建、运行到消亡的变化过程。任何一个对象都有其所属的类。使用对象首先需要声明对象所属的类,再使对象获得一个类的实例,引用对象的成员变量和调用对象的方法,使用完后释放对象。对象声明:MyDated;/声明d是MyDate类的一个对象创建实例:d=newMyDate();/创建类MyDate的一个实例赋值给对象MyDated=newMyDate();/声明对象,创建实例并赋值d.year=2008;,2.7.1类的三大特性,面向对象中的类具有封装、继承与多态的特性,这也是面向对象编程所具有的重要特点。类的封装性:类封装了一类对象的状态(成员变量)和功能(成员方法)类的继承性:可在已有类的基础上进行扩展,产生子类,实现代码重用和功能的扩充类的多态性:方法的重载(静态)和覆盖(动态),2.7.2类的封装性,封装是指隐藏对象的属性及实现细节,对外仅提供接口可见。封装实现了信息隐藏,有利于软件复用。这种技术带来的好处是达到了模块化的标准,从而提高了代码的复用程度。在某种程度上,封装也大大改善了软件开发的可维护性,降低了构建复杂软件系统的风险。封装实例:publicclassMyDateprivateStringyear;privateStringmonth;privateStringdate;publicStringgetYear()returnyear;publicvoidsetYear(Stringyear)this.year=year;,2.7.3类的继承性,继承是指一个类是从另一个类派生而来的,派生类自动具有了被继承类的所有特性。其中被继承的类称为“父类”,继承父类的类称为“子类”。继承可以使子类具有父类的各种属性和方法,而不需要再次编写相同的代码。继承也极大地促进了软件的复用,而且继承的形式可以更加复杂。继承举例:publicclassSonDateextendsMyDateprivateStringhours;publicStringgetHours()returnhours;publicvoidsetHours(Stringhours)this.hours=hours;,2.7.4类的多态性,多态是指对于一种服务功能,可以具有不同的实现方式,即多种形态,多态保证了类中方法设计的灵活性和执行的多样性,使程序具有良好的扩展性。类的多态性表现为方法的多态和类型的多态。方法的多态:包括方法的重载和覆盖,为一种功能提供多种实现。类型的多态:子类是一种父类类型。多态总结:一、使用父类类型的引用指向子类的对象;二、该引用只能调用父类中定义的方法和变量;三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。,2.7.5类的多态性举例,它表示我定义了一个Animal类型的引用,指向新建的Cat类型的对象。由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向Cat类型的对象的。那么这样做有什么意义呢?因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特,定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。所以,父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,它是无可奈何的;同时,父类中的一个方法只有在在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用;对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。,2.8.1抽象类,抽象类是指包含了抽象方法的类。其中,抽象方法只声明方法名称,而不指明方法体。抽象类比类的继承更高一层,是对类的抽象。抽象类拥有未实现的方法,不能被实例化,只能被继承扩展,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类。抽象类和普通类的主要有三点区别:1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。2)抽象类不能用来创建对象;3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为abstract类。,2.8.2抽象类实例,抽象类实例:,2.8.3接口,接口是面向对象编程中又一重要概念。在实际问题中,有些互不相关的类具有某种相同的行为,这时可以采用接口来定义这种行为。接口只定义提供什么功能,而不定义功能的具体实现,这一点与抽象类似。在Java语言中,不提供类的多继承,一个子类只能继承自一个父类。为了解决多继承的问题,在Java中可以采用接口来实现。一个类虽然不能同时继承多个类,却可以同时实现多个接口,从而可以解决现实中的多继承问题。接口声明:,2.8.4接口实例,接口实例:,2.8.5内部类,内部类指的是在类的内部嵌套定义的类。内部类本身的结构同普通类没什么不同,只不过定义的位置是在另一个类的内部。定义的内部类同样可以被外部引用。内部类可以随意使用外部类的成员变量(包括私有)而不用生成外部类的对象,这也是内部类的唯一优点。内部类实例:,第3章JDK核心技术,JDK(JavaDevelopmentKit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境。它由一个处于操作系统层之上的运行环境还有开发者编译,调试和运行用Java语言写的applet和应用程序所需的工具组成。JDK是SunMicrosystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的JavaSDK(Softwaredevelopmentkit)。从初学者角度来看,采用JDK开发Java程序能够很快理解程序中各部分代码之间的关系,有利于理解Java面向对象的设计思想。JDK的另一个显著特点是随着Java(J2EE、J2SE以及J2ME)版本的升级而升级。但它的缺点也是非常明显的就是从事大规模企业级Java应用开发非常困难,不能进行复杂的Java软件开发,也不利于团体协同开发。,3.1.1JDK简介,JDK由一个标准类库和一组建立,测试及建立文档的Java实用程序组成。其核心JavaAPI是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。JavaAPI包括一些重要的语言结构以及基本图形,网络和文件I/O。一般来说,JavaAPI的非I/O部分对于运行Java的所有平台是相同的,而I/O部分则仅在通用Java环境中实现。作为JDK实用程序,工具库中有七种主要程序:Javac:Java编译器,将Java源代码转换成字节码。Java:Java解释器,直接从类文件执行Java应用程序字节代码。appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。Javadoc:根据Java源码及说明语句生成HTML文档。Jdb:Java调试器,可以逐行执行程序,设置断点和检查变量。Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。,3.1.2JDK目录结构,3.1.3JDKAPI简介,JDK所提供的所有标准Java类都存放在Java包中,如java.lang包中包含了运行Java必不可少的系统类。由于系统会自动将java.lang引入,所以不需要在源文件中用import语句来显示地引入这个包。另外,Java规定过java.util和java.io是必须提供的标准包。,3.1.3JDKAPI简介,3.2JDK语言核心包,java.lang:语言包这是Java语言的核心包,系统自动将这个包引入到用户程序,该包中主要类有:1.object类:它是所有类的父类,其中定义的方法其它类都可以使用。2.数据类型包装类:简单的数据类型的类包装,包括Integer、Float、Boolean等。3.数学类Math:提供常量和数学函数,包括E和PI常数及abs()、sin()、cos()、min()、max()、random()等方法,这些常量和方法都是静态的。4.字符串类String和StringBuffer类。5.系统和运行时类:System类提供一个独立于具体计算机系统资源的编程界面;Runtime类可以直接访问运行时资源。,3.2JDK语言核心包,6.操作类:Class和ClassLoader类。类Class提供了对象运行时的若干信息,ClassLoader是一个抽象类,它提供了将类名转换成文件名并在文件系统中查找并装载该文件的方法。7.线程类:Thread类。Java是一个多线程环境,主要有Thread(线程建立)、ThreadDeath(线程结束后的清理操作)、ThreadGroup(组织一组线程)和Runnable(建立线程的交互工具)等类。8.错误和异常处理类:Throwable(所有错误和异常处理的父类),Exception(处理异常,需要用户捕获处理)和Error(处理硬件错误,不要求用户捕获处理)。9.过程类Process:它支持系统过程,当实用类Runtime执行系统命令时,会建立处理系统过程的Process类。,3.3.1JDK实用包,实用包实用包提供了各种实用功能的类,主要包括日期类、数据结构类和随机数类等。1.日期类:包括Date(获取日期和时间)、Calendar(抽象类,日历类)和GregorianCalendar(Calendar类的子类)类。2.数据结构类:包括链表类LinkedList、向量类Vector、栈类Stack和散列表类Hashtable等。3.随机数类Random:它封装了Math类中的random方法,并提供了更多的辅助功能。,3.3.2JDK抽象窗口工具包,抽象窗口工具包Java的java.awt提供了绘图和图像类,主要用于编写GUI程序,包括按钮、标签等常用组件以及相应的事件类。1.组件类:包括Button,Panel,Label,Choice等类,用于设计图形界面。2事件包:在java.awt.event中包括各种事件处理的接口和类3.颜色包:在java.awt.color中提供用于颜色的类。4.字体包:在java.awt.font中提供用于字体相关的接口和类。,3.3.3JDK其它包,输入输出包java.io提供了系统输入输出类和接口,只要包括输入流类InputStream和输出流OutputStream就可以实现文件的输入输出、管道的数据传输以及网络数据传输的功能。网络函数包提供了实现网络应用程序的类,主要包括用于实现Socket通信的Socket类,此外还提供了便于处理URL的类。applet包java.applet是专为创建Applet程序提供的包,它包含了基本的applet类和通信类,目前基本上被JApplet类所代替。,3.4.1JDK1.6新特性,1、Desktop类和SystemTray类在JDK1.6中,AWT新增加了两个类:Desktop和SystemTray。前者可以用来打开系统默认浏览器浏览指定的URL,打开系统默认邮件客户端给指定的邮箱发邮件,用默认应用程序打开或编辑文件(比如,用记事本打开以txt为后缀名的文件),用系统默认的打印机打印文档;后者可以用来在系统托盘区创建一个托盘程序。2、使用JAXB2来实现对象与XML之间的映射JAXB是JavaArchitectureforXMLBinding的缩写,可以将一个Java对象转变成为XML格式,反之亦然。3、新增StAXStAX(TheStreamingAPIforXML)是JDK1.6.0中除了DOM和SAX之外的又一种处理XML文档的API。4、新增CompilerAPI可以用JDK1.6的CompilerAPI去动态编译Java源文件。这个特性对于用到动态编译的应用程序相当有用,比如JSPWebServer,当我们手动修改JSP后,是不希望需要重启WebServer才可以看到效果的,这时候我们就可以用CompilerAPI来实现动态编译JSP文件。,3.4.1JDK1.6新特性,5、轻量级HttpServerJDK6提供了一个简单的HttpServerAPI,程序员必须自己实现HttpHandler接口,HttpServer会调用HttpHandler实现类的回调方法来处理客户端请求。6、插入式注解处理API(PluggableAnnotationProcessingAPI)插入式注解处理API提供一套标准API来处理Annotations,它把method,package,constructor,type,variable,enum,annotation等Java语言元素映射为Types和Elements,从而将Java语言的语义映射成为对象。7、用Console开发控制台程序JDK6中提供了java.io.Console类专用来访问基于字符的控制台设备.8、更简单,更强大的JAX-WSJavaArchitectureforXMLWebServices的缩写,是一种用Java和XML开发WebServices应用程序的框架。9、脚本语言支持(Scripting)JDK1.6增加了对脚本语言的支持,原理上是将脚本语言编译成bytecode,这样脚本语言也能享用Java平台的诸多优势,包括可移植性,安全等,另外,由于现在是编译成bytecode后再执行,所以比原来边解释边执行效率要高很多。,3.4.2JDK1.7新特性,1、switch中可以使用字串2、运用ListtempList=newArrayList();即泛型实例化类型自动推3、语法上支持集合,而不一定是数组4、新增一些取环境信息的工具方法5、Boolean类型反转,空指针安全,参与位运算,3.4.2JDK1.7新特性,6、两个char间的equals7、安全的加减乘除8、map集合支持并发请求,且可以写成Mapmap=name:xxx,age:18;,3.4.3JDK1.8新特性,1、接口的默认方法Java1.8允许我们给接口添加一个非抽象的方法实现,只需要使用default关键字即可,这个特征又叫做扩展方法。Formula接口在拥有calculate方法之外同时还定义了sqrt方法,实现了Formula接口的子类只需要实现一个calculate方法,默认方法sqrt将在子类上可以直接使用。2、Lambda表达式3、函数式接口每一个lambda表达式都对应一个类型,通常是接口类型。而“函数式接口”是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。因为默认方法不算抽象方法,所以你也可以给你的函数式接口添加默认方法。我们可以将lambda表达式当作任意只包含一个抽象方法的接口类型,确保你的接口一定达到这个要求,你只需要给你的接口添加FunctionalInterface注解,编译器如果发现你标注了这个注解的接口有多于一个抽象方法的时候会报错的。,3.4.3JDK1.8新特性,4、方法与构造函数引用Java8允许你使用:关键字来传递方法或者构造函数引用5、Lambda作用域在lambda表达式中访问外层作用域和老版本的匿名对象中的方式很相似。你可以直接访问标记了final的外层局部变量,或者实例的字段以及静态变量。6、访问局部变量我们可以直接在lambda表达式中访问外层的局部变量。7、访问对象字段与静态变量和本地变量不同的是,lambda内部对于实例的字段以及静态变量是即可读又可写。该行为和匿名对象是一致的。8、访问接口的默认方法JDK1.8API包含了很多内建的函数式接口,在老Java中常用到的比如Comparator或者Runnable接口,这些接口都增加了FunctionalInterface注解以便能用在lambda上。Java8API同样还提供了很多全新的函数式接口来让工作更加方便,有一些接口是来自GoogleGuava库里的。,3.4.3JDK1.8新特性,9、DateAPIJava8在包java.time下包含了一组全新的时间日期API。新的日期API和开源的Joda-Time库差不多,但又不完全一样。10、Annotation注解在Java8中支持多重注解了,Java8允许我们把同一个类型的注解使用多次,只需要给该注解标注一下Repeatable即可。,第4章Java平台技术,Java平台有三个版本:1.JavaSE(JavaPlatform,StandardEdition)。JavaSE以前称为J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的Java应用程序。JavaSE包含了支持JavaWeb服务开发的类,并为JavaPlatform,EnterpriseEdition(JavaEE)提供基础。总结来说,JavaSE是做电脑上运行的软件。2.JavaEE(JavaPlatform,EnterpriseEdition)。这个版本以前称为J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端Java应用程序。JavaEE是在JavaSE的基础上构建的,它提供Web服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(service-orientedarchitecture,SOA)和Web2.0应用程序。总结来说,JavaEE是用来做网站的(我们常见的JSP技术)3.JavaME(JavaPlatform,MicroEdition)。这个版本以前称为J2ME。总结来说,JavaME是做手机软件的。如今的手机软件开发由Android和IOS统领市场,这个版本已被淘汰,4.1.1JVM虚拟机,JVM是JavaVirtualMachine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。,4.1.2JVM生命周期,Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译程序将Java源程序翻译为J
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度杭州汽车租赁合同与杭州长租公寓租赁管理协议
- 2025版国际贸易欺诈防范与信用评估合同
- 二零二五年度瓷砖行业品牌授权合同
- 二零二五大连情感修复与离婚协议执行合同
- 2025版数字媒体广告投放合作协议
- 二零二五年度农业产业化合作经营合同范本
- 二零二五年度城市绿化带搭棚改造与美化合同
- 2025版自驾游汽车租赁服务合作协议
- 二零二五年度公共停车场冬季清雪与安全管理服务合同
- 二零二五年度顶级中介房屋买卖担保协议
- 预见性护理在骨科的应用
- 2025年甘肃社会化工会工作者招聘考试(公共基础知识)综合试题及答案
- 高二班主任班级管理课件
- 侵蚀性葡萄胎护理查房
- 2025年行政执法证考试题库及参考答案
- 2025年校招:招商银行试题及答案(可下载)
- 2025年安防生产行业技能考试-安防工程企业技术人员能力验证考试历年参考题库含答案解析(5卷100道集合-单选题)
- 2025年康复治疗师资格考试试题及答案
- 国际营销中心管理办法
- 无痛人流知识课件
- 全国律师会费管理办法
评论
0/150
提交评论