JSP实用简明教程第二版.ppt

上传人:max****ui 文档编号:11549381 上传时间:2020-04-28 格式:PPT 页数:389 大小:6.58MB
返回 下载 相关 举报
JSP实用简明教程第二版.ppt_第1页
第1页 / 共389页
JSP实用简明教程第二版.ppt_第2页
第2页 / 共389页
JSP实用简明教程第二版.ppt_第3页
第3页 / 共389页
点击查看更多>>
资源描述
重点内容:java技术jsp技术Jsp两种体系结构,第1章概述,一、java技术,JavaBeans是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(Java2PlatformEnterpriseEdition)平台规范是一个由SUN公司定义的用于简化分布式企业级应用开发与部署的基于组件的模式。J2EE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持。,3、J2EE,1.J2EE的层和组件2.设计用户界面和引擎(DesigningtheUserInterfaceandEngine)3.设计基于Web的应用程序(DesigningWeb-BasedApplications),一、java技术,Servlet是使用JavaServlet应用程序设计接口(API)及相关类和方法的Java程序。JavaServletAPI定义了一个servlet和Java使能的服务器之间的一个标准接口,这使得Servlets具有跨服务器平台的特性。除了JavaServletAPI,Servlet还可以使用用以扩展和添加到API的Java类软件包。Servlet在启用Java的Web服务器上或应用服务器上运行并扩展了该服务器的能力。JavaServlet对于Web服务器就好象Javaapplet对于Web浏览器,Servlet的主要功能在于可以事先交互式地浏览和修改数据,生成动态Web内容。Servlet装入Web服务器并在Web服务器内执行,而applet装入Web浏览器并在Web浏览器内执行。,4、javaServlet,一、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、javaServlet-生命周期,一、java技术,Servlet可以和其他资源(文件、数据库、Applet、Java应用程序等)交互,以生成返回给客户端的响应内容,如果需要,还可以保存请求响应过程中的信息。采用Servlet,服务器可以完全授权对本地资源的访问(如数据库),并且Servlet自身将会控制外部用户的访问数量及访问性质。Servlet可以是其它服务的客户端程序。例如,它们可以用于分布式的应用系统中,可以从本地硬盘,或者通过网络从远端硬盘激活Servlet。Servlet可被链接。一个Servlet可以调用另一个或一系列Servlet,即成为它的客户端。采用ServletTag技术,可以在HTML页面中动态调用Servlet。ServletAPI与协议无关,它并不对传递它的协议有任何假设。,4、javaServlet-优势,一、java技术,视图:视图主要由JSP建立,在struts中,JSP可以使用扩展自定义标签库(TagLib)来简化创建完全国际化用户界面。目前的标签库包括:BeanTags、HTMLtags、LogicTags、NestedTags以及TemplateTags等。模型:模型主要表示一个系统的状态,在Struts的体系结构中,在Struts中,系统的状态主要有ActiomFormBean体现,一般情况下,这些状态是非持久性的。控制器:在struts中,基本的控制器组件是ActionServlet类中的实例servelt,实际使用的servlet在配置文件中由一组映射(由ActionMapping类进行描述)进行定义。对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成的,其中Action扮演了真正的业务逻辑的实现者,ActionMapping与ActionForward则指定了不同业务逻辑或流程的运行方向。struts-config.xml文件配置控制器。,5、Struts,一、java技术,Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。Spring框架最开始的部分是由RodJohnson于2000年为伦敦的金融界提供独立咨询业务时写出来的。Spring框架是一个分层架构,由7个定义良好的模块组成。,6、Spring,二、JSP技术,程序可以跨台平执行。目前几乎所有平台上都可以见到一致的javaservlet/jsp的WebServer/ApplicationServe系统。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技术家族的一部分,以及Java2(企业版体系结构)的一个组成部分,JSP技术能够支持高度复杂的基于Web的应用。由于JSP页面的内置脚本语言是基于Java编程语言的,而且所有的JSP页面都被编译成为JavaServlet,JSP页面就具有Java技术的所有好处,包括健壮的存储管理和安全性。作为Java平台的一部分,JSP拥有Java编程语言“一次编写,各处运行”的特点。随着越来越多的供应商将JSP支持添加到他们的产品中,您可以使用自己所选择的服务器和工具,更改工具或服务器并不影响当前的应用。当与Java2平台,企业版(J2EE)和EnterpriseJavaBean技术整合时,JSP页面将提供企业级的扩展性和性能,这对于在虚拟企业中部署基于Web的应用是必需的。,2、Web应用开发的JavaServerPages技术方法,二、JSP技术,第2行的作用是一个JSP指示将信息传送到JSP引擎。在这个示例中,第一行指出从该页面即将访问的一些Java编程语言的扩展的位置。指示被设置在标记中。固定模板数据。所有JSP引擎不能识别的标识将随结果页面发送。通常,这些标识是HTML或者XML标识。在上面的例子中包括无序列表(UL)和H1标识。第5行是JSP动作或者标识。这些通常作为标准或定制标识被实现,并且具有XML标识的语法。在这个例子中,jsp:useBean标识实例化服务器端的ClockJavaBean。第7行,8行一个表达式。JSP引擎计算在标记间的所有东西。在上面的列表项中,时钟组件(Clock)的Day和Year属性值作为字符串返回,并且作为输出插入到JSP文件中。在上面的例子中,第一个列表项是日子,第二个是年份。第10至14行小脚本是执行不为标识所支持的功能或者将所有的东西捆绑在一起的小的脚本。JSP2.0软件的内置脚本语言是基于Java语言的。在上面示例中的小脚本确定现在是上午还是下午,并且据此来欢迎用户。,3、JSP页面,123Welcome4Todayis567Day:8Year:91011GoodMorning1213GoodAfternoon141516,二、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为中心的开发模型称之为Model1,1、模型1,不足之处应用的实现一般是基于过程的,一组JSP页面实现一个业务流程,如果要进行改动,必须在多个地方进行修改,这样非常不利于应用扩展和更新。由于应用不是建立在模块上的,业务逻辑和表示逻辑混合在JSP页面中没有进行抽象和分离,所以非常不利于应用系统业务的重用和改动。,四、理解JSP的两种体系结构,Model2表示的是基于MVC模式的框架,MVC是“ModelViewController”的缩写。“Model”代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),“View”是应用的表示面(由JSP页面产生),“Controller”是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用,从而弥补了Model1的不足。,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。字符型变量的定义如:charc=a;/指定变量c为char型,且赋初值为a,二、java数据类型,Java的整型数据类型分为整型常量和变量,1、简单类型整型,整型常量Java的整型常量有三种形式:(1)十进制整数,如:123、456、0。(2)八进制整数,以0开头,如:0123表示十进制数83、011表示十进制数9。(3)十六进制整数,以0 x或0X开头,如0 x123表示十进制数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,布尔型变量的定义如:booleanb=true;/定义b为布尔型变量,且初值为true,1、简单类型布尔型及类型转换,整型、浮点型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。转换从低级到高级。转换规则如表2.4所示。其中,类型1、2表示参与运算的数据类型,运算符可以为加、减、乘、除等,右边表示转换成的数据类型。,二、java数据类型,一维数组可以看作一个线性表。一维数组中每个元素都有一个下标以确定元素的位置。一维数组是最简单的数组。一维数组的定义方式为:typeName;其中类型“type”可以为Java中任意的数据类型,包括简单类型和组合类型,数组名“Name”为一个合法的标识符,“”指明该变量是一个数组类型变量。,2、数组,注意:也可以将数组名放在“”后面,例如:intal;,二、java数据类型,Java中多维数组被看作数组的数组。例如二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。二维数组的定义方式为:typeName;例如:intArray;对多维数组来说,分配内存空间有下面几种方法:(1)直接为每一维分配空间,如:inta=newint23;(2)从最高维开始,分别为每一维分配空间,例如:inta=newint2;a0=newint3;a1=newint3;,2、数组,多维数组的初始化有两种方法:(1)直接对每个元素进行赋值。(2)在定义数组的同时进行初始化。,三、运算符,运算符是进行特定类型运算的符号,按操作数的数目来分,可以分为:一元运算符(如“+”,“-”)二元运算符(如“+”,“”)三元运算符(如“?:”)它们分别对应于一个、两个和三个操作数。对于一元运算符来说,可以有前缀表达式,如“+i”和后缀表达式,如“i+”,对于二元运算符来说则采用中缀表达式,如“a+b”。按照运算符功能来分,基本的运算符有下面几类:算术运算符:+,-,*,/,%,+,-关系运算符:,=,,1、while与dowhile语句,dowhile语句的一般格式是:dostatementWhile(expression)执行的过程与while语句类似,不过,dowhile语句首先执行一遍大括号中的statement,然后再判断expression的值。不过,在实际应用中,while比do-while更常用一些。,expression是一个布尔型的变量或者是一条返回值布尔型的语句,while语句首先检测expression的值,如果这个值为true,则程序接着执行statement,并且初始化部分和迭代部分是任选的。执行结束之后,while再次判断expression的值,周而复始。如果expression的值为false,则程序跳过大括号中的语句转向下面的执行语句。,五、循环语句,for语句的一般格式为:for(expression;expression1;expression2)statementexpression是初始化语句,这个语句在循环开始前执行,这部分通常进行给循环计数变量赋初值等初始化操作;expression1是循环结束条件;expression2在每一次循环结束后调用。这三部分之间由分号“;”隔开,每部分都可以是空语句,但是分号不能省略。初始化、终止以及迭代部分均为空的时候,相当于一个无限循环。例如:for(;)forever();for语句执行时,首先执行初始化操作,然后判断终止条件是否满足,如果满足,则执行循环体中的语句,最后执行迭代部分。完成一次循环后,重新判断终止条件。,2、for循环,六、循环退出语句,在任何循环语句的主体部分,亦可用break、return、continue控制循环的流程。其中,break用于强行退出循环,不执行循环中剩余的语句;return语句从当前方法中退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续程序的执行;continue则停止执行当前的反复,然后退回循环起始处,开始新的反复。,1、break语句,break的一般格式是:breaklabel;如果没有label的标号,则break使得程序从循环体或者switch中跳转出来;如果有label标号,则程序跳转到标号所指明的程序块开头,这种情况下相当于C+中goto语句。例如:while(true)i+;if(i50)break;。/当i等于51时跳出循环,六、循环退出语句,return语句是从当前方法返回到调用该方法的语句处,该返回语句有两种格式:(1)returnexpression;返回一个值给调用该方法的语句,返回值的数据类型必须和方法声明中的返回值类型一致。可以使用强制类型转换来使类型一致。(2)return;当方法说明中用void声明返回类型为空时,应使用这种格式,它不返回任何值。在Java中,单独的return语句用在一个循环体的中间时,会产生编译错误,因为这时会有一些语句执行不到。但可以通过把return语句嵌入某些语句,如if-else,来使程序在未执行完方法中的所有语句时退出。,2、return语句,六、循环退出语句,continue语句的一般格式为:continuelabel;没有label时,continue语句结束本次循环,跳过循环体中以下的语句,接着进行循环语句中结束条件的判断;有label标号的时候,continue可以跳转到label标号所指明的外层循环,3、continue语句,for(inti=0;ii)continueouter;,七、分支语句,switch语句能够根据表达式的值决定执行多个操作中的一个或者几个。,switch(expression)casevalue1:statement1;break;casevalueN:statemendN;break;default:default_Statement;,七、分支语句,分支语句示例:运行结果:NumberofDays=31,1publicclassSwitchDemo2publicstaticvoidmain(Stringargs)3intmonth=5;4intyear=2005;5intnumDays=0;6switch(month)7case1:8case3:9case5:10case7:11case8:12case10:13case12:14numDays=31;,15break;16case4:17case6:18case9:19case11:20numDays=30;21break;22case2:23if(year%4=0)3132,八、java强制类型转换,简单数据类型的强制转换高级数据要转换成低级数据,需用到强制类型转换,如:inti;byteb=(byte)i;/把int型变量i强制转换为byte型注意:这种使用可能会导致溢出或精度的下降。,简单数据类型和对象之间的强制转换比较复杂,例:System.Objecto=newJeff(ConstructorParam1)编译通过并正确执行例:Jeffj=o;为了能通过编译,必须插入如下的强制类型转换:Jeffj=(Jeff)o;然后就可以编译通过并成功执行。,例子:System.Objecto=newSystem.Object();Jeffj=(Jeff)o;第一行创建了一个System.Object类型对象。第二行代码试图将System.Object引用类型转换为Jeff引用类型。两行代码都能编译通过。但是在执行的时候,第二行代码产生一个InvalidCastException异常,如果捕获不到这个异常,将强制应用程序终止。当第二行代码执行时,公共语言运行时查证o所指的对象就是Jeff类型对象(或任何Jeff派生类型)。如果是,则公共语言运行时允许强制类型转换。否则,如果o所指的对象与Jeff类型无关,或是一个Jeff的基类,则公共语言运行时会预防这种不安全的强制类型转换并产生InvalidCastException异常。,八、java类基础,类是Java语言面向对象编程的基本元素,它定义了一个对象的结构和行为,是这一类对象的原型。在Java程序里,将要表达的概念封装在某个类里。一个类定义了一个对象的结构和它的功能接口,功能接口称为成员函数。当Java程序运行时,系统用类的定义创建类的实例,类的实例是真正的对象。,在Java中,类定义的一般形式如下ModifierclassclassNameextendssuperClassNameclassBody简单的类的定义:classUniversity,例子:1classPonit2intx,y;3voidinit(intix,intiy)4x=ix;5y=iy;67,1、类的声明和类体,八、java类基础,成员变量是一个对象区别于其他对象的特征,它决定了对象的外观、状态、以及其他的一些特性。成员变量具有着确定的值最简单的成员变量的声明为:typevariableName;成员变量的类型可以是Java中的任意数据类型,包括简单类型、数组、类和接口。在一个类中,成员变量应该是唯一的,成员变量的名字可以和类中某个方法的名字相同,类的成员变量和在方法中所声明的局部变量是不同的,成员变量的作用域是整个类,而局部变量的作用域只是方法内部。,例:classPointintx,y;intx()returnx;例子中方法x()和变量x具有相同的名字。,classTransientVartransientTransientV;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运行时系统会自动提供缺省的构造方法,它没有任何参数。,1classUniversity2Stringname,city;3University(Stringname,Stringcity)4this.name=name;5this.city=city;678classUniversityCreate910publicstaticvoidmain(Stringargs)11Universityu=newUniversity(清华大学,北京);12System.out.println(大学:+u.name+城市:+u.city);1314,运行结果如下:大学:清华大学城市:北京,4、构造函数,八、java类基础,Java语言实现了成员函数重载,即可以创建几个名字相同、参数不同的成员函数,但是其参数必须不同,或者是参数个数不同,亦或者是参数类型不同。重载提供了Java的多态行为。,15booleansamecity(Universityu)16returnsamecity(u.city);171819classUniversityCity2021publicstaticvoidmain(Stringargs)22Stringcity=上海;23Universityu1=newUniversity(北京大学,北京);24Universityu2=newUniversity(清华大学,北京);25System.out.println(u1=+u1.name+,+u1.city);26System.out.println(u2=+u2.name+,+u2.city);27System.out.println(city=+city);28System.out.println(u1.samecity(u2)=+u1.samecity(u2);29System.out.println(u1.samecity(city)=+u1.samecity(city);3031,1classUniversity2Stringname,city3University(Stringname,Stringcity)4this.name=name;5this.city=city;678booleansamecity(Stringcity)9if(city.equals(this.city)10returntrue;11else12returnfalse;1314,5、重载,执行结果:C:javaUniversityCityu1=北京大学,北京u2=清华大学,北京city=上海u1.samecity(u2)=trueu1.samecity(city)=false,八、java类基础,6继承在Java语言中是通过在类的声明中加入extends子句来创建一个类的子类的,其格式如下:classSubClassextendsSuperClassextends子句就是用来指明类之间的继承关系的。一个类是它的extends子句中指定的类的直接子类,而extends子句中指定的类又是这个类的直接父类。例子中把SubClass声明为SuperClass的直接子类,如果SuperClass又是某个类的子类,则SubClass同时也是该类的(间接)子类。如果缺省extends子句,则该类为java.lang.Object的子类。子类可以继承父类中访问权限设定为public、protected、friendly的成员变量和方法。,1classsuperClass2staticintx=1;3inty=2;4staticintz=3;5Stringstr=superClass;67classsubClassextendssuperClass89staticdoublex=1.2;10floaty=2.3f;11Stringz=subclass;1213publicclassFieldExtend1415publicstaticvoidmain(Stringargs)16subClasss=newsubClass();17System.out.println(s.x=+s.x);18System.out.println(s.y=+s.y);19System.out.println(s.z=+s.z);20System.out.println(s.str=+s.str);21System.out.println(superClass)s).y=+(superClass)s).y);2223,6、继承,运行结果:s.x=1.2s.y=2.3s.z=subClasss.str=superClass(superClass)s).y=2,九、java高级类技术,所谓抽象类是指这种类没有具体对象的一种概念类。这样的类就是Java语言的abstract类。抽象类是一种非完整类,因此,这些类不能直接用new操作符生成实例。当下列几个条件中的任一个成立时,就认为该类中包含抽象方法:包含有一个抽象方法的声明;从直接父类中继承了一个抽象方法;在类的直接超接口中说明或继承了某个抽象方法,但是在这个类中既没有再声明一个方法来实现它、也没有继承一个方法来实现它。实例:代码如右,运行结果为:C:javaAbstract在B的callme成员函数里在A的metoo成员函数里,1abstractclassA2abstractvoidcallme();3voidmetoo()4system.out.println(在A的metoo成员函数里);567classBextendsA89voidcallme()10System.out.println(在B的callme成员函数里);111213classAbstract1415publicstaticvoidmain(Stringargs)16Aa=newB();17a.callme();18a.metoo();1920,1、抽象类,九、java高级类技术,匿名类是一种特殊的内部类,它是在一个表达式内部包含一个完整的类定义。实例:代码如右,运行结果为:Javaisgreat!,1abstractclassAnAnonymousClass2abstractvoidgo();34publicclassFoo56publicstaticvoidmain(Stringargs)7finalStringstr=8Javaisgreat!;9newAnAnonymousClass()1011voidgo()12System.out.println(str);1314.go();1516,2、匿名类,九、java高级类技术,接口是组件化编程的一个重要内容,熟练掌握和使用接口(Interface)将会大大减轻编程的工作量,提高代码的可重用性。Java包提供了一种命名机制和可见性限制机制。Pacakge语句用于指定类所在的包,而import语句则引入某个包中的类。(1)package语句package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。它的格式为:packagepkg1.pkg2.pkg3;Java编译器把包对应于文件系统的目录管理。例如:名为myPackage的包中,所有类文件都存储在myPackage目录下。同时,在package语句中,用“.”来指明目录的层次,例如:packagejava.awt.image;/指定这个包中的文件存储在java/awt/image目录下。,2)import语句import语句可以引入所需要的类,其的格式为:importpackage1.package2.(classname|*);其中package1.package2表明包的层次,与package语句相同,它对应于文件目录;classname则指明所要引入的类,如果要从一个包中引入多个类,则可以用星号“*”来代替。例如:importjava.awt.*;importjava.util.Date;Java编译器为所有程序自动引入包java.lang,因此不必用import语句引入它包含的所有的类,但是若需要使用其他包中的类,必须用import语句引入。例如,类Date包含在包java.util中,就可以用import语句引入它以实现它的子类myDate:importjava.util.*;classmyDateextendsDate或直接引入该类:classmyDateextendsjava.util.Date,3、包和接口,九、java高级类技术,接口是组件之间的协议,描述了组件对外提供的服务。从技术上讲接口是一组包含了函数型方法的数据结构,通过这组数据结构,客户代码可以调用组件对象的功能。接口可以从父接口中继承。接口的声明接口声明的格式为:publicinterfaceinterfaceNameextendslistOfSuperInterface其中public指明任意类均可以使用这个接口,缺省情况下,只有与该接口定义在同一个包中的类才可以访问这个接口;Interface是接口关键字,且必须为interface;interfaceName是接口名称;extends子句与类声明中的extends子句基本相同,不同的是一个接口可以有多个父接口,用逗号隔开,而一个类只能有一个父类。子接口继承父接口中所有的常量和方法。,interfaceCollectionintMAX_NUM=100;voidadd(Objectobj);voiddelete(Objectobj);Objectfind(Objectobj);intcurrentCount();例子中声明了一个常量和4个方法。,3、包和接口,九、java高级类技术,在类的声明中用implements子句来表示一个类使用某个接口,在类体中可以使用接口中定义的常量,而且必须实现接口中定义的所有方法。一个类可以实现多个接口,在implements子句中用逗号分隔。实例:代码见右面运行结果为:1Two,1interfaceIOne2intsn=1;3publicvoidSth(doubled);45interfaceITwo6Stringsn=Two;7publicvoidSth(inti);89publicclassSameNameimplementsIOne,ITwo10publicvoidSth(doubled)1112publicvoidSth(inti)1314publicSameName()1516publicstaticvoidmain(Stringargs)17SameNametest=newSameName();18System.out.println(IOne)test).sn);19/打印IOne里面的sn20System.out.println(ITwo)test).sn);21/打印ITwo里面的sn2223,3、包和接口接口实现,九、java高级类技术,口和抽象类的区别接口和抽象类同时都可以声明抽象方法和属性,其抽象方法也能为非抽象类所实现,但它们之间还是有区别的:接口中的所有方法都必须是抽象方法,留给实现接口的类来实现;类可以执行许多接口,但只有一个父类;接口不是类分级结构的一部分,而没有联系的类可以执行相同的接口;一个接口和抽象类的区别的例子:1publicabstractclassTestAbstract2publicTestAbstract()34abstractpublicintaFunc();5publicstaticvoidmain(Stringargs)6System.out.println(CanRun!);78例子中,第4行定义了抽象方法aFunc(),表明该类TestAbstract是抽象类。,3、包和接口接口和抽象类区别,十、多线程技术,多线程编程是可将程序任务分成几个并行的子任务。其工作原理是:主程序有一个消息循环,不断从消息队列中读入消息来决定下一步所要干的事情,一般是一个子函数,只有等这个子函数执行完返回后,主程序才能接收另外的消息来执行。比如子函数功能是在读一个网络数据或读一个文件,只有等读完这些数据或文件才能接收下一个消息。在执行这个子函数过程中你什么也不能干。但往往读网络数据和等待用户输入有很多时间处于等待状态,多线程利用这个特点将任务分成多个并发任务后,就可以解决这个问题。Java语言里,线程表现为线程类,线程类封装了所有需要的线程操作控制。一旦一个Java程序启动后,就已经有一个线程在运行。这时可通过调用Thread.currentThread函数来查看当前运行的是哪一个线程。,1、多线程定义,十、多线程技术,程的优先级(Priority)决定该线程的重要程序有多大,即线程运行的顺序以及从处理器中获得的时间数量如何。Java线程的优先级可由用户来设置,线程的优先级是由一个整数表示,这个整数越大则线程的优先级越大。Java优先级的范围在Thread.MIN_PRIORITY和Thread.MAX_PRIORITY之间。缺省情况下线程的优先级是Thread.NORM_PRIORITY。Thread类提供了setPriority()和getPriority()方法来设置和读取优先级。如果遇到两个优先级相同的线程,调度器将以轮转调度(Round-Robin)算法选择一个线程运行。这个被选择的线程将一直运行,直至下面的某个条件为真,另外一个线程才有机会得到CPU资源而运行。(1)一个具有更高线程优先级的线程进入可运行状态。(2)这个线程结束运行。(3)在分时操作系统上,时间片到期。分时操作系统把CPU时间分成一个一个的时间片,操作系统轮流地把每个时间片分给各个并发线程,每个线程一次只能运行一个时间片。当时间片计数到时后,系统选择另一个线程并分给它时间片,让其投入运行,如此循环反复。,2、多线程优先级,十、多线程技术,因为多线程提供了程序的异步执行的功能,所以在必要时必须还提供一种同步机制。例如,想两个线程通讯并共享一个复杂的数据结构,就需要一种机制让他们相互牵制并正确执行。Java用一种叫监视器(monitor)的机制实现了进程间的异步执行。可以将监视器看作是一个很小的盒子,它只能容纳一个线程。一旦一个线程进入一个监视器,所有其他线程必须等到第一个线程退出监视器后才能进入。这些监视器可以设计成保护共享的数据不被多个线程同时操作。大多数多线程系统将这些监视器设计成对象,Java提供了一种更清晰的解决方案。没有Monitor类,每个对象通过将他们的成员函数定义成synchronized来定义自己的显式监视器,一旦一个线程执行在一个synchronized函数里,其他任何线程都不能调用同一个对象的synchronized函数。,3、线程同步,重点内容:web应用程序理论基础JSP实现原理和运行机制JSP环境配置,第3章JSP应用开发体系与环境配置,一、web应用程序理论基础,Internet是一个全球性的计算机互联网络,中文名称为“国际互连网”、“因特网”、“网际网”或“信息高速公路”等。Internet上存储着一组全球信息资源从网络通信技术的观点来看,Internet是一个以TCP/IP通信协议(传输控制协议/网际协议,协议是通信双方在通信时共同遵守的约定)为基础,连接各个国家、各个部门、各个机构计算机网络的数据通讯网;从信息资源的观点来看,Internet是一个集各个领域、各个学科的各种信息资源为一体的、供网上用户共享的数据资源网。,1、Internet技术概述,一、web应用程序理论基础,电子邮件(E-mail)。电子邮件服务是Internet上应用最广泛的一种服务方式。它采用模拟邮政系统的机制,使用“存贮-转发”的方式将用户的发出的邮件沿着一条逻辑上的通道转发到目的主机的E-mail信箱中。万维网(WWW)服务。它提供了搜寻信息的一种途径,帮助用户在Internet上进行简单的操作以统一的方式去获取不同地点、不同存取方式、不同检索方式以及不同表达形式的丰富的信息资源。文件传输(FTP)与匿名文件传输(AnonymousFTP)服务。FTP使用户能够在具有逻辑通路的两台计算机之间传输文件,人们只要知道特定信息资源的主机地址,就可以用匿名FTP登录获取所需的信息资料。电子商务。现在在网上进行贸易交易已经非常普遍,而且正发展得如火如荼,例如可以开展网上购物、网上商品销售、网上拍卖、网上订票等。网上交际。可以将看成网络是一个虚拟的社会空间,每个人都可以在这个网络社会上充当一个角色。用户可以在网上与别人聊天、交朋友、玩网络游戏等。网上事务处理。Inte
展开阅读全文
相关资源
相关搜索

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


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

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


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