Java高级程序设计全书电子教案完整版课件.pptx

上传人:可****阿 文档编号:77576669 上传时间:2023-03-15 格式:PPTX 页数:113 大小:959.93KB
返回 下载 相关 举报
Java高级程序设计全书电子教案完整版课件.pptx_第1页
第1页 / 共113页
Java高级程序设计全书电子教案完整版课件.pptx_第2页
第2页 / 共113页
点击查看更多>>
资源描述

《Java高级程序设计全书电子教案完整版课件.pptx》由会员分享,可在线阅读,更多相关《Java高级程序设计全书电子教案完整版课件.pptx(113页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、JavaJava高级程序设计高级程序设计第第1 1章章 JavaJava编码规范编码规范1.1应用场景1.2相关知识1.3任务实施1.4拓展知识1.5拓展训练1.6课后小结1.1应用场景一个大型的软件项目是由一个团队来完成的,每个程序员在给包、类、变量、方法取名的时候,如果根本没有一点约定,只是随心所欲,可能会带来一系列问题。编码规范是程序编码所要遵循的规则,保证代码的正确性、稳定性、可读性。规范编码有以下作用。一、规范的代码可以促进团队合作二、规范的代码可以减少bug处理三、规范的代码可以降低维护成本四、规范的代码有助于代码审查五、养成代码规范的习惯,有助于程序员自身的成长1.2相关知识1.

2、2.1文件后缀名1.2.2源文件样式约定1.2.3注释规范1.2.4命名规范1.2.1文件后缀名表1-1Java程序使用的文件后缀名文件类别文件后缀名Java源文件.javaJava字节码文件.class其中两者最本质的区别在于,.Java文件是供虚拟机运行时执行的文件,而.class文件可以让你在任何一台安装了Java虚拟机的机器上运行。1.2.2源文件样式约定Java源文件必须按顺序由以下3部分组成。1、版权信息。2、包和引入语句。3、类和接口声明。1.版权信息版权和版本信息必须在Java文件的开头,其他不需要出现在javadoc的信息也可以包含在这里。2.包和引入语句package行要在

3、import行之前,import中标准的包名要在本地的包名之前,而且按照字母顺序排列。如果import行中包含了同一个包中的不同子目录,则应该用*来处理。3.类和接口声明每个Java源文件都包含一个单一的公共类或接口。1.2.3注释规范1.注释编写的原则(1)注释形式统一。在整个应用程序中,使用具有一致的标点和结构的样式来构造注释。如果在其他项目中发现它们的注释规范与这份文档不同,按照这份规范写代码,不要试图在既成的规范系统中引入新的规范。(2)注释内容准确简洁。内容要简单、明了、含义准确,防止注释的多义性,错误的注释不但无益反而有害。2.注释类型的基本划分(1)基本注释必须要添加,包括以下几

4、种:1、类(接口)的注释;2、构造函数的注释;3、方法的注释;4、全局变量的注释;5、字段/属性的注释;简单的代码做简单注释,注释内容不大于10个字即可,另外,持久化对象或VO对象的getter、setter方法不需加注释。(2)特殊必加的注释包括以下几种:1、典型算法必须有注释。2、在代码不明晰处必须有注释。3、在代码修改处加上修改标识的注释。4、在循环和逻辑分支组成的代码中加注释。5、为他人提供的接口必须加详细注释。具体的注释格式自行定义,要求注释内容准确简洁。3.注释的格式(1)单行(single-line)注释格式为“/”。(2)块(block)注释格式为“/*/”。(3)文档注释格式

5、为“/*/”。(4)Javadoc注释标签语法如下:author对类的说明,标明开发该类模块的作者;version对类的说明,标明该类模块的版本;see对类、属性、方法的说明,参考转向,也就是相关主题;param对方法的说明,对方法中某参数的说明;return对方法的说明,对方法返回值的说明;exception对方法的说明,对方法可能抛出的异常进行说明。1.2.4命名规范命名指系统中对包名、目录(类名)、方法、常量、变量等标识符的命名。标识符的命名力求做到统一、达意、简洁,遵循驼峰法则。统一是指对于同一个概念,在程序中用同一种表示方法。例如对于供应商,既可以用supplier,也可以用prov

6、ider,但是我们只能选定一个使用,至少在一个Java项目中保持统一。达意是指标识符能准确地表达出它所代表的意义,如newSupplier,OrderPaymentGatewayService等;而supplier1,service2,idtts等则不是好的命名方式。简洁是指,在统一和达意的前提下,用尽量少的标识符。如果不能达意,宁愿不要太简洁。例如,theOrderNameOfTheTargetSupplierWhichIsTransfered太长,transferedTargetSupplierOrderName则较好,但是transTgtSplOrdNm就不好了。省略元音的缩写方式不要使

7、用,我们的英语往往还没有好到看得懂奇怪的缩写。用驼峰法则是指单词之间不使用特殊符号分割,而是通过首字母大写来分割。例如推荐用SupplierName,addNewContract,而不是supplier_name,add_new_contract。1.3任务实施1.3.1任务一计算员工的月工资(1)任务需求某公司分为多个部门,每个部门有一个经理和多个员工,每个员工根据职称发基本工资。员工的工资按基本工资、日加班工资、日缺勤工资等组成。具体需求如下所示(1)员工的基本信息,部门、职务、职称以及工资记录等信息。(2)能记录员工的每一个职称信息,并授予相应的职称,系统在计算员工工资的时候选取职称对应

8、的最高职称津贴。(2)任务分析问题域中涉及多个类,职员类Staffer,经理类Manager,测试类TestEmployee。Staffer类:通过此类封装定义计算员工基本工资方法Manager类:通过此类封装定义计算员工基本工资方法TestEmployee类:调用方法并实现结果输出1.4拓展知识相对于之前所提到的一些基本的编程需要注意的惯例,其他惯例(MiscellaneousPractices)也是非常重要的,下面就列出相对应的惯例:1.每次保存的时候,都让你的代码是最美的2.使用log而不是System.out.println()3.每个ifwhilefor等语句,都不要省略大括号4.善

9、用TODO5.在需要留空的地方放一个空语句或注释6.不要再对boolean值做truefalse判断7.减少代码嵌套层次1.5拓展训练良好的编码习惯可以大大提高可读性以及编码效率。请读者从一开始就养成一个良好的编码习惯。通过以下校验邮件地址方法模板展示较为规范的编码格式:1.6课后小结1.规范需要平时编码过程中注意,是一个慢慢养成的好习惯。2.命名规范。所有的标识符只能用英文字母,数字,下划线,并采用驼峰标识。3.注释规范。注释有:单行注释“/”,多行注释“/*.*/”,文档注释“/*.*/”。4.排版规范。代码应避免一行长度超过60个字符。5.声明规范。一行声明一个变量,只在代码块的开始处声

10、明变量。6.语句规范。一条语句占用一行。7.编程规范。用于设置的方法前缀必须是set;用于检索一个布尔类型的方法前缀必须是is,而用于检索其他方法前缀必须是get。程序中应尽可能少使用数字(或字符),尽可能定义静态变量来说明该数字(或字符)的含义。1.7课后习题1.相对独立的程序块之间、变量说明之后必须加_。2.类注释部分,描述部分说明该类或者接口的功能、作用、使用方法和注意事项,每次修改后增加作者、新版本号和当天的日期,since_,deprecated表示_。3.比较操作符,赋值操作符=、+=,算术操作符+、%,逻辑操作符&、&,位域操作符、等双目操作符的前后加_。4.Java中的注释有三

11、种形式:文档注释、多行注释和_。5.方法的文档中,块标记param用于说明_的含义,return用于说明_1.下列错误使用异常的做法是_。A.在程序中使用异常处理还是使用错误返回码处理,根据是否有利于程序结构来确定,并且异常和错误码不应该混合使用,推荐使用异常。B.一个方法不应抛出太多类型的异常。throws/exception子句标明的异常最好不要超过三个。C.异常捕获尽量不要直接catch(Exceptionex),应该把异常细分处理。D.程序内抛出的异常本身就可说明异常的类型、抛出条件,可不填写详细的描述信息。捕获异常后用exception.toString()取到详细信息后保存。2下列

12、说法错误的是_。A.段代码各语句之间有实质性关联并且是完成同一件功能的,那么可考虑把此段代码构造成一个新的方法。B.源程序中关系较为紧密的代码应尽可能相邻。C.程序中可同时使用错误码和异常进行处理,推荐使用异常。D.方法参数建议不超过5个。1.8上机实训实训一、计算几何图形的面积、周长。其类图如1-1所示。JavaJava高级程序设计高级程序设计第第2 2章章 JavaJava集合框架集合框架2.1应用场景2.6课后小结2.2相关知识2.7课后习题2.3实施过程2.8上机实训2.4拓展知识2.5拓展训练2.1应用场景在Java编程时,常常需要集中存放多个数据。当然我们可以使用数组来保存多个对象

13、。但数组长度不可变化;而且数组无法保存具有映射关系的数据。为了保存数量不确定的数据,以及保存具有映射关系的数据(也被称为关联数组),就要使用Java提供的集合类。JDK提供了大量优秀的集合实现供开发者使用,合格的程序员必须要能够通过功能场景和性能需求选用最合适的集合,这就要求开发者必须熟悉Java的常用集合框架类。2.2相关知识2.2.1集合框架2.2.2Java集合框架2.3.3Java集合框架的使用2.2.1集合框架在现实生活中,集合被理解为:很多事物凑在一起;在。数学中,的集合:为具有共同属性的事物的总体。通常情况下,我们把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合。通常集合

14、有两种表示法,一种是列举法,比如集合A=1,2,3,4,另一种是性质描述法,比如集合B=X|0X100且X属于整数。集合论的奠基人康托尔在创建集合理论给出了许多公理和性质,这都成为后来集合在其他领域应用的基础。2.2.2Java集合框架在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类)。所有抽象出来的数据结构和操作(算法)统称为Java集合框架(JavaCollectionFramework),。如图2-1所示。2.2.3Java集合框架的使用Java程序员在具体应用时,不必考虑数据结构和算法的实现细节,只需要用这些类创建出来一些对象,然

15、后直接应用就可以了,这样就大大提高了编程效率。2.3实施过程2.3.1List的使用2.3.2Set的使用2.3.3Map的使用2.3.1LIST的使用1.List接口List继承自Collection接口。List是一种有序集合,List中的元素可以根据索引(顺序号:元素在集合中处于的位置信息)进行取得/删除/插入操作。跟Set集合不同的是,List允许有重复元素。对于满足e1.equals(e2)条件的e1与e2对象元素,可以同时存在于List集合中。2.List实现类List接口的实现类主要有ArrayList,LinkedList,Vector,Stack等。2.3.2SET的使用1.

16、Set接口Set是继承于Collection的接口。java中的set接口有如下的特点:不允许出现重复元素;集合中的元素位置无顺序;有且只有一个值为null的元素。2.Set接口的实现类实现了Set接口的主要有HashSet、TreeSet、LinkedHashSet。HashSet依赖于HashMap,它实际上是通过HashMap实现的。HashSet中的元素是无序的。TreeSet依赖于TreeMap,它实际上是通过TreeMap实现的。TreeSet中的元素是有序的。2.3.3MAP的使用1.Map接口Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够

17、实现根据key快速查找value;。Map中的键值对以Entry类型的对象实例形式存在;。键建(key值)不可重复,value值可以重复,一个value值可以和很多key值形成对应关系,每个键最多只能映射到一个值。Map支持泛型,形式如:Map。Map中使用put(Kkey,Vvalue)方法添加。2.已知实现类在java.util包中接口Map存储键值对,作为一个元组存入。元组以键作为标记,键相同时,值覆盖。类型参数:K-此映射所维护的键的类型;V-映射值的类型;其已知实现类:为HashMap、TreeMap。2.4拓展知识1.Vector前面我们已经提到,Java设计者们在对之前的容器类进

18、行重新设计时保留了一些数据结构,其中就有Vector。用法上,Vector与ArrayList基本一致,不同之处在于Vector使用了关键字synchronized,将访问和修改向量的方法都变成同步的了,所以对于不需要同步的应用程序来说,类ArrayList比类Vector更高效。2.StackStack,栈类,是Java2之前引入的,继承自类Vector。3.HashTableHashTable和前面介绍的HashMap很类似,它也是一个散列表,存储的内容是键值对映射,不同之处在于,HashTable是继承自Dictionary的,HashTable中的函数都是同步的,这意味着它也是线程安全

19、的,另外,HashTable中key和value都不可以为null。上面的三个集合类都是在Java2之前推出的容器类,可以看到,尽管在使用中效率比较低,但是它们都是线程安全的。下面介绍两个特殊的集合类。4.ConcurrentHashMapConcurrent,并发,从名字就可以看出来ConcurrentHashMap是HashMap的线程安全版。同HashMap相比,ConcurrentHashMap不仅保证了访问的线程安全性,而且在效率上与HashTable相比,也有较大的提高。关于ConcurrentHashMap的设计,我将会在下一篇关于并发编程的博客中介绍,敬请关注。5.CopyOn

20、WriteArrayListCopyOnWriteArrayList,是一个线程安全的List接口的实现,它使用了ReentrantLock锁来保证在并发情况下提供高性能的并发读取。2.5拓展训练任务要求:实现省市两级联动。任务需求:构建信息录入界面,完成人员基本信息的录入工作。其中籍贯中涉及的“省、市/县”能实现联动,即:选择“省”时,“市”会根据选择的“省”做相应的变换。任务设计:省市/县的信息存放在CityMap类中,InputFrame类为界面类,TestInputFrame为测试类。其类图如图2-5-1所示。2.6课后小结到这里,对于Java集合框架的总结就结束了,还有很多集合类没有

21、在这里提到,更多的还是需要大家自己去查去用。通过阅读源码,查阅资料,收获很大。Java集合框架主要包括Collection和Map两种类型。其中Collection又有3种子类型,分别是List、Set、Queue。Map中存储的主要是键值对映射。规则集Set中存储的是不重复的元素,线性表中存储可以包括重复的元素,Queue队列描述的是先进先出的数据结构,可以用LinkedList来实现队列。效率上,规则集比线性表更高效。ArrayList主要是用数组来存储元素,LinkedList主要是用链表来存储元素,HashMap的底层实现主要是借助数组+链表+红黑树来实现。Vector、HashTab

22、le等集合类效率比较低但都是线程安全的。包java.util.concurrent下包含了大量线程安全的集合类,效率上有较大提升。2.7课后习题三、简答题1.Java集合框架是什么?说出一些集合框架的优点?2.Java集合框架的基础接口有哪些?3.Iterator是什么?3.遍历一个List有哪些不同的方式?4.如何决定选用HashMap还是TreeMap?5.ArrayList和LinkedList有何区别?6.ArrayList和Vector有何异同点?JavaJava高级程序设计高级程序设计第第3 3章章 JavaJava反射机制反射机制3.1应用场景3.2相关知识3.3实施过程3.4拓

23、展知识3.5拓展训练3.6课后小结3.7课后习题3.8上机实训3.1应用场景在一些开源框架里,如Spring,Struts,Hibernate,MyBatis等,应用程序会提供一个配置文件如xml文件或者properties,然后在Java类里面解析xml或properties里面的内容,得到一个字符串,然后用反射机制,根据这个字符串获得某个类的Class实例,这样就可以动态配置一些东西,不用每一次都要在代码里面去new或者做其他的事情,以后要改的话直接改配置文件,代码维护起来就很方便了,同时有时候要适应某些需求,Java类里面不一定能直接调用另外的方法,这时候也可以通过反射机制来实现。应用程

24、序通过读取配置文件来获取到指定名称的类的字节码文件并加载其中的内容进行调用,对一个类文件进行解剖,就可以取得任意一个已知名称的class的内部信息,包括其modifiers(诸如public,static等等)、superclass(例如Object)、实现之interfaces(例如Serializable),也包括fields和methods的所有信息,并可于运行时改变fields内容或调用methods。3.2相关知识3.2.1Java反射机制的概念3.2.2反射机制的功能3.2.3Java反射机制的相关API3.2.4使用反射机制的步骤3.2.5反射机制的应用场景3.2.6反射机制的优

25、缺点3.2.1Java反射机制的概念Java反射机制在Java运行状态中,对于任意一个类,我们都能够知道这个类的所有属性和方法;,对于任意一个对象,我们都能够调用它的任意一个方法;。这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。3.2.2反射机制的功能反射机制的功能如下:在运行时判定任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判定任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理;。3.2.3Java反射机制的相关APIjava.lang.reflect包提供了用于获取类和对象的反射信息的类和接口。反射API允许对程序访问

26、有关加载类的字段,方法和构造函数的信息进行编程访问。它允许在安全限制内使用反射的字段,方法和构造函数对其底层对等进行操作。java.lang.Class;/类java.lang.reflect.Constructor;/构造方法java.lang.reflect.Field;/类的成员变量java.lang.reflect.Method;/类的方法java.lang.reflect.Modifier;/访问权限3.2.4使用反射机制的步骤导入导入Jjava.lang.relfect包包需需遵循遵循以下以下3三三个步骤个步骤:第一步是获得你想操作的类的第一步是获得你想操作的类的java.lang

27、.Class对象对象;第二步是调用诸如第二步是调用诸如getDeclaredMethods的方的方法法;第三步使用第三步使用反射反射API来操作这些信息来操作这些信息。3.2.5反射机制的应用场景nJava反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法,常见的应用如下n逆向代码,例如反编译n与注解相结合的框架例如Retrofitn单纯的反射机制应用框架例如EventBus2.xn动态生成类框架例如Gson3.2.6反射机制的优缺点n可以实现动态创建对象和编译,体现出很大的灵活性(特别是在J2EE的开发中它的灵活性就表现的十

28、分明显)。通过反射机制我们可以获得类的各种内容,进行了反编译。对于JAVA这种先编译再运行的语言来说,反射机制可以使代码更加灵活,更加容易实现面向对象,总结如下。n优点:运行期类型的判断,动态类加载,动态代理使用反射。n缺点:性能是一个问题,反射相当于一系列解释操作,通知jvm要做的事情,性能比直接的Java代码要慢很多。3.3实施过程任务需求:设有一个类Person,使用反射机制获取该类的相关信息。任务设计:实体类Person,存放个人的基本信息,测试类TestPerson使用反射机制获取Person类或其对象的封装信息。其类图如图3-3-11所示。任务需求:设有一个类Person,使用反射

29、机制获取该类的相关信息。任务设计:实体类Person,存放个人的基本信息,测试类TestPerson使用反射机制获取Person类或其对象的封装信息。其类图如图3-3-11所示。3.4拓展知识Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。在设计模式学习当中,学习抽象工厂的时候就用到了反射来更加方便的读取数据库链接字符串等。Java中的配置文件为.properties,称作属性文件。通过反射读取里边的内容。这样代码是固定的,但是配置文件的内容我们可以改,这样使我们的代码灵活了很多!典型的除了Hibernate之外,还有Spring也用到很多反射机制。灵活掌握Java反射

30、机制,对大家以后学习框架技术有很大的帮助3.5拓展训练任务1Java反射机制在工厂模式中的应用先看简单工厂模式(simplefactory)。任务设计:接口Car,类Benz,Bmw,Bike。更好的理解工厂设计模式具体其类图如图3-5-3所示。3.6课后小结1.反射机制指的是程序在运行时能够获取自身的信息。在Jjava中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。2.现在很多开框架都用到反射机制,hibernate、struts都是用反射机制实现的。3.静态编译:在编译时确定类型,绑定对象,即通过。动态编译:运行时确定类型,绑定对象。动态编译最大限度发挥了Jjava的灵活性

31、,体现了多态的应用,有以降低类之间的藕合性。一句话,反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性,特别是在J2EE的开发中它的灵活性就表现的十分明显。4.类中有什么信息,反射就可以获得什么信息,不过前提是得知道类的名字。5.有了Jjava反射机制,只需要写一个dao类,四个方法,增删改查,传入不同的对象,无需为每一个表都创建dao类,反射机制会自动帮我们完成剩下的事情,反射机制就是专门帮我们做那些重复的有规则的事情。3.7课后习题三、简答题1.描述反射机制的作用。举几个反射的应用。2.简述Java反射中API的主要类及作用。3.简述Java反射的步骤。3.8上机实训n实训n

32、从配置文件中读取类,并显示其构造函数。n配置文件nconfig.propertiesJavaJava高级程序设计高级程序设计第第4 4章章 JavaJava泛型泛型4.1应用场景4.2相关知识4.3实施过程4.4拓展知识4.5拓展训练4.6课后小结4.7课后习题4.8上机实训4.1应用场景n假定我们有这样一个需求:写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,该如何实现?答案是可以使用Java泛型。n使用Java泛型的概念,我们可以写一个泛型方法来对一个对象数组排序。然后,调用该泛型方法来对整型数组、浮点数数组、字符串数组等进行排序。n在使用框架SSH(Struts

33、+Spring+Hibernate)开发一个应用系统中,常使用DAO(DateAccessObject)来访问数据库对象,完成数据库中的数据和Java对象里的一种关联关系的一系列操作CRUD。数据库中的对象有很多,每一个对象都写一个DAO,显得很繁琐,每一个DAO都要写CRUD操作,这样代码的重复率高,如果使用泛型,代码的复用得到了很好的应用,提高了代码的效率。4.2相关知识4.2.1泛型概念4.2.2泛型的定义4.2.3相关概念4.2.4泛型的好处4.2.5泛型使用时的注意事项4.2.1泛型概念n所谓“泛型”,就是“宽泛的数据类型”,任意的数据类型。n泛型是Java中一个非常重要的知识点,在

34、Java集合类框架中泛型被广泛应用。使用泛型可以很好的解决“代码复用”问题。4.2.2泛型的定义n1.定义泛型类n在定义带类型参数的类时,在紧跟类命之后的内,指定一个或多个类型参数的名字,同时也可以对类型参数的取值范围进行限定,多个类型参数之间用,号分隔。n定义完类型参数后,可以在定义位置之后的类的几乎任意地方(静态块,静态属性,静态方法除外)使用类型参数,就像使用普通的类型一样。注意,父类定义的类型参数不能被子类继承。n2.泛型方法n在定义带类型参数的方法时,在紧跟可见范围修饰(例如public)之后的内,指定一个或多个类型参数的名字,同时也可以对类型参数的取值范围进行限定,多个类型参数之间

35、用,号分隔。n定义完类型参数后,可以在定义位置之后的方法的任意地方使用类型参数,就像使用普通的类型一样。例如:4.2.3相关概念n1.通配符n类型通配符一般是使用?代替具体的类型参数,对类型参数赋予不确定值。例如List在逻辑上是List,List等所有List的父类。n2.上下边界n如果想限制使用泛型类别时,只能用某个特定类型或者是其子类型才能实例化该类型时,可以在定义类型时,使用extends关键字指定这个类型必须是继承某个类,或者实现某个接口,也可以是这个类或接口本身。n(1)类型通配符上限通过形如List来定义,如此定义就是通配符泛型值接受Number及其下层子类类型。n(2)类型通配

36、符下限通过形如List来定义,表示类型只能接受Number及其三层父类类型,如Objec类型的实例。n3.擦除n在使用泛型时没有指明数据类型,为了不出现错误,编译器会将所有数据向上转型为Object,即擦除泛型类型。n在Java中,泛型是通过类型擦除来实现的,它是Java编译器的概念,Java虚拟机运行时对泛型基本一无所知,理解这一点是很重要的,它有助于我们理解Java泛型的很多局限性。4.2.4泛型的好处n(1)类型安全。n通过知道使用泛型定义的变量的类型限制,编译器可以更有效地提高Java程序的类型安全。n(2)消除强制类型转换。n消除源代码中的许多强制类型转换。这使得代码更加可读,并且减

37、少了出错机会。所有的强制转换都是自动和隐式的。n(3)提高性能。4.2.5泛型使用时的注意事项(1)泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。(2)泛型的类型参数可以有多个。4.3任务实施4.2.1任务一泛型类的定义和使用4.2.2任务二泛型方法的定义和使用4.2.3任务三泛型接口的定义和使用4.3.1任务一泛型类的定义和使用n1.定义泛型类n在定义带类型参数的类时,在紧跟类命之后的内,指定一个或多个类型参数的名字,同时也可以对类型参数的取值范围进行限定,多个类型参数之间用,号分隔。n定义完类型参数后,可以在定义位置之后的类的几乎任意地方(静态块,静态属性,静态方法除外)使用

38、类型参数,就像使用普通的类型一样。注意,父类定义的类型参数不能被子类继承。4.3.2任务二泛型方法的定义和使用2.泛型方法在定义带类型参数的方法时,在紧跟可见范围修饰(例如public)之后的内,指定一个或多个类型参数的名字,同时也可以对类型参数的取值范围进行限定,多个类型参数之间用,号分隔。4.3.3任务三泛型接口的定义和使用n在定义带类型参数的方法时,在紧跟可见范围修饰(例如public)之后的内,指定一个n3.泛型接口n先定义泛型接口:n然后定义这个实现类来实现这个接口:4.4拓展知识n在开发高校图书管理系统中,涉及多个数据库中的表,如:图书基本信息表Book,教师信息表Teacher,

39、学生信息表Student,用户表User,出版社信息表Publishing,图书分类信息表Category等。通过DAO(数据访问对象,DateAccessObject)实现对数据库中的表进行数据操作,就是数据库中的数据和Java对象里的一种关联关系的一系列操作,包括增删改查(CRUD)操作。n这些基本信息表对应Java的实体类。每个实体类都包含CRUD操作。n这样使得代码冗余度较高。那么能否将这多个DAO相同的方法封装成一个呢?这是可以的,使用泛型类和泛型方法。抽象一个BaseDao,里面封装了实体类相同的操作,当需要操作表的时候,将T换成User或者是Teacher就可以了。4.6课后小结

40、n1.泛型的本质便是类型参数化,通俗的说就是用一个变量来表示类型,这个类型可以是String,Integer等等不确定,表明可接受的类型。n2.泛型可以接受多个参数,而Object经过强制类型转换可以转换为任何类型,泛型可以把使用Object的错误提前到编译后,而不是运行后,提升安全性。n3.在JAVA的虚拟机中并不存在泛型,泛型只是为了完善java体系,增加程序员编程的便捷性以及安全性而创建的一种机制,在JAVA虚拟机中对应泛型的都是确定的类型,在编写泛型代码后,java虚拟中会把这些泛型参数类型都擦除,用相应的确定类型来代替,代替的这一动作叫做类型擦除,而用于替代的类型称为原始类型,在类型

41、擦除过程中,一般使用第一个限定的类型来替换,若无限定则使用Object。n4.泛型限定是通过?(通配符)来实现的,表示可以接受任意类型。n5.泛型的一些基本规则约束n*泛型的类型参数必须为类的引用,不能用基本类型(int,short,long,byte,float,double,char,boolean)。n*泛型是类型的参数化,在使用时可以用作不同类型(此处在说泛型类时会详细说明)。n*泛型的类型参数可以有多个。4.7课后习题n三、简答题n1.Java中的泛型是什么?使用泛型的好处是什么?n2.Java的泛型是如何工作的?什么是类型擦除?n3.什么是泛型中的限定通配符和非限定通配符?n4.如

42、何编写一个泛型方法,让它能接受泛型参数并返回泛型类型?4.8上机实训实训一、假如我们现在要定义一个类来表示坐标,要求坐标的数据类型可以是整数、小数和字符串,例如:nx=10、y=10nx=12.88、y=129.65nx=东京180度、y=北纬210度定义泛型类Point,其中定义一个打印坐标的泛型方法printPoint()。并定义一个测试类进行测试,以不同的格式输出给定的坐标值。4.2.2任务二泛型方法的定义和使用4.2.2任务二泛型方法的定义和使用JavaJava高级程序设计高级程序设计第第5 5章章 JavaJava序列化机制序列化机制5.1应用场景5.2相关知识5.3实施过程5.4拓

43、展知识5.5拓展训练5.6课后小结5.7课后习题5.8上机实训5.1应用场景在分布式环境下,当进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传输。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。序列化是一种将对象以一连串的字节描述的过程,用于解决在对对象流进行读写操作时所引发的问题。序列化可以将对象的状态写在流里进行网络传输,或者保存到文件、数据库等系统中,并在需要时把该流读取出来重新构造一个相同的对象。5.2相关知识5.2.1序列化的概念5.2.2序列化应用5.2.3序列化的几种方式5

44、.2.4对象实现机制5.2.1序列化的概念将在内存中的各种对象的状态(也就是实例变量,不是方法)保存在磁盘中或者在网络中进行传输,并且可以把保存的对象状态再读出来。将一个Java对象写入IO流;与此对应的,则是从IO流中恢复一个Java对象。Java提供这种保存对象状态的机制,就是序列化。对象序列化是Java编程中的必备武器5.2.2序列化应用n当你想把内存中的对象状态保存到一个文件中或者数据库中时候;n当你想用套接字在网络上传送对象的时候;n当你想通过RMI传输对象的时候。5.2.3序列化的几种方式n在Java中socket传输数据时,数据类型往往比较难选择。可能要考虑带宽、跨语言、版本的兼

45、容等问题。比较常见的做法有两种:n一是把对象包装成JSON字符串传输,n二是采用Java对象的序列化和反序列化。n随着Google工具protoBuf的开源,protobuf也是个不错的选择。n*提示:对JSON,ObjectSerialize,ProtoBuf做个对比。5.2.4对象实现机制n为了方便开发人员将Java对象进行序列化及反序列化,Java提供了一套方便的API来支持。其中包括以下接口和类:njava.io.Serializablenjava.io.ExternalizablenObjectOutputnObjectInputnObjectOutputStreamnObjectI

46、nputStream5.2相关知识5.2.1序列化的概念5.2.2序列化应用5.2.3序列化的几种方式5.2.4对象实现机制5.3实施过程5.3.1任务一使用serializable序列化实体对象5.3.2任务二反序列化将Person对象从磁盘上读出5.3.1任务一使用serializable序列化实体对象实现Serializable接口非常简单,只要让Jjava实现Serializable接口即可,无需实现任何方法。一个类一旦实现了Serializable接口,那么该类的对象就是可序列化的。实现类的对象的序列化可以使用ObjectOutputStream,实现步骤如下:创建ObjectOut

47、putStream对象;调用ObjectOutputStream的writeObject方法输出对象。5.3.2任务二反序列化将Person对象从磁盘上读出任务需求:反序列化将Employee对象从磁盘上读出并修改员工信息,然后再写入到文件中。分析:相应的反序列化需要使用的类是ObjectInputStream,反序列化步骤如下:创建ObjectInputStream对象;使用ObjectInputStream的readObject方法取出对象。5.5拓展训练n常见Java序列化方式包括Java原生以流的方法进行的序列化、Json序列化、FastJson序列化、Protobuff序列化。n这里

48、主要讲解JSON序列化。nJson(JavaScriptObjectNotation,JavaScript对象表示方法),它是一个轻量级的数据交换格式,我们可以很简单的来读取和写它,并且它很容易被计算机转化和生成。nJson的表现形式:nJson的表现形式一般就三种(对象,数组,字符串),使用过程中,只是将对象与数组进行混合了任务:利用jackson进行json解析和序列化5.6课后小结对序列化的理解通过序列化和反序列化实现了对象状态的保存、传输以及对象的重建。在进行对象序列化时,开发人员可以根据自身情况,灵活选择默认方式或者自定义方式实现对象的序列化和反序列化。序列化机制是Java中对轻量级

49、持久化的支持。序列化的字节流数据在网上传输的安全问题需要引起大家足够的注意。序列化破坏了原有类的数据的”安全性“,例如private属性是不起作用的。序列化带来的问题网络传输的安全性对象进行序列化之后转化成有序的字节流在网络上进行传输,如果通过默认的序列化方式,则代码都是以明文的方式进行传输。这种情况下,部分字段的安全性是不能保障的,特别是像密码这样的安全敏感的信息。因此,如果您需要对部分字段信息进行特殊的处理,那么应当选择定制对象的序列化方式,例如对密码等敏感信息进行加密处理。类自身封装的安全性对对象进行序列化时,类中所定义的被private、final等访问控制符所修饰的字段是直接忽略这些

50、访问控制符而直接进行序列化的,因此,原本在本地定义的想要一次控制字段的访问权限的工作都是不起作用的。对于序列化后的有序字节流来说一切都是可见的,而且是可重建的。这在一定程度上削弱了字段的安全性。因此,如果您需要特别处理这些信息,您可以选择相应的方式对这些属性进行加密或者其他可行的处理,以尽量保持数据的安全性。所以并非所有的对象都可以序列化。有很多原因,比如:1.安全方面的原因,比如一个对象拥有private,public等field,对于一个要传输的对象,比如写到文件,或者进行rmi传输等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的。2.资源分配方面的原因,比如soc

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作计划

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁