Java 数据交换格式与反射机制 -总结

Java数据交换格式与反射机制

如想了解更多更全面的Java必备内容可以阅读:所有JAVA必备知识点面试题文章目录:


思考1:什么是数据交换格式?
数据交换格式:就是客户端与服务器常用的数据交换格式xml,json,html等,常用于面向接口开发。

思考2:什么是JAVA反射机制
JAVA反射机制是在运行状态中。对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。


1. 数据交换格式 — JSON

定义: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 JSON采用完全独立于程序语言的文本格式,但是也使用了类C语言的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

JSON基于两种结构:
json简单说就是javascript中的对象和数组,
①对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,…}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值
②数组:数组在js中是中括号“[]”括起来的内容,数据结构为 [“java”,“javascript”,“vb”,…],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

{
    "animals": {
        "dog": [
            {
                "name": "Rufus",
                "age":15
            },
            {
                "name": "Marty",
                "age": null
            }
        ]
    }
}

常用JSON解析框架:
1). json-lib(net.sf.json.JSONObject): json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包,
包括commons-beanutils.jar,commons-collections-3.2.jar,commons-lang-2.6.jar,commons-logging-1.1.1.jar,ezmorph-1.0.6.jar,
对于复杂类型的转换,json-lib对于json转换成bean还有缺陷,比如一个类里面会出现另一个类的list或者map集合,json-lib从json到bean的转换就会出现问题。json-lib在功能和性能上面都不能满足现在互联网化的需求。
2). 开源的Jackson: 相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。而且Jackson社区相对比较活跃,更新速度也比较快。Jackson对于复杂类型的json转换bean会出现问题,一些集合Map,List的转换出现问题。Jackson对于复杂类型的bean转换Json,转换的json格式不是标准的Json格式。
3). Google的Gson: Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来.Gson的应用主要为toJson与fromJson两个转换函数,无依赖。而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。类里面只要有get和set方法,Gson完全可以将复杂类型的json到bean或bean到json的转换,是JSON解析的神器。
Gson在功能上面无可挑剔,但是性能上面比FastJson有所差距。
4). 阿里巴巴的FastJson: Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。
FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。


2. 数据交换格式 — XML

定义: XML 指可扩展标记语言(EXtensible Markup Language);XML 是一种标记语言,很类似 HTML;XML 的设计宗旨是传输数据,而非显示数据;XML 标签没有被预定义。您需要自行定义标签。;XML 被设计为具有自我描述性。;XML 是 W3C 的推荐标准。

XML结构: XML 声明:指明所用 XML 的版本、文档的编码、文档的独立性信息;文档类型声明:指出 XML 文档所用的 DTD;元素:由开始标签、元素内容和结束标签构成;注释:以结束,用于对文档中的内容起一个说明作用;处理指令:通过处理指令来通知其他应用程序来处理非 XML 格式的数据。

常用XML解析方式: DOM解析;JDOM解析;DOM4J解析;SAX解析;Pull解析。

Dom4j与Sax区别: dom4j不适合大文件的解析,因为它是一下子将文件加载到内存中,所以有可能出现内存溢出,sax是基于事件来对xml进行解析的,所以他可以解析大文件的xml,也正是因为如此,所以dom4j可以对xml进行灵活的增删改查和导航,而sax没有这么强的灵活性,所以sax经常是用来解析大型xml文件,而要对xml文件进行一些灵活(crud)操作就用dom4j。


3. XML与JSON区别

它们都是一种数据交换格式。
1). xml是重量级的,json是轻量级的。
2). xml在传输过程中比较占带宽,json占带宽少,易于压缩。
3). xml和json都用在项目交互下,xml多用于做配置文件,json用于数据交互。
4). json可用jackson,gson、FastJson等方法解析,xml可用dom,sax,demo4j等方式解析。


4. Java反射机制

反射机制的作用: 对于任意一个类、任意一个对象,都能够知道这个类的所有属性和方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

应用场景:
1)在Spring框架中的IOC的实现就是使用的ClassLoader。
2)而在JDBC时通常是使用Class.forName()方法来加载数据库连接驱动。这是因为在JDBC规范中明确要求Driver(数据库驱动)类必须向DriverManager注册自己。
3)框架底层实现。

反射机制获取类有三种方法:

	//第一种方式:  
	Class<?> c1 = Class.forName("Employee");  
		
	//第二种方式:  
	//java中每个类型都有class 属性.  
	Class<?> c2 = Employee.class;  
		   
	//第三种方式:  
	//java语言中任何一个java对象都有getClass 方法  
	Employeee e = new Employee();  
	Class<?> c3 = e.getClass(); //c3是运行时类 (e的运行时类是Employee) 

反射创建对象的方式:

	Class<?> forName = Class.forName("com.entity.User");
	// 创建此Class 对象所表示的类的一个新实例 调用了User的无参数构造方法.
	Object newInstance = forName.newInstance();

    //实例化有参构造函数
    Class<?> forName = Class.forName("com.entity.User");
    Constructor<?> constructor = forName.getConstructor(String.class, String.class);
    User newInstance = (User) constructor.newInstance("精彩猿笔记", "https://blog.csdn.net/shishishilove");

反射创建API:

方法名称作用
getDeclaredMethods []获取该类的所有方法
getReturnType()获取该类的返回值
getParameterTypes()获取传入参数
getDeclaredFields()获取该类的所有字段
setAccessible()允许访问私有成员

反射中 Class.forName 和 ClassLoader 的区别: 详情讲解

  • Class.forName:除了将类的.class文件加载到jvm中之外,还会默认对类进行初始化,执行类中的静态代码块,以及对静态变量的赋值等操作。
  • ClassLoader:将.class文件加载到jvm中,默认不会对类进行初始化,只有在newInstance才会去执行static块。

====================================================================

······
帮助他人,快乐自己,最后,感谢您的阅读!
所以如有纰漏或者建议,还请读者朋友们在评论区不吝指出!

个人网站…知识是一种宝贵的资源和财富,益发掘,更益分享…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值