Java经典面试题四:反射

问题一:什么是反射?

反射主要是指程序可以访问、检测和修改它本事状态或行为的一种能力。
在Java反射中,可以知道任意一个类有哪些属性,哪些方法,可以调用它的任意一个方法 ;
Java反射机制主要提供以下几个功能:

  • 在运行时判断任意一个对象所属的类;
  • 在运行时构造任意一个类的对象;
  • 在运行时判断任意一个类具有的成员变量和方法;
  • 在运行时调用任意一个对象的方法。

问题二:什么是Java序列化?什么情况下需要序列化?

为了保存对象在内存中的状态,并且可以把保存的对象再读出来;
序列化:将Java对象转换成字节流的过程;
反序列化:将字节流转换成Java对象的过程;

什么情况需要序列化:
当Java对象需要在网络上传输或者持久化存储的时候。

问题三:动态代理是什么?有哪些应用?

动态代理:
当你要实现某个接口的类中的方法,加一些额外的处理。比如加日志、事务等。就可以创建一个代理类,这个类包含原来的基础之上又添加了额外的功能。这个代理类不是定义好的,而是动态生成的。既有解耦意义,扩展性强。

应用:Spring的AOP,加事务,加权限,加日志。

问题四:怎么实现动态代理?

在java.lang.reflect包下提供了一个Proxy和InvocationHandler接口,通过这个类和接口可以生成动态代理类和动态代理对象。

  • 先定义一个接口,还要有一个InvocationHandler处理类(将实现接口的类的对象传递给他)。
  • 再有一个工具类Proxy,也叫代理类,调用newInstance()方法产生代理对象,其实Proxy只是一个产生代理对象的工具类。
  • 利用InvacationHandler,拼接代理类源码,将其编译生成代理类的二进制码,利用类加载器加载,并将其实例化产生代理对象,最后返回。
//创建一个与代理对象相关联的InvocationHandler
  InvocationHandler stuHandler = new MyInvocationHandler<Person>(stu);
//创建一个代理对象stuProxy,代理对象的每个执行方法都会替换执行Invocation中的invoke方法
  Person stuProxy= (Person) Proxy.newProxyInstance(Person.class.getClassLoader(), new Class<?>[]{Person.class}, stuHandler);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值