JAVA-反射面试题及答案

一、什么是反射?
在Java运行时环境中,对于任意一个类,可以知道这个类有哪些属性和方法。对于任意一个对象,可以调用它的任意一个方法。这种动态获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射(Reflection)机制。
反射的核心是 JVM 在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。

二、Java 反射主要提供以下功能:

1.在运行时判断任意一个对象所属的类;
2.在运行时构造任意一个类的对象;
3.在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法);
4.在运行时调用任意一个对象的方法;

三、反射使用

a. 通过一个全限类名创建一个对象
   1)、Class.forName("全限类名"); 例如:com.mysql.jdbc.Driver Driver类已经被加载到 jvm中,并且完成了类的初始化工作就行了
   2)、类名.class; 获取Class<?> clz 对象  
   3)、对象.getClass();   
   
b. 获取构造器对象,通过构造器new出一个对象 
   1). Clazz.getConstructor([String.class]); 
   2). Con.newInstance([参数]); 
   
c. 通过class对象创建一个实例对象(就相当与new类名()无参构造器) 
   1). Clazz.newInstance();

d. 通过class对象获得一个属性对象
   1)、Field c=clz.getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。 
   2)、Field c=clz.getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段 
   
e.  通过class对象获得一个方法对象 
   1). Clazz.getMethod("方法名",class…..parameaType);(只能获取公共的) 
   2). Clazz.getDeclareMethod("方法名");(获取任意修饰的方法,不能执行私有) 
   3) . M.setAccessible(true);(让私有的方法可以执行) 
   
f. 让方法执行 
	   1). Method.invoke(obj实例对象,obj可变参数);-----(是有返回值的) 

四、反射优缺点

1.优点:反射可以动态创建对象和编译,最大限度发挥了java的灵活性。
2.缺点:对性能有影响。反射基本上是一种解释操作,告诉JVM我们要做什么并且满足我们的需求,这类操作总是慢于直接执行java代码。

五、哪里会用到反射机制

1.我们在使用JDBC连接数据库时使用Class.forName()通过反射加载数据库的驱动程序;
2.Spring框架也用到很多反射机制,最经典的就是xml的配置模式。Spring 通过 XML 配置模式装载 Bean 的过程:
	1) 将程序内所有 XML 或 Properties 配置文件加载入内存中; 
	2)Java类里面解析xml或properties里面的内容,得到对应实体类的字节码字符串以及相关的属性信息; 
	3)使用反射机制,根据这个字符串获得某个类的Class实例; 
	4)动态配置实例的属性;

六、什么是 java 序列化?什么情况下需要序列化?

1. 序列化:将 Java 对象转换成字节流的过程。
   反序列化:将字节流转换成 Java 对象的过程。
2.注意事项:
	a.某个类可以被序列化,则其子类也可以被序列化
	b.声明为 static 和 transient 的成员变量,不能被序列化。static 成员变量是描述类级别的属性,transient 表示临时数据
	c.反序列化读取序列化对象的顺序要保持一致  

https://xcbeyond.blog.csdn.net/article/details/100046212

七、动态代理是什么?有哪些应用?

1.动态代理是什么?有哪些应用?
动态代理:在运行时,创建目标类,可以调用和扩展目标类的方法。
Java 中实现动态的方式:JDK 中的动态代理 和 Java类库 CGLib。

2.应用场景如:
统计每个 api 的请求耗时
统一的日志输出
校验被调用的 api 是否已经登录和权限鉴定
Spring的 AOP 功能模块就是采用动态代理的机制来实现切面编程

八、怎么实现动态代理?

使用的模式:代理模式。
代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。类似租房的中介。

两种动态代理:
(1)jdk动态代理,jdk动态代理是由Java内部的反射机制来实现的,目标类基于统一的接口(InvocationHandler)
(2)cglib动态代理,cglib动态代理底层则是借助asm来实现的,cglib这种第三方类库实现的动态代理应用更加广泛,且在效率上更有优势。

九、Java反射创建对象效率高还是通过new创建对象的效率高

通过new创建对象的效率比较高。
通过反射时,先找查找类资源,使用类加载器创建,过程比较繁琐,所以效率较低。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java八股文面试题是指在Java面试中常见的一些基础知识问题,下面是一些常见的Java八股文面试题答案: 1. 什么是Java的四大基本特性? 答:Java的四大基本特性包括封装、继承、多态和抽象。 2. 什么是Java的封装? 答:封装是指将数据和对数据的操作封装在一个类中,通过访问修饰符来控制对数据的访问权限,提高代码的安全性和可维护性。 3. 什么是Java的继承? 答:继承是指一个类可以继承另一个类的属性和方法,通过extends关键字实现。子类可以重写父类的方法,实现方法的覆盖。 4. 什么是Java的多态? 答:多态是指同一个方法可以根据不同的对象调用出不同的行为。多态可以通过继承和接口实现。 5. 什么是Java的抽象类和接口? 答:抽象类是指不能被实例化的类,只能被继承。抽象类可以包含抽象方法和具体方法。接口是一种特殊的抽象类,只包含抽象方法和常量,不能包含具体方法。 6. 什么是Java的异常处理机制? 答:Java的异常处理机制是通过try-catch-finally语句块来实现的。当代码可能出现异常时,可以使用try块来包裹可能出现异常的代码,然后使用catch块来捕获并处理异常,最后可以使用finally块来执行一些无论是否发生异常都需要执行的代码。 7. 什么是Java的线程? 答:线程是指程序执行的最小单位,一个进程可以包含多个线程。Java中可以通过继承Thread类或实现Runnable接口来创建线程。 8. 什么是Java反射机制? 答:Java反射机制是指在运行时动态获取类的信息并操作类的属性和方法。通过反射可以实现动态创建对象、调用方法和访问属性等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值