java面试反射

目录

什么是反射?

反射的优缺点是什么?

优点:

缺点:

反射有那些应用?


场景:今天电话面试被问到反射了,感觉答得一塌糊涂,只答了概念,优缺点没有出来,记录一下

什么是反射?

Java反射是一种能够在程序运行时动态访问、修改某个类中任意属性和方法的机制(包括private实例和方法)。

java反射机制提供了以下几个功能:

在运行时判断任意一个对象所属的类;

在运行时获取任意一个类的对象;

在运行时获取任意一个类所具有的成员变量和方法;

反射的优缺点是什么?

优点:

1.增加程序的灵活性,避免将程序写死到代码里。

例:定义了一个接口,实现这个接口的类有20个,程序里用到了这个实现类的地方有好多地方,如果不使用配置文件手写的话,代码的改动量很大,因为每个地方都要改而且不容易定位,如果你在编写之前先将接口与实现类的写在配置文件里,下次只需改配置文件,利用反射(java API已经封装好了,直接用就可以用 Class.newInstance())就可完成。

2.代码简洁,提高代码的复用率,外部调用方便

package cn.yonyong.reflection.testdemo;

interface Fruit { //水果接口

public void eat() ; //吃水果

}

class Apple implements Fruit{ //定义苹果

public void eat() {
System.out.println("**吃苹果。");

}

}

class Orange implements Fruit{
public void eat() {
System.out.println("**吃橘子。");

}

}

class Factory{
public static Fruit getInstance(String className){
Fruit fruit = null ;

try{
fruit = (Fruit) Class.forName(className).newInstance() ;

}catch(Exception e ){
e.printStackTrace() ;

}

return fruit ;

}

}

public class FactoryDemo{
public static void main(String args[]){
//通过工厂类取得接口实例,传入完整的包.类名称

Fruit f = Factory.getInstance("cn.yonyong.reflection.testdemo.Apple") ;

if(f!=null){ //判断是否取得接口实例

f.eat() ;

}

}

}

 

1.性能问题

使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此Java反射机制主要应用在对灵活性和扩展性要求很高的系统框架上,普通程序不建议使用

反射包括了一些动态类型,所以JVM无法对这些代码进行优化。因此,反射操作的效率要比那些非反射操作低得多。我们应该避免在经常被 执行的代码或对性能要求很高的程序中使用反射。
3.安全限制

反射有那些应用?

spring中bean的配置,通过配置类获取该类的对象

springBoot中自动配置的加载

获取数据库的驱动也是采用反射‘

tomcat服务器(有时间需要系统学习一下)

参考:https://blog.csdn.net/weixin_33256071/article/details/114165749

          https://blog.csdn.net/jinwufeiyang/article/details/80115119

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值