反射 类的加载 Schema DOM 解析方式和解析器 命名空间
Posted 阿善9
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射 类的加载 Schema DOM 解析方式和解析器 命名空间相关的知识,希望对你有一定的参考价值。
Day15 反射
1.1 类的加载
当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。
l 加载
就是指将class文件读入内存,并为之创建一个Class对象。
任何类被使用时系统都会建立一个Class对象
l 连接
验证是否有正确的内部结构,并和其他类协调一致
准备负责为类的静态成员分配内存,并设置默认初始化值
解析将类的二进制数据中的符号引用替换为直接引用
l 初始化
就是我们以前讲过的初始化步骤 构造方法真正的初始化
1.2 反射概述
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
3.反射_Class对象的初始化时机
1).创建类的实例
Student stu = new Student();
2).第一次使用这个类的静态变量,或者为静态变量赋值
System.out.println(Student.静态变量名);
3).第一次调用类的静态方法
Student.静态方法名();
4).使用反射方式来强制创建某个类或接口对应的java.lang.Class对象【今天讲】
5).第一次初始化某个类的子类
class Person{}
class Student extends Person{}
main(){
Student stu = new Student();//同时也会创建父类对象,在创建父类对象前,会先创建父类的Class对象;
}
6).直接使用java.exe命令来运行某个主类
C:\\>java Demo //创建Demo的Class对象
Day16
Schema是新的XML文档约束;
Schema要比DTD强大很多,是DTD 替代者;
Schema本身也是XML文档,但Schema文档的扩展名为xsd,而不是xml。
Schema 功能更强大,数据类型更完善
Schema 支持名称空间
1.2.1.1.1 2.什么是命名空间
如果一个XML文档中使用多个Schema文件,而这些Schema文件中定义了相同名称的元素时就会出现名字冲突。这就像一个Java文件中使用了import java.util.*和import java.sql.*时,在使用Date类时,那么就不明确Date是哪个包下的Date了。
总之名称空间就是用来处理元素和属性的名称冲突问题,与Java中的包是同一用途。如果每个元素和属性都有自己的名称空间,那么就不会出现名字冲突问题,就像是每个类都有自己所在的包一样,那么类名就不会出现冲突。
1.2.1 3.解析方式和解析器
l 开发中比较常见的解析方式有三种,如下:
- DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象。
a) 优点:元素与元素之间保留结构关系,故可以进行增删改查操作。
b) 缺点:XML文档过大,可能出现内存溢出显现。
- SAX:是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件驱动的方式进行具体解析,每执行一行,都将触发对应的事件。(了解)
a) 优点:处理速度快,可以处理大文件
b) 缺点:只能读,逐行后将释放资源。
- PULL:android内置的XML解析方式,类似SAX。(了解)
l 解析器:就是根据不同的解析方式提供的具体实现。有的解析器操作过于繁琐,为了方便开发人员,有提供易于操作的解析开发包。
l 常见的解析开发包:
n JAXP:sun公司提供支持DOM和SAX开发包
n JDom:dom4j兄弟
n jsoup:一种处理html特定解析开发包
n dom4j:比较常用的解析开发包,hibernate底层采用。
- 反射怎么理解,说一下反射经典的应用
答案: 反射是什么呢?当我们的程序在运行时,需要动态的加载一些类这些类可能之前用不到所以不用加载到jvm,而是在运行时根据需要才加载,这样的好处对于服务器来说不言而喻,举个例子我们的项目底层有时是用mysql,有时用oracle,需要动态地根据实际情况加载驱动类,这个时候反射就有用了,假设 com.java.dbtest.myqlConnection,com.java.dbtest.oracleConnection这两个类我们要用,这时候我们的程序就写得比较动态化,通过Class tc = Class.forName("com.java.dbtest.TestConnection");通过类的全类名让jvm在服务器中找到并加载这个类,而如果是oracle则传入的参数就变成另一个了。这时候就可以看到反射的好处了,这个动态性就体现出java的特性了!举个例子,使用spring中会发现当你配置各种各样的bean时,是以配置文件的形式配置的,你需要用到哪些bean就配哪些,spring容器就会根据你的需求去动态加载,你的程序就能健壮地运行。 |
以上是关于反射 类的加载 Schema DOM 解析方式和解析器 命名空间的主要内容,如果未能解决你的问题,请参考以下文章