web_day11 反射

1.xml用在传递数据(大多用json)和配置文件

  • 文档声明必须为<?xmi开头,以7>结束;
    文档声明必须从文档的0行0列位置开始;
    文档声明只有三个属性:
    versioin:指定XML文档版本。必须属性,不会选择1.1(不向下兼容),只会选择1.0;
    encoding:指定当前文档的编码。可选属性,默认值是utf-8
  • xml中符号转化:
<  &lt
> &gt
" &quot
' &apos
& &amp
--------------
在cdata区中不会被编译按源码进行
<![CDATA[
内容
]]>

2.dtd xml文件约束(较少使用)

  • 内部DTD,在XML文档内部嵌入DT D,只对当前XML有效。外部dtd关键字system,公共关键字public
图片.png
图片.png
图片.png

3.schema

  • 替代dtd,约束文件和要编写的放在一起
图片.png
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://www.example.org/web-app_2_5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
    version="2.5">
    <servlet>
    <servlet-name>name</servlet-name>
    <servlet-class>cn.fb.schmer.Son</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>name-map</servlet-name>
    <url-pattern>/url1</url-pattern>
    </servlet-mapping>
</web-app>
图片.png

4.dom4j解析器

图片.png
  • 开发中比较常见的解析方式有三种,如下:
    DOM:要求解析器把鸭个XML文档装载到内存,并解析成一个。ocument对象。
    。)优点:元素与元素之间保留结构关系,故可以进行增删改查操作。
    b)缺点:XML文档过大,可能出现内存溢出显现。
    SAX:是一种速度更快,更有效的方法。‘已逐行扫描文档,一边扫描一边解析。并以事件驱动的
    方式进行具体解析,每执行一行,都将触发对应的事件。(了解)
    a)优点:处理速度快,可以处理大文件
    b)缺点:只能读,逐行后将释放资源。
    PULL: Android内置的XML解析方式,类似SAXo(了解)
    常见的解析开发包:
    .JAXP: sun公司提供支持DOM和SAX开发包
    .J Dom:dom4j兄弟
    .jsoup:一种处理H丁ML特定解析开发包
    .dom4j:匕较常用的解析开发包,hibernate底层采用。
图片.png
图片.png

···
---------解析xml文件获得class反射路径--------
@Test
public void show1(){
try {
SAXReader read=new SAXReader();
Document doc = read.read("src/cn/fb/xml/dom4j/web.xml");
Element root = doc.getRootElement();
Element let = root.element("servlet");
Element classname = let.element("servlet-class");
Class class1=Class.forName(classname.getText());
Person son=(Person) class1.newInstance();
son.init();
son.body();
son.destory();
} catch (Exception e) {
e.printStackTrace();
}
}

···

5.反射

  • 动态创建对象获得方法并执行
  • 三种方法
Person p = new Person();//创建Peron对象
Class clazz = p.getClass();
--------
Class clazz = Person.class;
--------------
 Class clazz = Class.forName("cn.itcast.bean.Person");//必须类全名
-----------------------
清单1,获取字节码文件中的字段。
Class clazz = Class.forName("cn.itcast.bean.Person");
//获取该类中的指定字段。比如age
Field field = clazz.getDeclaredField("age");//clazz.getField("age");    //为了对该字段进行操作,必须要先有指定类的对象。
Object obj = clazz.newInstance();
    //对私有访问,必须取消对其的访问控制检查,使用AccessibleObject父类中的setAccessible的方法
field.setAccessible(true);//暴力访问。尽量不要访问私有   
field.set(obj, 789);
    //获取该字段的值。
Object o = field.get(obj);
System.out.println(o);
备注:getDeclaredField:获取所有属性,包括私有。
  getField:获取公开属性,包括从父类继承过来的,不包括非公开方法。
清单2,获取字节码文件中的方法。
//根据名称获取其对应的字节码文件对象
Class clazz = Class.forName("cn.itcast.bean.Person");
//调用字节码文件对象的方法getMethod获取class对象所表示的类的公共成员方法(指定方法),参数为方法名和当前方法的参数,无需创建对象,它是静态方法
Method method = clazz.getMethod("staticShow", null);
//调用class对象所表示的类的公共成员方法,需要指定对象和方法中的参数列表
method.invoke(null, null);
………………………………………………………………………………………………………
Class clazz = Class.forName("cn.itcast.bean.Person");   
    //获取指定方法。
Method method = clazz.getMethod("publicShow", null);
    //获取指定的类对象。 
Object obj = clazz.newInstance();
method.invoke(obj, null);//对哪个对象调用方法,是参数组
好处:大大的提高了程序的扩展性。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容

  • 1. XML总结 1.1. XML简介 XML : 可扩展的标记语言。(和HTML非常类似的) 可扩展的。 自定义...
    Ethan_Walker阅读 2,984评论 0 12
  • 1、XML的语法 文档声明写法: <?xml version="1.0" ?>文档声明必须出现在xml文件...
    来个芒果阅读 1,269评论 0 1
  • 1. XML简介 以下内容来自于http://www.w3school.com.cn/xml 基本知识 XML 和...
    WebSSO阅读 1,902评论 1 7
  • 热修复实现原理——MultiDex 一、 MultiDex 1、MultiDex 产生背景 当Android系统安...
    墨留痕阅读 458评论 0 1
  • 2016了,要为人生的下一阶段定下一些目标去实现。 一、要学习的 要写学习笔记! 1. nodejs es2015...
    SinalVee阅读 224评论 0 0