这样写的作用是什么?
题主说的是不是这个啊 (如果没错的话),这是java中用来做序列化的,原理其实很简单,就是一个对象,把它所有的属性和方法都打印出来,然后组成一个字节数组传递给另一个需要的地方去进行反序列化,从而恢复出原来的对象。
这里其实有个问题,就是怎么把一个类中的所有属性和方法都打印出来,这就涉及到类加载的机制了。 在java中,类的加载是这样的(JVM启动时): 也就是,在一个类加载的期间,它能够被加载进内存中并且可以被使用,同时类加载器还负责跟踪类加载的过程和状态,以及执行过程等等信息。(这些信息最终会组成class文件中被加载类的信息)当类加载完成后,一个类型的全部信息都会保存在method、field以及constructor中。
所以,如果我们要把一个已加载的类中的所有属性和方法都打印出来的话,我们可以通过反射来完成这件事情,即使用class加载器去加载一个类,然后再通过反射获取需要打印的属性的值和方法并打印出来。当然,在实际的开发中,我们一般不会像上面这样直接使用反射,而是在代码中加入对反射的处理,这样做可以防止无意识的反射,保护程序的安全。(虽然这种防御性措施看起来有点多余,因为只要有反射也就允许任何类加载了,但是实际上,Java提供了一种机制来限制无法被加载的类的反射,这能够确保我们的程序是安全的)