目录
一、反射
Ⅰ、获取Class对象的三种方式:
用来创建对象">2、获取构造方法(构造器)-->用来创建对象
3、获取成员方法
4、获取类名
二、注解
Ⅰ、常用注解:
1.限定父类重写方法:@Override
2.标示已过时:@Deprecated //带破 kei 忒的
3.抑制编译器警告:@SuppressWarnings //舍普ruai死 wao宁死
Ⅱ、自定义注解:
格式
属性
使用注解需给属性赋值
Ⅲ、元注解:用于描述注解的注解
常见元注解
解析注解:
三、XML
XML语言的作用:
XML文件的特点:
XML的语法规则:
常用xml转义字符
XML语法:
DTD文件:
XSD文件:
解析XML文件4种方法:
4种方式优缺点:
使用dom4j解析XML文档:
遍历子节点的操作,方法都在Element类中
解析属性。方法在Attribute类中 //额崔biu 的
添加属性。方法在Element类中
创建新的节点添加注释
将创建好的新内容(节点,节点里的内容,注释,属性)写入文件中
通过Xpath操作xml文件
获得该节点下指定子节点,Element下的方法
一、反射
框架概念:框架就是一些类和接口的集合,通过这些类和接口协调来完成一系列的程序实现。相当于半成品软件,可以在框架的基础上进行软件开发,简化代码。
反射概念:框架设计的灵魂。将类的各个部分封装为其他对象,这就是反射机制.
反射好处:1.可以在程序运行的过程中,操作这些对象
2.可以解耦,提高程序的可扩展性.
Ⅰ、获取Class对象的三种方式:
1、Class.forName(“全类名(包名.类名)”):将字节码的文件加载进内存,返回Class对象.
| static Class> | forName(String className) 返回与带有给定字符串名的类或接口相关联的 Class 对象。 |
2、类名.class:通过类名的属性class获取.多用于参数列表
3、对象.getClass():getClass()方法在Object类中定义.
| Class> | getClass() | 返回此 Object的运行时类。 |
Ⅱ、Class类访问类中成员:
1、获取成员变量:
Field[] getFields() //非欧的 //获取public修饰的所有成员变量 Field getField(String name) //获取public修饰的指定的成员变量 Field[] getDeclaredFields() //得可来额的 //获取所有权限修饰的成员变量 Field getDeclaredField(String name) //获取所有权限修饰的指定的成员变量
Field类中的方法
Object
get(Object obj)
获取变量的值,obj为对象名
void
set(Object obj, Object value)
为变量设置新值,obj为对象名,value为新值
void
setAccessible(boolean) //额可晒死包 当访问非public修饰的成员变量,需要先忽略权限修饰符的安全检查,参数写入true即可.
2、获取构造方法(构造器)-->用来创建对象
Constructor>[] getConstructors() //啃食抓科特(日)
Constructor getConstructor(类>...parameterTypes)
//传入参数为类中成员变量类型,格式为:变量类型.class
Constructor>[] getDeclaredConstructors()
Constructor getDeclaredConstructor(类>...parameterTypes)
2、获取构造方法(构造器)-->用来创建对象
Constructor>[] getConstructors() //啃食抓科特(日)
Constructor getConstructor(类>...parameterTypes)
//传入参数为类中成员变量类型,格式为:变量类型.class
Constructor>[] getDeclaredConstructors()
Constructor getDeclaredConstructor(类>...parameterTypes)
注意事项:①getConstructors方法获取的所有构造器的顺序是不一定的!!!
| Object | newInstance(Object... initargs) 用来创建对象,传入成员变量的值 |
3、获取成员方法
Method[] getMethods()
//获取所有的public修饰的方法,同时会包含继承的父类的等等
Method getMethod(String name,类>...parameterTypes)
//参数name为方法名称。后边为参数的类型,格式为参数类型.class
Method[] getDeclaredMethods()
Method getDeclaredMethod(String name,类>...parameterTypes)
| Object | invoke(Object obj, Object... args) 执行类中方法,obj为对象名,args为传入参数值 | |
| String | getName() 以 String 形式返回此 Method 对象表示的方法名称。 | |
| boolean | isAnnotationPresent(注解名称.class) 判断该Method对象上面是否有注解 //哎呢忒神 颇深特 | |
4、获取类名
String getName() //返回全类名
| ClassLoader | getClassLoader() | 返回类的类加载器。 |
| InputStream | getResourceAsStream(String name) //瑞烧死 // | 查找具有给定名称的资源,主要用途是将资源包转换成 |
二、注解
Ⅰ、常用注解:
1.限定父类重写方法:@Override
当子类重写父类方法时,子类可以加上这个注解,检测子类确实重写了父类的方法,避免出现低级错误
2.标示已过时:@Deprecated //带破 kei 忒的
这个注解用于表示某个程序元素类,方法等已过时,当其他程序使用已过时的类或方法时,编译器会给出警告
3.抑制编译器警告:@SuppressWarnings //舍普ruai死 wao宁死
被该注解修饰的元素以及该元素的所有子元素取消显示编译器警告,例如修饰一个类,那他的字段,方法都不显示警告@SuppressWarnings(“all”)
Ⅱ、自定义注解:
注解本质是一个接口,默认继承java.long.annotation.Annotation接口
格式
元注解
public @interface 注解名称{属性列表}
属性
注解里面的抽象方法
属性的返回值类型:基本类型、String、枚举、注解,还包括以上类型的数组。
使用注解需给属性赋值
赋值的两种方法:
1、在使用注解时@Override(name=”sa”,age=9)
2、在定义注解时跟在属性后面跟 default “张三”,就可以不赋值
3、如果只有一个属性需要赋值,并且属性的名字叫value,则可以直接在使用注解的时候给值
@Override(19)
各类型赋值方法:1、注解:属性名称=@注解名称
2、数组:属性名称={“abc”,“cde”};如果数组内容只有一个,则可以省略大括 号。
3、枚举:属性名称=枚举名称.里面的量
Ⅲ、元注解:用于描述注解的注解
常见元注解
1、@Target:描述注解能够作用的位置 //ta e 盖特
里面是一个value方法 ,返回值ElementType[]枚举数组
枚举里面的常量包括:
TYPE:作用于类上 //tai 坡
METHOD:作用于方法上
FIELD;作用于成员变量上
2、@Retention:描述注解被保留的阶段 //瑞ten信
里面是一个value方法 ,返回值RetentionPolicy枚举类型
枚举里面包括的常量: //泡了谁
SOURCE:源代码阶段。//骚死 只在源代码级别保留,编译时就会被忽略
CLASS:类对象阶段。编译时被保留,在class文件中存在,但JVM将会忽略
RUNTIME:运行时阶段,一般都取这个值。这种类型的Annotations将被JVM保留,所以他们
能在运行时被JVM或其他使用反射机制的代码所读取和使用.
3、@documented:描述注解是否被抽取到api文档中
4、@Inherited:描述注解是否被子类继承
解析注解:
1、获取该类的Class对象 Class<类名> 对象名=类名.Class
2、使用Class中的方法获取注解对象
| Annotation> A | getAnnotation(Class annotationClass) | 参数为注解的Class对象,返回值为注解对象. |
使用此方法其实就是在内存中生成了该接口的实现类对象,并且按照注解重写了里面的抽象方法.
3、调用注解中的抽象方法获取返回值.
注意事项:如果注解在方法上,获取该方法的Mathod对象,里面也有getAnnotation()方法.
三、XML
x(extensible)可扩展的 M(markup)标记/节点 L(language)语言 -->可扩展的标记语言.
XML语言的作用:
1、存:特殊的文件,单级游戏里的等级和装备存到XML文件中
2、传:网络上传递数据
3、配置文件
XML文件的特点:
- 跨平台性
- 多语言都支持XML语言
- XML具有自我描述性:所有节点(元素)自定义
XML的语法规则:
- 要有根节点,只能有一个
- 节点要有开始和结束<节点名> .....内容 节点名>
- XML文件对大小写敏感
- XML节点的属性值必须加引号(单双都可),<节点 whit =”12”> ,属性的个数没有限制。
常用xml转义字符
>;> ⁢ < & &
XML语法:
1、注释的结构:
2、XML中书写特殊字符的方 法: 变成普通字符串.
DTD文件:
DTD:document Type Definition 文档类型定义
DTD:帮助作者编写合法的代码。对节点有约束,XML使用时需要先引用头文件.
XSD文件:
XSD:Schemas Definition Definition 结构定义
XSD:时DTD的替代品,比DTD高端(可以定义数据类型),使用时也需要引用头文件.
解析XML文件4种方法:
-
DOM解析
-
SAX解析
-
JDOM解析
-
DOM4J解析
- 前两种是基础方法,于平台无关的解析方式,后两种是于java平台相关的解析方式.
4种方式优缺点:
- dom解析原理,文档中所有的元素按照其出现的层次关系,在内存中构造出树形结构。优点是可以遍历和修改节点内容,缺点是容易内存溢出,解析速度慢。
- sax:相比dom速度快更有效,但是不能修改节点内容。
- jdom:仅适用于具体的类,而不用接口,不灵活。
- dom4j:jdom的一种智能分支,合并了许多超出基本xml文档的功能.
使用dom4j解析XML文档:
DOM解析
SAX解析
JDOM解析
DOM4J解析
4种方式优缺点:
- dom解析原理,文档中所有的元素按照其出现的层次关系,在内存中构造出树形结构。优点是可以遍历和修改节点内容,缺点是容易内存溢出,解析速度慢。
- sax:相比dom速度快更有效,但是不能修改节点内容。
- jdom:仅适用于具体的类,而不用接口,不灵活。
- dom4j:jdom的一种智能分支,合并了许多超出基本xml文档的功能.
使用dom4j解析XML文档:
使用dom4j解析XML文档:
1、将dom4j解析包导入到项目中
文件->项目结构->添加到库
2、将文件转成InputStream流
该类.class.getResourceAsStream(String name)
3、创建SAXReader对象 //文件
4、①调用里面的read()方法获取document文档对象->document
②reader方法有多种重载,包括传入Flie对象和InputStream流
5、获得Element根节点对象element。使用 document.getRootElement();
6、用Element对象中其他方法进行XML的操作
遍历子节点的操作,方法都在Element类中
获取Element的对象,element获得的是根节点对象.
List
String getName() 获得该节点的节点名
Object getData() 获得该节点内部的值
解析属性。方法在Attribute类中 //额崔biu 的
获取Attribute属性对象 element.attribute(String str)//参数为属性名称,该方法有重载
String getValue() 获取该属性对应的值
添加属性。方法在Element类中
void addAttribute(String str1,String str2)str1为属性名,str2为属性值
创建新的节点添加注释
在节点下创建新节点,方法还是Element类中
Element addElement(String str) 创建一个子节点,参数为创建节点的名字
void SetText(String str) 向节点中添加值
void addConment(String str) 在该节点下写入注释
将创建好的新内容(节点,节点里的内容,注释,属性)写入文件中
XMLWriter xwl = new XMLWrite(OutputStream,OutputFormat);//路径,写入方式
XMLWriter构造方法中参数详解
OutputStream:为写入的文件地址
OutputFormat = new OutputStream(“t”,true,”utf-8”);//控制写入的格式。在dom4j包种
参数含义为:开头空格,换行重写,编码方式)
xwl.write(document doc) //将xml文档写入文件
xwl.close() //关闭
通过Xpath操作xml文件
xpath是一种在xml文件中快速查找信息的方式,可轻松查找节点,不需要使用层级遍历。使用之前需要先导包
获得该节点下指定子节点,Element下的方法
List
作用 参数格式
获得对象节点下子节点对象集合 节点名
获得节点下指定索引处子节点集合 节点名[索引] //索引1开始
获得节点下子节点集合的末尾 节点名[last()]
获得节点下子节点集合的倒数第二个 节点名[last()-1]
获得节点下指定索引范围的子节点集合 节点名[position()>2]
获得该节点多层下子节点集合 节点名/节点名
获得全部该节点集合,忽略层级和位置 //节点名
获得节点下子节点,具有某个属性 节点名[@属性名称] 或者 节点名称[@属性名称 = “属性值”]
获得节点下子节点,使用节点内容筛选 节点名称[节点名称>num]
例子:List
Node中的方法:
String getName() //获得该节点名称
String getTest() //获得该节点内的内容



