




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北京传智播客教育 java基础加强 讲师 黎活明 北京传智播客教育 课程大纲 eclipse的使用技巧静态导入可变参数与for循环增强基本数据类型的自动拆箱与装箱枚举反射javabean内省beanutils工具包注解泛型类加载器代理 北京传智播客教育 eclipse的使用技巧 快捷键使用技巧 快捷键的位置 window preferences general keys 最常用eclipse快捷键内容提示alt 添加块注释ctrl shift 除去块注释ctrl shift 复制行ctrl alt 向下键更改为大写ctrl shift x更改为小写ctrl shift y类和方法说明f2 北京传智播客教育 静态导入 importstatic语句导入一个类中的某个或所有静态方法语法举例 importstaticjava lang math random importstaticjava lang math publicstaticvoidmain string args system out println random 100 importstatic语句导入一个类中的静态成员变量语法举例 publicclassconstant publicstaticstringcontent itcast importstaticcn itcast constant content 北京传智播客教育 增强for循环 语法 for type变量名 集合变量名 注意事项 迭代变量必须在 中定义 集合变量可以是数组或实现了iterable接口的集合类举例 publicstaticintadd intx int args intsum x for intarg args sum arg returnsum 北京传智播客教育 可变参数 可变参数的特点 只能出现在参数列表的最后 位于变量类型和变量名之间 前后有无空格都可以 调用可变参数的方法时 编译器为该可变参数隐含创建一个数组 在方法体中以数组的形式访问可变参数 北京传智播客教育 基本数据类型的自动拆箱与装箱 自动装箱 integernum1 12 自动拆箱 intnum newinteger 23 基本boolean byte integer 数值范围 128至127 数据类型的对象缓存 integernum1 12 integernum2 12 system out println num1 num2 integernum3 129 integernum4 129 system out println num3 num4 北京传智播客教育 枚举 使用枚举的关键技术如下 1 enum关键字表示枚举类型 它的作用相当于类声明中的class关键字 2 枚举类型不能有public的构造方法 3 所有的枚举值都是public static final的 这些修饰符都是自动加上 无须程序员手动添加 4 枚举之间用 分开 最好一个枚举值用分号 5 每一个枚举值是一个枚举类型的实例 6 可以在枚举类型定义非枚举值变量 这些变量可以使用任何修饰符 7 变量和方法的定义必须在枚举值后面定义 北京传智播客教育 枚举的高级应用 枚举就相当于一个类 其中也可以定义构造方法 成员变量 普通方法和抽象方法 枚举元素必须位于枚举体中的最开始部分 枚举元素列表的后要有分号与其他成员分隔 把枚举中的成员方法或变量等放在枚举元素的前面 编译器报告错误 带构造方法的枚举构造方法必须定义成私有的如果有多个构造方法 该如何选择哪个构造方法 枚举元素mon和mon 的效果一样 都是调用默认的构造方法 带方法的枚举定义枚举trafficlamp实现普通的next方法实现抽象的next方法 每个元素分别是由枚举类的子类来生成的实例对象 这些子类采用类似内部类的方式进行定义 增加上表示时间的构造方法枚举只有一个成员时 就可以作为一种单例的实现方式 北京传智播客教育 反射的基石 class类 java程序中的各个java类属于同一类事物 描述这类事物的java类名就是class 对比提问 众多的人用一个什么类表示 众多的java类用一个什么类表示 人 personjava类 class对比提问 person类代表人 它的实例对象就是张三 李四这样一个个具体的人 class类代表java类 它的各个实例对象又分别对应什么呢 对应各个类在内存中的字节码 例如 person类的字节码 arraylist类的字节码 等等 一个类被类加载器加载到内存中 占用一片存储空间 这个空间里面的内容就是类的字节码 不同的类的字节码是不同的 所以它们在内存中的内容是不同的 这一个个的空间可分别用一个个的对象来表示 这些对象显然具有相同的类型 这个类型是什么呢 如何得到各个字节码对应的实例对象 class类型 类名 class 例如 system class对象 getclass 例如 newdate getclass class forname 类名 例如 class forname java util date 九个预定义class实例对象 参看class isprimitive方法的帮助int class integer type数组类型的class实例对象class isarray 总之 只要是在源程序中出现的类型 都有各自的class实例对象 例如 int void 北京传智播客教育 反射 反射就是把java类中的各种成分映射成相应的java类 例如 一个java类中用一个class类的对象来表示 一个类中的组成部分 成员变量 方法 构造方法 包等等信息也用一个个的java类来表示 就像汽车是一个类 汽车中的发动机 变速箱等等也是一个个的类 表示java类的class类显然要提供一系列的方法 来获得其中的变量 方法 构造方法 修饰符 包等信息 这些信息就是用相应类的实例对象来表示 它们是field method contructor package等等 一个类中的每个成员都可以用相应的反射api类的一个实例对象来表示 通过调用class类的方法可以得到这些实例对象后 得到这些实例对象后有什么用呢 怎么用呢 这正是学习和应用反射的要点 北京传智播客教育 constructor类 constructor类代表某个类中的一个构造方法得到某个类所有的构造方法 例子 constructor constructors class forname java lang string getconstructors 得到某一个构造方法 例子 constructorconstructor class forname java lang string getconstructor stringbuffer class 获得方法时要用到类型创建实例对象 通常方式 stringstr newstring newstringbuffer abc 反射方式 stringstr string constructor newinstance newstringbuffer abc 调用获得的方法时要用到上面相同类型的实例对象class newinstance 方法 例子 stringobj string class forname java lang string newinstance 该方法内部先得到默认的构造方法 然后用该构造方法创建实例对象 该方法内部的具体代码是怎样写的呢 用到了缓存机制来保存默认构造方法的实例对象 北京传智播客教育 field类 field类代表某个类中的一个成员变量演示用eclipse自动生成java类的构造方法问题 得到的field对象是对应到类上面的成员变量 还是对应到对象上的成员变量 类只有一个 而该类的实例对象有多个 如果是与对象关联 哪关联的是哪个对象呢 所以字段fieldx代表的是x的定义 而不是具体的x变量 示例代码 reflectpointpoint newreflectpoint 1 7 fieldy class forname cn itcast corejava reflectpoint getfield y system out println y get point fieldx class forname cn itcast corejava reflectpoint getfield x fieldx class forname cn itcast corejava reflectpoint getdeclaredfield x x setaccessible true system out println x get point 作业 将任意一个对象中的所有string类型的成员变量所对应的字符串内容中的 b 改成 a 北京传智播客教育 method类 method类代表某个类中的一个成员方法得到类中的某一个方法 例子 methodcharat class forname java lang string getmethod charat int class 调用方法 通常方式 system out println str charat 1 反射方式 system out println charat invoke str 1 如果传递给method对象的invoke 方法的第一个参数为null 这有着什么样的意义呢 说明该method对象对应的是一个静态方法 jdk1 4和jdk1 5的invoke方法的区别 jdk1 5 publicobjectinvoke objectobj object args jdk1 4 publicobjectinvoke objectobj object args 即按jdk1 4的语法 需要将一个数组作为参数传递给invoke方法时 数组中的每个元素分别对应被调用方法中的一个参数 所以 调用charat方法的代码也可以用jdk1 4改写为charat invoke str newobject 1 形式 北京传智播客教育 内省 了解javabean javabean是一种特殊的java类 主要用于传递数据信息 这种java类中的方法主要用于访问私有的字段 且方法名符合某种命名规则 如果要在两个模块之间传递多个信息 可以将这些信息封装到一个javabean中 这种javabean的实例对象通常称之为值对象 valueobject 简称vo 这些信息在类中用私有字段来存储 如果读取或设置这些字段的值 则需要通过一些相应的方法来访问 大家觉得这些方法的名称叫什么好呢 javabean的属性是根据其中的setter和getter方法来确定的 而不是根据其中的成员变量 如果方法名为setid 中文意思即为设置id 至于你把它存到哪个变量上 用管吗 如果方法名为getid 中文意思即为获取id 至于你从哪个变量上取 用管吗 去掉set前缀 剩余部分就是属性名 如果剩余部分的第二个字母是小写的 则把剩余部分的首字母改成小的 setid 的属性名 idislast 的属性名 lastsetcpu的属性名是什么 cpugetups的属性名是什么 ups总之 一个类被当作javabean使用时 javabean的属性是根据方法名推断出来的 它根本看不到java类内部的成员变量 一个符合javabean特点的类可以当作普通类一样进行使用 但把它当javabean用肯定需要带来一些额外的好处 我们才会去了解和应用javabean 好处如下 在javaee开发中 经常要使用到javabean 很多环境就要求按javabean方式进行操作 别人都这么用和要求这么做 那你就没什么挑选的余地 jdk中提供了对javabean进行操作的一些api 这套api就称为内省 如果要你自己去通过getx方法来访问私有的x 怎么做 有一定难度吧 用内省这套api操作javabean比用普通类的方式更方便 北京传智播客教育 内省综合案例 propertydescriptor propertydescriptors introspector getbeaninfo clazz getpropertydescriptors for propertydescriptorpropertydesc propertydescriptors methodmethod propertydesc getreadmethod 获取属性的get方法 北京传智播客教育 commons beanutils 将字符串转换成给定类型的值convertutils convert stringvalue classclazz 为bean中的指定属性赋值beanutils copyproperty form name 经济 将指定bean中的属性值拷贝到目标bean中同名的属性beanutils copyproperties dest orig 将map中的值拷贝到目标bean中与key同名的属性personformform newpersonform mapproperties newhashmap properties put id 56 properties put name liming beanutils populate form properties 北京传智播客教育 了解注解及java提供的几个基本注解 先通过 suppresswarnings的应用让大家直观地了解注解 通过system runfinalizersonexit true 的编译警告引出 suppresswarnings deprecation deprecated直接在刚才的类中增加一个方法 并加上 deprecated标注 在另外一个类中调用这个方法 overridepublicbooleanequals reflectother 方法与hashset结合讲解总结 注解相当于一种标记 在程序中加了注解就等于为程序打上了某种标记 没加 则等于没有某种标记 以后 javac编译器 开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记 看你有什么标记 就去干相应的事 标记可以加在包 类 字段 方法 方法的参数以及局部变量上 看java lang包 可看到jdk中提供的最基本的annotation 北京传智播客教育 自定义注解及其应用 定义一个最简单的注解 public interfacemyannotation 把它加在某个类上 myannotationpublicclassannotationtest 用反射进行测试annotationtest的定义上是否有 myannotation根据发射测试的问题 引出 retention元注解的讲解 其三种取值 retetionpolicy source retetionpolicy class retetionpolicy runtime 分别对应 java源文件 class文件 内存中的字节码 思考 override suppresswarnings和 deprecated这三个注解的属性值分别是什么 演示和讲解 target元注解target的默认值为任何元素 设置target等于elementtype method 原来加在类上的注解就报错了 改为用数组方式设置 elementtype method elementtype type 就可以了 元注解以及其枚举属性值不用记 只要会看jdk提供那几个基本注解的api帮助文档的定义或其源代码 按图索骥即可查到 或者直接看java lang annotation包下面的类 北京传智播客教育 为注解增加基本属性 什么是注解的属性一个注解相当于一个胸牌 如果你胸前贴了胸牌 就是传智播客的学生 否则 就不是 如果还想区分出是传智播客哪个班的学生 这时候可以为胸牌在增加一个属性来进行区分 加了属性的标记效果为 myannotation color red 定义基本类型的属性和应用属性 在注解类中增加stringcolor myannotation color red 用反射方式获得注解对应的实例对象后 再通过该对象调用属性对应的方法myannotationa myannotation annotationtest class getannotation myannotation class system out println a color 可以认为上面这个 myannotation是myannotaion类的一个实例对象为属性指定缺省值 stringcolor default yellow value属性 stringvalue default zxx 如果注解中有一个名称为value的属性 且你只想设置value属性 即其他属性都采用默认值或者你只有一个value属性 那么可以省略value 部分 例如 myannotation lhm 北京传智播客教育 为注解增加高级属性 数组类型的属性int arrayattr default 1 2 3 myannotation arrayattr 2 3 4 如果数组属性中只有一个元素 这时候属性值部分可以省略大括枚举类型的属性gendergender myannotation gender gender man 注解类型的属性 metaannotationannotationattr default metaannotation xxxx myannotation annotationattr metaannotation yyy 可以认为上面这个 myannotation是myannotaion类的一个实例对象 同样的道理 可以认为上面这个 metaannotation是metaannotation类的一个实例对象 调用代码如下 metaannotationma myannotation annotationattr system out println ma value 北京传智播客教育 体验泛型 jdk1 5以前的集合类中存在什么问题arraylistcollection newarraylist collection add 1 collection add 1l collection add abc inti integer arraylist get 1 编译要强制类型转换且运行时出错 jdk1 5的集合类希望你在定义集合时 明确表示你要向集合中装哪种类型的数据 无法加入指定类型以外的数据arraylistcollection2 newarraylist collection2 add 1 collection2 add 1l collection2 add abc 这两行代码编译时就报告了语法错误inti2 collection2 get 0 不需要再进行类型转换泛型是提供给javac编译器使用的 可以限定集合中的输入类型 让编译器挡住源程序中的非法输入 编译器编译带类型说明的集合时会去除掉 类型 信息 使程序运行效率不受影响 对于参数化的泛型类型 getclass 方法的返回值和原始类型完全一样 由于编译生成的字节码会去掉泛型的类型信息 只要能跳过编译器 就可以往某个泛型集合中加入其它类型的数据 例如 用反射得到集合 再调用其add方法即可 北京传智播客教育 了解泛型 arraylist类定义和arraylist类引用中涉及如下术语 整个称为arraylist泛型类型arraylist中的e称为类型参数变量整个arraylist称为参数化的类型arraylist中的integer称为类型参数变量的值或实际类型参数arraylist中的念着typeofarraylist称为原始类型参数化类型与原始类型的兼容性 参数化类型可以引用一个原始类型的对象 编译报告警告 例如 collectionc newvector 可不可以原始类型可以引用一个参数化类型的对象 编译报告警告 例如 collectionc newvector 原来的方法接受一个集合参数 新的类型也要能传进去参数化类型不考虑类型参数的继承关系 vectorv newvector 错误 不写没错 写了就是明知故犯vectorv newvector 也错误 编译器不允许创建类型变量的数组 即在创建数组实例时 数组的元素不能使用参数化的类型 例如 下面语句有错误 vectorvectorlist newvector 10 思考题 下面的代码会报错误吗 vectorv1 newvector vectorv v1 北京传智播客教育 泛型中的 通配符 问题 定义一个方法 该方法用于打印出任意参数化类型的集合中的所有数据 该方法如何定义呢 错误方式 publicstaticvoidprintcollection collectioncols for objectobj cols system out println obj cols add string 没错cols newhashset 会报告错误 正确方式 publicstaticvoidprintcollection collectioncols for objectobj cols system out println obj cols add string 错误 因为它不知自己未来匹配就一定是stringcols size 没错 此方法与类型参数没有关系cols newhashset 总结 使用 通配符可以引用其他各种参数化的类型 通配符定义的变量主要用作引用 可以调用与参数化无关的方法 不能调用与参数化有关的方法 北京传智播客教育 泛型中的 通配符的扩展 限定通配符的上边界 正确 vectorx newvector 号指定的类为number的子类错误 vectorx newvector 在应用泛型时可以使用extends限定符 并且可以用相似 只能通过强制类型转换方式来赋值 北京传智播客教育 泛型集合类的综合案例 能写出下面的代码即代表掌握了java的泛型集合类 hashmaphm newhashmap hm put zxx 19 hm put lis 18 set mes hm entryset for map entryme mes system out println me getkey me getvalue 对在jsp页面中也经常要对set或map集合进行迭代 entry key entry value 北京传智播客教育 通过反射获得泛型的参数化类型 示例代码 classgenericalreflection privatevectordates newvector publicvoidsetdates vectordates this dates dates publicstaticvoidmain string args methodmethodapply genericalreflection class getdeclaredmethod applygeneric vector class parameterizedtypeptype parameterizedtype methodapply getgenericparametertypes 0 system out println setdates class ptype getrawtype getname 泛型dao的应用 publicabstractclassdaobaseimplimplementsdaobase protectedclassclazz publicdaobaseimpl typetype this getclass getgenericsuperclass parameterizedtypept parameterizedtype type this clazz class pt getactualtypearguments 0 system out println clazz this clazz publicclassarticledaoimplextendsdaobaseimplimplementsarticledao 北京传智播客教育 类加载器 与普通程序不同的是 java程序 class文件 并不是本地的可执行程序 当运行java程序时 首先运行jvm java虚拟机 然后再把javaclass加载到jvm里头运行 负责加载javaclass的这部分就叫做classloader 中文叫做类加载器
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年全国英语等级考试(PETS)四级试卷:人工智能在制造业中的应用
- 广西生态工程职业技术学院《基础摄影》2024-2025学年第一学期期末试卷
- 岳阳现代服务职业学院《体能与营养》2024-2025学年第一学期期末试卷
- 河北资源环境职业技术学院《Web应用系统综合》2024-2025学年第一学期期末试卷
- 忻州职业技术学院《休闲体育学》2024-2025学年第一学期期末试卷
- 2025年特岗教师招聘考试初中体育教学评价与反思指导
- 哈尔滨石油学院《国防土木工程导论》2024-2025学年第一学期期末试卷
- 抚州幼儿师范高等专科学校《环境艺术综合设计》2024-2025学年第一学期期末试卷
- 2025年物业设备维护与管理中级模拟题
- 广东科技学院《智能家居综合实训》2024-2025学年第一学期期末试卷
- (2025年标准)委托他人要账协议书
- 2025-2030中国青少年无人机教育课程体系构建与创新能力培养研究
- 煤矿安全规程新旧版本对照表格版
- 2025山东“才聚齐鲁成就未来”水发集团高校毕业招聘241人笔试参考题库附带答案详解(10套)
- 中学2025年秋季第一学期开学工作方案
- 儿童急救流程
- GB 11122-2025柴油机油
- 私募薪酬管理办法
- 经营废钢管理办法
- 药品经营企业讲课课件
- 广东省深圳市海韵中学2026届中考押题语文预测卷含解析
评论
0/150
提交评论