博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java基础知识总结--反射
阅读量:4970 次
发布时间:2019-06-12

本文共 1354 字,大约阅读时间需要 4 分钟。

反射:在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识。这个信息跟踪着每一个对象所属的类。虚拟机利用运行时类型信息选择相应的方法执行。

Java反射机制是在系统运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java的反射机制。

要想解剖一个类,必须先要获取到该类的字节码文件对象。使用Class类中的方法,可以获取到每一个字节码文件对应的Class类型的对象。Class类的实例表示正在运行的Java应用程序中的类和接口,也就是jvm中有N多的实例每个类都会有该Class类所对应的对象。

Class没有公共的构造方法,Class对象是在加载类时由java虚拟机以及通过调用类加载器中的defineClass方法自动构造的也就是这不需要我们自己创建Java虚拟机帮我们自动创建好。

通常情况下获取Class对象的方法:

l  通过Class类的静态方法:forName(String className)

 

我们知道静态方法直接调用,返回值就是该类所对应的Class的对象。需要注意:在运行期间每个类只有一个Class对象产生。

 

什么是Java序列化?如何实现序列化?

序列化理解成“打碎”是可以的,不过在书本上的名词就是将对象转换成二进制。Java的“对象序列化”能将一个实现了serializable接口的对象转换成一组二进制byte,这样日后要用这个对象的时候就能把这些byte数据恢复出来,并据此重新构建对象。这一点甚至在跨网络的环境下也是如此这就意味着序列化及智能自动补偿操作系统方面的差异。换言之:可以在Windows上创建的对象,序列化之后在通过网络传到linux上进行重建,不需要考虑具体的创建过程因为这跟具体的平台有关。

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化(将对象转换成二进制)。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。 implements Serializable只是为了标注该对象是可被序列化的。

序列化是将对象状态转换为可保持或传输的格式的过程。说明白点就是你可以用对象输出流输出到文件.如果不序列化输出的话.很可能出现乱码!

实现方式是实现java.io.Serializable接口.这个接口不需要实现任何具体方法.只要implements java.io.Serializable 就好了。一般而言,要使一个类可以序列化,只需简单实现java.io.Serializable接口即可。

 

      要想序列化一个对象,必须先创建一个OutputStream,然后再把它传给ObjectOutputStream,这时候就能用writeObject()方法吧对象写入到OutputStream。读的时候过程刚好相反,需要把InputStream传给ObjectOutputStream,然后再调用readObject()方法。

 

转载于:https://www.cnblogs.com/BaoZiY/p/10146139.html

你可能感兴趣的文章
【目录】mysql 进阶篇系列
查看>>
数据类型(一)
查看>>
输入法评价
查看>>
阅读《实例化需求》7–9章有感
查看>>
用 epoll 写一个socket双工通信
查看>>
搭建maven web项目并配置quartz定时任务【业务:对比数据变化内容】 历程
查看>>
边工作边刷题:70天一遍leetcode: day 85-4
查看>>
Java线程:线程的同步与锁
查看>>
第三次实验报告
查看>>
Python中-eval的使用
查看>>
本月题量 180122晚-180222午
查看>>
.Net core 下的ConfigurationManager类正确引用方法
查看>>
selerium配置环境:安装Chromedriver
查看>>
格言?
查看>>
linux ssh_config和sshd_config配置文件
查看>>
【夯实PHP基础】PHP 面向对象
查看>>
在shell script中进行数值运算的两种方法
查看>>
Web - LNMP
查看>>
DevOps - 版本控制 - Git
查看>>
多应用单账户登录体系梳理
查看>>