JSP实用简明教程第二版

上传人:hao****021 文档编号:252936058 上传时间:2024-11-26 格式:PPT 页数:389 大小:6.36MB
返回 下载 相关 举报
JSP实用简明教程第二版_第1页
第1页 / 共389页
JSP实用简明教程第二版_第2页
第2页 / 共389页
JSP实用简明教程第二版_第3页
第3页 / 共389页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,JSP实用简明教程(第二版),重点内容:,java,技术,jsp,技术,Jsp,两种体系结构,第1章 概述,一、java技术,Java Beans是Java的可重用组件。,JavaBeans是一个十分完整的组件模型,它能够支持标准组件技术中的各种特性:属性(properties)、事件(events)、方法(method)和持续性(persistence),javaBean开发步骤,指定,Beans,的属性;,指定,Beans,所产生或响应的事件;,定义,Beans,应公开给其它,Bean,的属性、方法和事件。,1、javabean,一、,java技术,JDBC是用于执行SQL语句的Java应用程序接口,由一组用Java语言编写的类与接口组成。,JDBC类文件和Java小应用程序是存放在客户端,用来访问位于远程服务器上的数据库。,2、JDBC,JDBC驱动程序来访问数据库,过JDBC-ODBC桥驱动程序访问数据库,一、,java技术,J2EE(Java2 Platform Enterprise Edition)平台规范是一个由SUN公司定义的用于简化分布式企业级应用开发与部署的基于组件的模式。,J2EE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持,。,3、J2EE,1.J2EE的层和组件,2.设计用户界面和引擎(Designing the User Interface and Engine ),3.设计基于Web 的应用程序(Designing Web-Based Applications),一、java技术,Servlet是使用Java Servlet应用程序设计接口(API)及相关类和方法的Java程序。Java Servlet API定义了一个servlet 和Java使能的服务器之间的一个标准接口,这使得Servlets具有跨服务器平台的特性。除了Java Servlet API,Servlet还可以使用用以扩展和添加到API的Java类软件包。,Servlet在启用Java的Web服务器上或应用服务器上运行并扩展了该服务器的能力。Java Servlet对于Web服务器就好象Java applet对于Web浏览器,Servlet的主要功能在于可以事先交互式地浏览和修改数据,生成动态Web内容。Servlet装入Web服务器并在Web服务器内执行,而applet装入Web浏览器并在Web浏览器内执行。,4、,java Servlet,一、java技术,Servlet的生命周期在被装入Web服务器的内存时开始,并在终止或重新装入Servlet时结束。Servlet在下列时刻被装入装入Web服务器的内存:,如果已配置自动装入选项,则在启动服务器时自动装入;,在服务器启动后,客户机首次向Servlet发出请求时;,重新装入Servlet时;,装入Servlet后,Web服务器创建一个Servlet实例并且调用Servlet的init()方法。在初始化阶段,Servlet初始化参数被传递给Servlet配置对象,请求处理对于到达服务器的客户机请求,服务器创建对应于请求的一个“请求”对象和一个“响应”对象。然后服务器调用Servlet的service()方法,该方法用于传递“请求”和“响应”对象。service()方法从“请求”对象获得请求信息,处理该请求后并用“响应”对象的方法将响应传回客户机。,当服务器不再需要Servlet,或重新装入Servlet的新实例时,服务器会调用Servlet的destroy()方法,来结束这个Servlet。对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service()方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用init()方法,所以一般情况下Servlet只初始化一次。,4、,java Servlet-,生命周期,一、java技术,Servlet可以和其他资源(文件、数据库、Applet、Java应用程序等)交互,以生成返回给客户端的响应内容,如果需要,还可以保存请求响应过程中的信息。,采用Servlet,服务器可以完全授权对本地资源的访问(如数据库),并且Servlet自身将会控制外部用户的访问数量及访问性质。,Servlet可以是其它服务的客户端程序。例如,它们可以用于分布式的应用系统中,可以从本地硬盘,或者通过网络从远端硬盘激活Servlet。,Servlet可被链接。一个Servlet可以调用另一个或一系列Servlet,即成为它的客户端。,采用ServletTag技术,可以在HTML页面中动态调用Servlet。,Servlet API与协议无关,它并不对传递它的协议有任何假设。,4、,java Servlet-,优势,一、java技术,视图:视图主要由JSP建立,在struts中,JSP可以使用扩展自定义标签库(TagLib)来简化创建完全国际化用户界面。目前的标签库包括:Bean Tags、HTML tags、Logic Tags、Nested Tags 以及Template Tags等。,模型:模型主要表示一个系统的状态,在Struts的体系结构中,在Struts中,系统的状态主要有ActiomForm Bean体现,一般情况下,这些状态是非持久性的。,控制器:在struts中,基本的控制器组件是ActionServlet类中的实例servelt,实际使用的servlet在配置文件中由一组映射(由ActionMapping类进行描述)进行定义。对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成的,其中Action扮演了真正的业务逻辑的实现者,ActionMapping与ActionForward则指定了不同业务逻辑或流程的运行方向。struts-config.xml 文件配置控制器。,5、Struts,一、java技术,Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。Spring框架最开始的部分是由Rod Johnson于2000年为伦敦的金融界提供独立咨询业务时写出来的。Spring 框架是一个分层架构,由 7 个定义良好的模块组成。,6、Spring,二、JSP技术,程序可以跨台平执行。目前几乎所有平台上都可以见到一致的java servlet/jsp的Web Server/Application Serve系统。JSP可以让开发人员在任意环境做开发,在任意环境进行系统部署,在任意环境扩展应用程序。,多样化和功能强大的开发工具支持。这一点与ASP很像,Java已经有了许多非常优秀的开发工具而且有许多可以免费得到,并且其中的许多已经可以顺利的运行于多种平台之下。,强大的的可伸缩性。从只有一个小的jar文件就可以运行servlet/jsp到由多台服务器进行集群和负载均横,到多台Application进行事务处理、消息处理.一台服务器到无数以服务器,Java显示了一个巨人的生命力。,高效的性能。对ASP、PHPP、JSP三种语言分别做回圈性能测试及存取Oracle数据库测试。在循环性能测试中,JSP只用了的四秒钟就结束了2000020000的回圈,ASP、PHP测试的是20002000循环使用了63秒和84秒。,1、JSP技术概述 优势,二、JSP技术,和,ASP,、,PHP,、,.NET,类似,,Java,的一些优势也是它致命的问题所在。跨平台的功能和极度的伸缩能力极大的增加了产品的复杂性。也就是说,它在扩展时需要的分成多少块,那么,java,系统中就有多少种产品。所以用户要以看到,jre,、,jdk,、,jsdk,、,jswdk,等,实际上它们只要有效的搭配在一起,就可以产生强大的效能,密不可分,但这同时使应用程序变得非常复杂。,JSP,只有对,Java,相当熟悉的人才能用得很好,而目前,Java,程序员还比较少。,JSP,程序调试困难。,JSP,页面首先被转化为一个,.java,文件,(,servlet,),,然后再被编译。这样,出错信息实际上指向的是经过转化的那个,.java,文件而不是,jsp,本身。例如在,.,jsp,文件第一行的错误可能被显示为第,20,行。如果试图通过反跟踪来解决这个问题有时会使结果显得很滑稽。(在,Resin,的引擎中,错误已经可以指向,.,jsp,文件的出错行)。,很难选择合适的,servlet,引擎。目前还没有一个独立的组织来对各种引擎提供独立的,benchmark,测试。提供商只对他们自己的产品提供了,benchmark,测试,但结论通常以数据形式给出,但均回避了稳定性。,1、jsp技术概述不足,二、JSP技术,1.,将内容的生成和显示进行相分离,2.强调可重用组件,3.采用标识简化页面开发,JSP技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且扩展到能够支持企业级的分布式应用。作为采用Java技术家族的一部分,以及Java 2(企业版体系结构)的一个组成部分,JSP技术能够支持高度复杂的基于Web的应用。,由于JSP页面的内置脚本语言是基于Java编程语言的,而且所有的JSP页面都被编译成为Java Servlet,JSP页面就具有Java技术的所有好处,包括健壮的存储管理和安全性。,作为Java平台的一部分,JSP拥有Java编程语言“一次编写,各处运行”的特点。随着越来越多的供应商将JSP支持添加到他们的产品中,您可以使用自己所选择的服务器和工具,更改工具或服务器并不影响当前的应用。,当与Java 2平台,企业版(J2EE)和Enterprise JavaBean技术整合时,JSP页面将提供企业级的扩展性和性能,这对于在虚拟企业中部署基于Web的应用是必需的。,2、,Web应用开发的Java Server Pages技术方法,二、JSP技术,第2行的作用是一个JSP指示将信息传送到JSP引擎。在这个示例中,第一行指出从该页面即将访问的一些Java编程语言的扩展的位置。指示被设置在标记中。,固定模板数据。所有JSP引擎不能识别的标识将随结果页面发送。通常,这些标识是HTML或者XML标识。在上面的例子中包括无序列表(UL)和H1标识。,第5行是JSP动作或者标识。这些通常作为标准或定制标识被实现,并且具有XML标识的语法。在这个例子中,jsp:useBean标识实例化服务器端的Clock JavaBean。,第7行,8行一个表达式。JSP引擎计算在标记间的所有东西。在上面的列表项中,时钟组件(Clock)的Day和Year属性值作为字符串返回,并且作为输出插入到JSP文件中。在上面的例子中,第一个列表项是日子,第二个是年份。,第10至14行小脚本是执行不为标识所支持的功能或者将所有的东西捆绑在一起的小的脚本。JSP 2.0软件的内置脚本语言是基于Java语言的。在上面示例中的小脚本确定现在是上午还是下午,并且据此来欢迎用户。,3、JSP页面,1,2 ,3 Welcome,4 Today is ,5 ,6 ,7 Day: ,8 Year: ,9 ,10 ,11 Good Morning,12 ,13 Good Afternoon,14 ,15 ,16,二、JSP技术,JSP页面使用JSP指示将指令传递到JSP引擎。这其中包括:,JSP页面指示:传递页面相关的信息,例如缓冲区和线程信息或者出错处理。,语言指示:指定脚本语言,以及所有的扩展。,包含指示:(在上面例子中有显示)可以被用来在页面中包含一个外部的文档。一个好的例子是著作权文档或者公司信息文档在一个集中地点保存该文档并且在页面中包含比在各个JSP页面中更新要容易些。当然,被包含的文件也可能是另一个JSP文件。,标识库指示:指出页面可以调用的一个客户标识库。,、,在JSP页面中,绝大多数JSP处理将通过与JSP相关的基于XML的标识完成。JSP1.0中包含大量标准标识,这些标识作为核心标识包括:,jsp:useBean:这个标识声明对一个JavaBeans组件实例的使用。如果该组件的实例不存在,JavaBeans组件将实例化和注册这个标识。,jsp:setProperty:这个标识在组件的实例中设置一个属性的值。,jsp:getProperty:这个标识获取一个组件的实例的属性值,将其转化为字符串,并且将它放入隐含对象out中。,jsp:include:这个标识组件用于包含一个静态或动态的文件。,jsp:forward:这个标识组件用于重定向一个HTML文件、JSP文件或一个程序段。,3、JSP页面,三、用JSP开发Web站点的几种主要方式,对于最小型的Web站点,可以直接使用JSP来构建动态网页,这种站点最为简单,所需要的仅仅是简单的留言板、动态日期等基本的功能。对于这种开发模式,一般可以将所有的动态处理部分都放置在JSP的Scriptlet中,就像一般使用PHP或ASP开发动态网页一样。,1、直接使用JSP,三、用JSP开发Web站点的几种主要方式,中型站点面对的是数据库查询、用户管理和小量的商业业务逻辑。对于这种站点,不能将所有的东西全部交给JSP页面来处理。在单纯的JSP中加入JavaBeans技术将有助于这种中型站的开发。利用JavaBeans,将很容易完成如数据库连接、用户登录与注销、商业业务逻辑封装的任务。如:将常用的数据库连接写为一个JavaBeans,既方便了使用,又可以使JSP文件简单而清晰,通过封装,还可以防止一般的开发人员直接获得数据库的控制权。,2、JSP+JavaBeans,三、用JSP开发Web站点的几种主要方式,无论用ASP还是PHP开发动态网站,长期以来都有一个比较重要的问题,就是网站的逻辑关系和网站的显示页面不容易分开。常常可以看见一些夹杂着if.then、caseselect或是if.和大量显示用的HTML代码的ASP、PHP页面,即使是有着良好的程序写作习惯的程序员,其作品也几乎无法阅读。另一方面,动态Web的开发人员也在抱怨,将网站美工设计的静态页面和动态程序和并的过程是一个异常痛苦的过程。,3、JSP+JavaBeans+Servlet,三、用JSP开发Web站点的几种主要方式,在J2EE开发模型中,整个系统可以分为3个主要的部分:视图、控制器和模型。,视图就是用户界面部分,在Web应用程序中也就是HTML、XML、JSP页面。这个部分主要处理用户看到的东西,动态的JSP部分处理了用户可以看见的动态网页,而静态的网页则由HTML、XML输出。,4、J2EE开发模型,四、理解JSP的两种体系结构,JSP页面中可以非常容易地结合业务逻辑(jsp:useBean)、服务端处理过程(jsp:scriplet)和HTML(),在JSP页面中同时实现显示,业务逻辑和流程控制,从而可以快速地完成应用开发。现在很多的Web应用就是由一组JSP页面构成的。这种以JSP为中心的开发模型称之为Model 1,1、模型1,不足之处,应用的实现一般是基于过程的,一组JSP页面实现一个业务流程,如果要进行改动,必须在多个地方进行修改,这样非常不利于应用扩展和更新。,由于应用不是建立在模块上的,业务逻辑和表示逻辑混合在JSP页面中没有进行抽象和分离,所以非常不利于应用系统业务的重用和改动。,四、理解JSP的两种体系结构,Model 2表示的是基于MVC模式的框架,MVC是“Model View Controller”的缩写。“Model”代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),“View”是应用的表示面(由JSP页面产生),“Controller”是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用,从而弥补了Model 1的不足。,2、模型2,不足之处,必须基于MVC组件的方式重新思考和设计应用结构。原来通过建立一个简单的JSP页面就能实现的应用现在变成了多个步骤的设计和实现过程。,所有的页面和组件必须在MVC框架中实现,所以必须进行附加地开发工作。,。,重点内容:,java,语言特点,Java,数据类型,Java,运算符,Java,循环语句,Java,条件语句,Java,类技术,Java,高级技术,多线程技术,第2章 java语言基础,一、java语言特点,根据Sun公司Java白皮书中的描述:Java是一种简单的、面向对象的、分布式的、解释的、健壮的、安全的结构、中立的、可移植的性能、很优异的、多线程的、动态的语言,它的特点有:,指针,预处理,Goto,类型转换,释放内存,全局变量的定义,数据类型的长度,头文件,二、,java数据类型,Java语言中的数据类型分为简单数据类型和复合数据类型。,简单,数据类型为,Java,语言定义的数据类型,通常是不能由用户修改,的。,复合,数据类型是用户可以根据自已的需要定义,并实现其运算的类型,是由简单数据类型组合而成的,二、,java数据类型,数据类型指的是一组性质相同的值的集合以及定义于这个值集合上的一组操作的总称。Java的简单数据类型包括字符型、整型、浮点型和布尔型,1、简单类型字符型,字符型常量,字符型常量是用单引号括起来的一个字符,如a、A。另外,与C、C+相同,Java也提供转义字符,以反斜杠()开头,将其后的字符转变为另外的含义。与C、C+不同,Java中的字符型数据是16位无符号型数据,它表示Unicode集,而不仅仅是ASC集,例如u0061表示ISO拉丁码的a。,字符型变量,字符型变量的类型为char,它在机器中占16位,其范围为065535。字符型变量的定义如:,char c=a;/指定变量c为char型,且赋初值为a,二、,java数据类型,Java的整型数据类型分为整型常量和变量,1、简单类型整型,整型常量,Java的整型常量有三种形式:,(1)十进制整数,如:123、456、0。,(2)八进制整数,以0开头,如:0123表示十进制数83、011表示十进制数9。,(3)十六进制整数,以0x或0X开头,如0x123表示十进制数291,0X12表示十进制数18。,整型常量占32位,具有int型的值,对于long型值,则要在数字后加L或l,如123L表示一个长整数,它占64位。,整型变量,整型变量的类型有byte、short、int、long这4种。,int类型是最常使用的一种整数类型。它所表示的数据范围很大,适合于32位、64位处理器。但对于大型计算,常会遇到很大的整数,超出int类型所表示的范围,这时要使用long类型。,二、,java数据类型,Java的浮点型数据类型分为浮点型常量和变量,1、简单类型浮点型,浮点型常量,Java的浮点型常量有两种表示形式:,(1)十进制数形式,由数字和小数点组成,且必须有小数点,如:0.123、123、123、123.0。,(2)科学计数法形式。如:123e3或123E3,其中e或E之前必须有数字,且e或E后面的指数必须为整数。,浮点型常量在机器中占64位,具有double型的值。对于float型的值,则要在数字后加f或F,如12.3F,它在机器中占32位,且表示精度较低。,浮点型变量,浮点型变量的类型有float和double两种,双精度类型double比单精度类型float具有更高的精度和更大的表示范围,常常使用。,二、,java数据类型,布尔型数据只有两个值true和false,布尔型变量的定义如:,boolean b=true;/定义b为布尔型变量,且初值为true,1、简单类型布尔型及类型转换,整型、浮点型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。转换从低级到高级。转换规则如表2.4所示。,其中,类型1、2表示参与运算的数据类型,运算符可以为加、减、乘、除等,右边表示转换成的数据类型。,二、java数据类型,一维数组可以看作一个线性表。一维数组中每个元素都有一个下标以确定元素的位置。一维数组是最简单的数组。,一维数组的定义方式为:,type Name,;,其中类型“,type”,可以为,Java,中任意的数据类型,包括简单类型和组合类型,数组名“,Name”,为一个合法的标识符,“,”,指明该变量是一个数组类型变量。,2、,数组,注意:也可以将数组名放在“”后面,例如:,int al;,二、java数据类型,Java中多维数组被看作数组的数组。例如二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。,二维数组的定义方式为:,type Name;,例如:int Array;,对多维数组来说,分配内存空间有下面几种方法:,(1)直接为每一维分配空间,如:,int a=new int23;,(2)从最高维开始,分别为每一维分配空间,例如:,int a=new int2;,a0=new int3;,a1=new int3;,2、,数组,多维数组的初始化有两种方法:,(1)直接对每个元素进行赋值。,(2)在定义数组的同时进行初始化。,三、运算符,运算符是进行特定类型运算的符号,按操作数的数目来分,可以分为:,一元运算符(如“+”,“-”),二元运算符(如“+”,“”),三元运算符(如“?:”),它们分别对应于一个、两个和三个操作数。对于一元运算符来说,可以有前缀表达式,如“+i”和后缀表达式,如“i+”,对于二元运算符来说则采用中缀表达式,如“a+b”。,按照运算符功能来分,基本的运算符有下面几类:,算术运算符:+,-,*,/,%,+,-,关系运算符:,=,&,|,,赋值运算:=,及其扩展赋值运算符,如+=,条件运算符:?:,其它:包括分量运算符,下标运算符,实例运算符instanceof,内存分配运算符new,强制类型转换运算符(类型),方法调用运算符()等。,三、运算符,算术运算符用于对整型数或者浮点数进行运算。Java语言中的算术运算符包括一元运算符和二元运算符。所谓的几元运算符即参加运算的操作数的个数。,1、算术运算符,三、运算符,位运算符用来对二进制位进行操作,它允许操作一个整数主数据类型中的单个“比特”(即二进制位),位运算符会对两个自变量中对应的位执行布尔代数,并最终生成一个结果。位运算符中,除“”以外,其余均为二元算术运算符。,2、整数位运算符,三、运算符,关系运算符用来比较两个值,返回布尔类型的值true或false,而且,关系运算符都是二元运算符。,关系运算符包括小于()、小于或等于(=)、等于(=)以及不等于(!=)。,3、关系运算符,三、运算符,布尔逻辑运算用于进行布尔类型数据的逻辑运算,布尔逻辑运算符有三个:,&,、,|,和,!,,如表,2.9,所示。它们的运算规则如下:,仅当两个操作数的值均为,true,时,,&,运算的结果才是,true,,否则都是,false,;,仅当两个操作数的值均为,false,时,,|,运算的结果才是,false,,否则都是,true,。,4、布尔运算符,三、运算符,赋值运算符用于把一个数值赋予一个变量。赋值运算符两边的类型不一致时,那么如果左侧变量的数据类型的级别高,则右边的数据将被转化成左边的数据类型在赋予左边的变量,否则需要进行强制类型转换,5、赋值运算符,三、运算符,条件运算符“?:”为三元运算符,它的作用是根据表达式的真假决定变量的值。其一般形式为:,A?B:C,其中,A是返回值为布尔型的表达式,如果这个值为true,那么这个语句返回B,否则返回C。而且语句B和C需要返回相同的数据类型,且该类型不能是void。条件运算符是ifelse语句的简略方式。,例如:radio=heom=0?0:num/heom;,该例中,如果heom=0,则radio=0,否则radio=num/heom。,6、条件运算符,三、运算符,在对一个表达式进行运算时,要按运算符的优先顺序从高向低进行,同级的运算符则按从左到右的方向进行。运算符的优先顺序如表2.11所示。,7、运算符优先级,四、条件语句,分支语句的作用为根据条件表达式决定执行程序的某一部分而不执行另外一部分。if.else语句根据判定条件的布尔值来决定执行哪个操作。Ifelse的一般格式是:,expression是返回值为布尔型的表达式。在第一种格式中,if根据expression的值判定是否执行statement语句;第二种格式中,如果expression的值为true,则执行statement1,否则执行statement2。每个单一的语句后都必须有分号。statement1、statement2语句可以为复合语句。if.else还有一种特殊格式为:,五、循环语句,循环语句的作用是反复执行一段代码,直到满足终止循环的条件为止,一个循环一般应包括4部分内容。,初始化部分(initialization):用来设置循环的一些初始条件,如计数器清零等。,循环体部分(body):这是反复循环的一段代码,可以是单一的一条语句,也可以是复合语句。,迭代部分(iteration):这是在当前循环结束,下一次循环开始前执行的语句,常常用来使计数器加1或减1。,终止部分(termination):通常是一个布尔表达式,每一次循环都要对该表达式求值,以验证是否满足循环终止条件。,Java中提供的循环语句有:while语句,do-while语句和for语句。,五、循环语句,while语句的一般格式是:,while(expression),Statement;,1、while与dowhile语句,dowhile语句的一般格式是:,do,statement,While,(expression),执行的过程与while语句类似,不过,dowhile语句首先执行一遍大括号中的statement,然后再判断expression的值。不过,在实际应用中,while比do-while更常用一些。,expression是一个布尔型的变量或者是一条返回值布尔型的语句,while语句首先检测expression的值,如果这个值为true,则程序接着执行statement,并且初始化部分和迭代部分是任选的。执行结束之后,while再次判断expression的值,周而复始。如果expression的值为false,则程序跳过大括号中的语句转向下面的执行语句。,五、循环语句,for语句的一般格式为:,for(expression;expression1;expression2),statement,expression是初始化语句,这个语句在循环开始前执行,这部分通常进行给循环计数变量赋初值等初始化操作;expression1是循环结束条件;expression2在每一次循环结束后调用。这三部分之间由分号“;”隔开,每部分都可以是空语句,但是分号不能省略。初始化、终止以及迭代部分均为空的时候,相当于一个无限循环。例如:for(;)forever();,for语句执行时,首先执行初始化操作,然后判断终止条件是否满足,如果满足,则执行循环体中的语句,最后执行迭代部分。完成一次循环后,重新判断终止条件。,2、for循环,六、循环退出语句,在任何循环语句的主体部分,亦可用break、return、continue控制循环的流程。其中,,break,用于强行退出循环,不执行循环中剩余的语句;,return,语句从当前方法中退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续程序的执行;,continue,则停止执行当前的反复,然后退回循环起始处,开始新的反复。,1、break语句,break的一般格式是:,break label;,如果没有label的标号,则break使得程序从循环体或者switch中跳转出来;如果有label标号,则程序跳转到标号所指明的程序块开头,这种情况下相当于C+中goto语句。,例如:,while(true)i+;if(i50)break;。,/当i等于51时跳出循环,六、循环退出语句,return语句是从当前方法返回到调用该方法的语句处,该返回语句有两种格式:,(1)return expression;,返回一个值给调用该方法的语句,返回值的数据类型必须和方法声明中的返回值类型一致。可以使用强制类型转换来使类型一致。,(2)return;,当方法说明中用void声明返回类型为空时,应使用这种格式,它不返回任何值。,在Java中,单独的return语句用在一个循环体的中间时,会产生编译错误,因为这时会有一些语句执行不到。但可以通过把return语句嵌入某些语句,如if-else,来使程序在未执行完方法中的所有语句时退出。,2、return语句,六、循环退出语句,continue语句的一般格式为:,continuelabel;,没有label时,continue语句结束本次循环,跳过循环体中以下的语句,接着进行循环语句中结束条件的判断;有label标号的时候,continue可以跳转到label标号所指明的外层循环,3、continue语句,for(int i=0;i10;i+),/外层循环,for(intj=0;ji),continue outer;,七、分支语句,switch语句能够根据表达式的值决定执行多个操作中的一个或者几个。,switch (expression),case value1:statement1;,break;,case valueN:statemendN;,break;,default:default_Statement;,七、分支语句,分支语句示例:运行结果:,Number of Days=31,1public class SwitchDemo ,2 public static void main(String args) ,3 int month = 5;,4 int year = 2005;,5 int numDays = 0;,6 switch (month) ,7 case 1:,8 case 3:,9 case 5:,10 case 7:,11 case 8:,12 case 10:,13 case 12:,14 numDays = 31;,15 break;,16 case 4:,17 case 6:,18 case 9:,19 case 11:,20 numDays = 30;,21 break;,22 case 2:,23 if (year % 4 = 0) & !(year % 100 = 0) | (year % 400 = 0) ,24 numDays = 29;,25 else ,26 numDays = 28;,27 ,28 break;,29 ,30 System.out.println(Number of Days= + numDays);,31 ,32,八、java强制类型转换,简单数据类型的强制转换,高级数据要转换成低级数据,需用到强制类型转换,如:int i;,byte b=(byte)i;/把int型变量i强制转换为byte型,注意:这种使用可能会导致溢出或精度的下降。,简单数据类型和对象之间的强制转换比较复杂,例:,System.Object o=new Jeff(ConstructorParam1),编译通过并正确执行,例:Jeff j=o;,为了能通过编译,必须插入如下的强制类型转换:,Jeff j=(Jeff)o;,然后就可以编译通过并成功执行。,例子:,System.Object o=new System.Object();,Jeff j=(Jeff)o;,第一行创建了一个System.Object类型对象。第二行代码试图将System.Object引用类型转换为Jeff引用类型。两行代码都能编译通过。但是在执行的时候,第二行代码产生一个InvalidCastException异常,如果捕获不到这个异常,将强制应用程序终止。,当第二行代码执行时,公共语言运行时查证o所指的对象就是Jeff类型对象(或任何Jeff派生类型)。如果是,则公共语言运行时允许强制类型转换。否则,如果o所指的对象与Jeff类型无关,或是一个Jeff的基类,则公共语言运行时会预防这种不安全的强制类型转换并产生InvalidCastException异常。,八、java类基础,类是Java语言面向对象编程的基本元素,它定义了一个对象的结构和行为,是这一类对象的原型。在Java程序里,将要表达的概念封装在某个类里。一个类定义了一个对象的结构和它的功能接口,功能接口称为成员函数。当Java程序运行时,系统用类的定义创建类的实例,类的实例是真正的对象。,在Java中,类定义的一般形式如下Modifierclass classNameextends superClassName,classBody,简单的类的定义:class University,例子:,1class Ponit ,2 int x, y;,3 void init(int ix, int iy) ,4 x = ix;,5 y = iy;,6 ,7,1、类的声明和类体,八、java类基础,成员变量是一个对象区别于其他对象的特征,它决定了对象的外观、状态、以及其他的一些特性。成员变量具有着确定的值,最简单的成员变量的声明为:type variableName;,成员变量的类型可以是Java中的任意数据类型,包括简单类型、数组、类和接口。在一个类中,成员变量应该是唯一的,,成员变量的名字可以和类中某个方法的名字相同,类的成员变量和在方法中所声明的局部变量是不同的,成员变量的作用域是整个类,而局部变量的作用域只是方法内部。,例:,class Point,int x,y;,int x(),return x;,例子中方法x()和变量x具有相同的名字。,class TransientVar,transient TransientV;,transient声明一个暂时性变量,在缺省情况下,类中所有变量都是对象永久状态的一部分,当对象被存档时,这些变量必须同时被保存。用transient限定的变量则指示Java虚拟机,该变量并不属于对象的永久状态。它主要用于实现不同对象的存档功能。,2、成员的声明,八、java类基础,类的行为决定了它的实例的行为,即当一个实例接收到其他实例(可能是其他的类的实例)发送来的消息或者它自身的属性改变时所执行的操作。行为是对象提供服务的方式。,方法调用的格式为:,objectReference.methodName (paramlist);,objectreference是指向某个对象的变量,methodname是objectreference所属类的一个成员函数,paramlist是用逗号分隔的变量或表达式的序列,它们要与该成员函数的定义的参数个数及类型匹配。,例如,要设置对象p的firstName和lastName,可以用,p.setName(Karl,Grouch);,3、方法的调用,八、java类基础,Java在类里提供了一个特殊的成员函数,叫做构造函数(Constructor)。所有的Java类都有构造函数。,例如,Stack类的构造函数的名字为Stack,而,Rectangle类的构造函数的名字为Rectangle,Thread类的构造函数的名字为Thread。,一个构造函数是对象被创建时初始对象的成员函数。它具有和它所在的类完全一样的名字。一旦定义好一个构造函数,创建对象时就会自动调用它。构造函数没有返回类型,即使是void类型也没有。这是因为一个类的构造函数的返回值的类型就是这个类本身。构造函数的任务是初始化一个对象的内部状态,所以用new操作符创建一个实例后,立刻就会得到一个清楚、可用的对象。如果没有实现类的构造方法,则Java运行时系统会自动提供缺省的构造方法,它没有任何参数。,1class University ,2 String name, city;,3 University(String name, String city) ,4 this.name = name;,5 this.city = city;,6 ,7,8class UniversityCreate ,9,10 public static void main(String args) ,11 University u = new University(清华大学, 北京);,12 System.out.println(大学: + u.name + 城市: + u.city);,13 ,14,运行结果如下:,大学:清华大学城市:北京,4、构造函数,八、java类基础,Java语言实现了成员函数重载,即可以创建几个名字相同、参数不同的成员函数,但是其参数必须不同,或者是参数个数不同,亦或者是参数类型不同。重载提供了Java的多态行为。,15 boolean samecity(University u) ,16 return samecity(u.city);,17 ,18,19class UniversityCity ,20,21 public static void main(String args) ,22 String city = 上海;,23 University u1 = new University(北京大学, 北京);,24 University u2 = new University(清华大学, 北京);,25 System.out.println(u1= + u1.name + , + u1.city);,26 System.out.println(u2= + u2.name + , + u2.city);,27 System.out.println(city= + city);,28 System.out.println(u1.samecity(u2)= + u1.samecity(u2);,29 System.out.println(u1.samecity(city)= + u1.samecity(city);,30 ,31,1class University ,2 String name, city,3 University(String name, String city) ,4 this.name = name;,5 this.city = city;,6 ,7,8 boolean samecity(String city) ,9 if (city.equals(this.city) ,10 return true;,11 else ,12 return false;,13 ,14 ,5、重载,执行结果:C:java UniversityCity,u1=北京大学,北京,u2=清华大学,北京,city=上海,u1.samecity(u2)=true,u1.samecity(city)=false,八、java类基础,6 继承,在Java语言中是通过在类的声明中加入extends子句来创建一个类的子类的,其格式如下:,class SubClass extends SuperClass,extends子句就是用来指明类之间的继承关系的。一个类是它的extends子句中指定的类的直接子类,而extends子句中指定的类又是这个类的直接父类。例子中把SubClass声明为SuperClass的直接子类,如果SuperClass又是某个类的子类,则SubClass同时也是该类的(间接)子类。如果缺省extends子句,则该类为java.lang.Object的子类。子类可以继承父类中访问权限设定为public、protected、friendly的成员变量和方法。,1class superClass ,2 static int x = 1;,3 int y = 2;,4 static int z = 3;,5 String str = superClass;,6,7class subClass extends superClass ,8,9 static double x = 1.2;,10 float y = 2.3f;,11 String z = subclass;,12,13public class FieldExtend ,14,15 public static void main(String args) ,16 subClass s = new subClass();,17 System.out.println(s.x= + s.x);,18 System.out.println(s.y= + s.y);,19 System.out.println(s.z= + s.z);,20 System.out.println(s.str= + s.str);,21 System.out.println(superClass)s).y= + (superClass) s).y);,22 ,23,6、继承,运行结果:,s.x=1.2,s.y=2.3,s.z=subClass,s.str=superClass,(superClass)s).y=2,九、java高级类技术,所谓抽象类是指这种类没有具体对象的一种概念类。这样的类就是Java语言的abstract类。抽象类是一种非完整类,因此,这些类不能直接用new操作符生成实例。,当下列几个条件中的任一个成立时,就认为该类中包含抽象方法:,包含有一个抽象方法的声明;,从直接父类中继承了一个抽象方法;,在类的直接超接口中说明或继承了某个抽象方法,但是在这个类中既没有再声明一个方法来实现它、也没有继承一个方法来实现它。,实例:,代码如右,运行结果为:,C:java Abstract,在B的callme成员函数里,在A的metoo成员函数里,1abstract class A ,2 abstract void callme();,3 void metoo() ,4 system.out.println(在A的metoo成员函数里);,5 ,6,7class B extends A ,8,9 void callme() ,10 System.out.println(在B的callme成员函数里);,11 ,12,13class Abstract ,14,15 public static void main(String args) ,16 A a = new B();,17 a.callme();,18 a.metoo();,19 ,20,1、抽象类,九、java高级类技术,匿名类是一种特殊的内部类,它是在一个表达式内部包含一个完整的类定义。,实例:,代码如右,运行结果为:,Java is great!,1abstract class AnAnonymousClass ,2 abstract void go();,3,4public class Foo ,5,6 public static void main(String args) ,7 final String str =,8 Java is
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!