理解java反射

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

在回答面试官的时候适当结合自己的理解即可。

实现反射的步骤:

  1.获取Class类

  2.通过Class创建对象

  3.获取类中的方法

  4.获取类中的属性,属性值或类型

三种方式如下:

public static void main(String[] args) {
        //第一种方式 通过对象获取Class
        Student student = new Student();
        Class sc=student.getClass();
    }
public static void main(String[] args) {
        //第二种方式 直接通过类名获取
        Class sc2=Student.class;
  }
//第三种方式  通过类的全称获取(使用forName方法)
        Class sc3=Class.forName("com.java.Student");  //类所在的包的路径
       
 //使用newInstance方法来创建实例对象。
  Student s1=(Student)sc.newInstance(); //强转
 Field f1=s1.getClass().getDeclaredField("name");   //获取方法中的name属性        
 Method getm1=s1.getClass().getDeclaredMethod("getName", new Class[]{}); //获取getname方法  这里的getName是可以修改成你想获取的方法

意义:

java的反射机制就是增加程序的灵活性,避免将程序写死到代码里,
例如: 实例化一个 person()对象, 不使用反射, new person(); 如果想变成 实例化 其他类, 那么必须修改源代码,并重新编译。
      使用反射: class.forName("person").newInstance(); 而且这个类描述可以写到配置文件中,如 **.xml, 这样如果想实例化其他类,只要修改配置文件的"类描述"就可以了,不需要重新修改代码并编译。
增加程序的灵活性。
如struts中。请求的派发控制。
当请求来到时。struts通过查询配置文件。找到该请求对应的action。已经方法。
然后通过反射实例化action。并调用响应method。
如果不适用反射,那么你就只能写死到代码里了。
所以说,一个灵活,一个不灵活。
很少情况下是非用反射不可的。大多数情况下反射是为了提高程序的灵活性。
因此一般框架中使用较多。因为框架要适用更多的情况。对灵活性要求较高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值