一,xml
1,xml简介
可扩展标记语言,简称XML。是一种用于标记电子文件使其具有结构性的标记语言言。 在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输。
- 存储数据
- 传输数据
案例:
- 写一个xml文件,用来储存家庭人口信息(姓名,年龄等)。
<?xml version="1.0" encoding="UTF-8" ?> <families> <family> <person> <name>父亲</name> <age>36</age> </person> <person> <name>母亲</name> <age>35</age> </person> </family> <family> <person> <name>父亲</name> <age>36</age> </person> <person> <name>母亲</name> <age>35</age> </person> </family> </families>
- 总结特点
1.必须要有一个根标签
2.任意标签之间只能是包含关系或并列关系,合理的嵌套
2.xml解析
- 先导入jar包
@Test//获取mxl中的数据
public void test() throws DocumentException {
//1.获取sax解析器对象
SAXReader reader = new SAXReader();
//2.读取某个xml文件--返回一个文档对象,表示整个xml文档树
Document doc = reader.read("src/xml1/a.xml");
//3.获取根标签
Element root = doc.getRootElement();
//4.逐级向下寻找标签
Element family1 = (Element) root.elements("family").get(0);
Element person1 = (Element)family1.elements("person").get(0);
Element age = person1.element("age");
System.out.println(age.getText());//获取标签的文本内容
}
二,Reflect
1.反射概念
java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。
理解Reflect
- 反射
- 反转
理解为控制反转,权力的反转:
每一个人都有活着的权力,行动和自由的权力;每一个类都有创建对象,调用属性和方法的权力。现在将类的这些权力转交给class对象,让它来帮助某个类去完成这些操作。 - 理解class
每一个实体类都会被编译成字节码文件,Java中万事万物都是对象,那么天下所有的字节码文件都可以看成是对象,谁的对象呢?当然得有一个类,来代表所有的字节码文件,这个类就是class类。 即:所有实体类文件被编译成字节码文件后,都可以看成是class类的对象。
例如:
Class c = Dog.class;
Dog.class就表示Dog类文件被编译后的字节码文件。
2.反射功能
- 三种方式获取class对象
@Test//获取Class --范围:所有的字节码文件
public void test() throws ClassNotFoundException {
//方式1--通过类名
Class c = Dog.class;//Dog.java编译后的字节码文件
Class c1 = Book.class;//Book.java编译后的字节码文件
//方式2--通过对象
Class c3 = new Dog().getClass();
//方式3--通过类路径
Class c4 = Class.forName("reflect1.Book");
管理无参构造
@Test
public void test3() throws Exception {
//1.获取到某个类的字节码文件对象,即Class的对象
Class<Dog> c = Dog.class;
//2.获取有参构造的管理对象--2个参数的那个
Constructor<Dog> con = c.getDeclaredConstructor(String.class,int.class);
//3.帮助Dog类调用有参构造
Dog dog = con.newInstance("旺财",2);
System.out.println(dog);
}
管理属性
//3.管理属性
@Test
public void test4() throws Exception {
//1.获取到某个类的字节码文件对象,即Class的对象
Class<Dog> c = Dog.class;
//2.获取某个属性的管理对象
Field f = c.getDeclaredField("name");
//先创建一个狗狗对象
Dog dog = c.newInstance();
f.setAccessible(true);//开启私有属性操作权限
//3.帮助dog给name属性赋值
f.set(dog,"来福");
System.out.println(dog);
}
管理方法
//4.管理方法
@Test
public void test5() throws Exception {
//1.获取到某个类的字节码文件对象,即Class的对象
Class<Dog> c = Dog.class;
//2.获取某个方法setAge(int age)的管理对象
Method m = c.getDeclaredMethod("setAge", int.class);
//先创建一个狗狗对象
Dog dog = c.newInstance();
//3.帮助dog给调用setAge方法
m.invoke(dog,3);
//System.out.println(dog);
//管理toString方法
Method m2 = c.getDeclaredMethod("toString");
System.out.println(m2.invoke(dog));
}