一、反射
在运动过程中,动态获取类信息和动态调用类方法的过程既是java的反射机制,可以通过反射创建对象,获取所有属性以及调用里面的所有方法,得到的是对象字节码信息
Class<?> c = Class.forName(“权限类型(包名+类名)”)
Class c = 类型.class
Class c = 对象.getClass()
<?>实则是泛型的一种通配符用法,类似于占位符二、泛型(generic)
2.1定义
泛型是参数化类型,把一个类型当成参数,在外部使用的时候进行传入
不使用泛型,集合可能出现ClassCastException类型转换异常
使用泛型的好处,不会再出现类型转换异常
坏处:限制了使用的类型
用形参来接收实参的值
常用的泛型形参:T(type),E(element),K(),V()…
2.2 自定义泛型
1.object也要进行类型的转换,要和泛型分清
![image-20200813140825850](https://i-blog.csdnimg.cn/blog_migrate/0e4678acb430b64d0ee5cd1ae720742a.png)
Integer继承Number
没有不会报错,有的话就会报错
![image-20200813105328039](https://i-blog.csdnimg.cn/blog_migrate/1fdbaefa6d7786516d984b7d983f21af.png)
把Number变成?也行
![image-20200813105408143](https://i-blog.csdnimg.cn/blog_migrate/d28fad45ecbfe16caaa1b8ef36140880.png)
换成object会报错,因为object也是一种类型
![image-20200813105525430](https://i-blog.csdnimg.cn/blog_migrate/258644b53854ce4f9be16ebee34ea91a.png)
只有?才能接收所有的类型
2.泛型的上限
T必须是Number类型或者它的子类
3.泛型的下限
只能用在?后面使用,T类型不支持super
必须是Number类型或者它的父类
继承子类会把参数传给父类
子类去掉的话,继承的父类要传一个类似于String的具体参数进去,如
2.3 案例
通过泛型自定义集合框架:有序不可重复的框架
Collection(一个一个存);Map(一对一对的存,键值对)
模拟ArrayList的用法:
add方法(判断重复)
get方法:
2.4 重构basedao
三、枚举
是一种数据类型(为一组有限数量的数据)
JDK1.6版本之后可以用switch使用枚举
四、注解(Annotation)
注解(注释)
@WebServlet
@WebFileter
注解就是一个名片,代表了某种身份
通过反射进行注解的解析
4.1自定义创建
注解中属性必须加括号,括号里不能加任何参数
![image-20200813155150523](https://i-blog.csdnimg.cn/blog_migrate/f9afe19f5a61797c51f3f7dd9e4c09d0.png)
类似于
设初始值
4.2 使用注解(元注解)
1.@Retention:三个取值,表示在哪个阶段可以去使用
SOURCE:源码中注解生效
RUNTIME:运行时注解生效
CLASS:编译后的文件注解生效
2.@Target:指当前注解能用在哪些地方
TYPE:可以加在类上
FIELD:可以加在属性上
METHOD:可以加在方法上面
PARAMETER:可以加在参数前面
3.实例
可以是数组
使用注解
练习:
注解本身没有任何功能,只是一种标记,就像是鞋盒上的标签,它要和反射结合起来才能完成某项功能
![image-20200813165427328](https://i-blog.csdnimg.cn/blog_migrate/e1a1c9fc5b82a5692781795a93fad20c.png)
通过反射获得指定的注解信息
rsMapper重写
不在通过rs.getMeta的方式获取字段,通过注解来获取
具体操作
字段为空的时候就不映射
五、 XML(可扩展的标记语言)
Web.xml
XML中用法,自定义标签
DTD:标签的规范,约束,以html开头
XML的解析 (SAX解析和DOM解析)
反射+XML去进行一些工作
在出了注解之前用的是xml配置;工作时可能遇到公司不使用注解的,仍使用xml配置
5.1 概念
java的继承(extend)其实就是扩展
以前用XML传输文件,现在用ajax
二者区别:
![image-20200814094544407](https://i-blog.csdnimg.cn/blog_migrate/a1c03ac0e0ceb232b32e254ee92529f7.png)
结束指的是类似</student>
这样的结束符号
或自己结束
5.2 如何使用
位于左上角,与边框不能留空格,也不能换行
跟html一样,只有一个跟标签(zhangsan),不能重复,整个文件是dom树
在跟标签里面可以有子标签,子标签里面可以继续嵌套标签
![image-20200814095629783](https://i-blog.csdnimg.cn/blog_migrate/e97a4d9a3ccf27752a7f55c3aff5e305.png)
标签里可以写属性,属性值必须加上"",html可以不写
比较符号等:<;>;""
特殊符号要这么写,很别扭
忽略里面的特殊符号,当成纯文本处理:中括号里面会当成纯文本
![image-20200814101113146](https://i-blog.csdnimg.cn/blog_migrate/44df9bf03a603adbbf5e6c5cd7841879.png)
注释和html一样:<!--xxxxxx-->
5.3 添加约束
1.DTD(Document Type Define)约束
mybatis、hyblite官方发布的用的都是DTD约束
1)内部DTD,在XML中直接去使用
约束了student标签里是文本,其他位置不能有文本
![image-20200814104633009](https://i-blog.csdnimg.cn/blog_migrate/79aad5f5a514eb03c4caac5a0c0cc7b3.png)
规定了id,name和age的顺序,不按顺序写会报错
![image-20200814104953352](https://i-blog.csdnimg.cn/blog_migrate/4d1a9fb2ff71af8f870a3887f01401c1.png)
*表示0个或多个(正则表达式)
+表示1个或多个
?表示0个或1个
![image-20200814105407375](https://i-blog.csdnimg.cn/blog_migrate/880b63d507096e64b3cf4f7f183cd218.png)
或者
![image-20200814105612623](https://i-blog.csdnimg.cn/blog_migrate/19dc423ca693f280465b02745d65e834.png)
2)外部DTD
SYSTEM表示引用本地的
一般引用官方的(PUBLIC)
属性
2.Schema约束
springmvc官方发布的是Schema
更强的约束,上面的升级版,只能用文本里定义好的标签,标签也是有一定顺序的