java动态与反射的基本原理及实际应用

本文介绍了Java反射机制的基本原理及其在动态绑定中的应用。通过对比静态绑定与动态绑定的区别,详细阐述了如何使用反射机制获取类的成员方法、属性对象及其实现的接口,并通过实例说明了反射在实际开发中的重要作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

           

java动态与反射的基本原理及实际应用

 

 

             要想深入研究java的反射机制,首先要了解什么是动态绑定。

             动态是相对于静态来说的。二者的区别主要在于创建对象的时间不一同,静态绑定是编译时创建对象,而动态绑定是在运行时创建对象。

        我们先创建一个简单的MyFruit接口。

Java代码   收藏代码
  1. <span style="font-size: 16px;">package Fruit;  
  2. public interface MyFruit{  
  3.       public void eat();  
  4. }</span>  

    静态绑定代码示例:

Java代码   收藏代码
  1. <span style="font-size: 16px;">package Fruit;  
  2. public class Apple implements MyFruit{  
  3.     public void eat(){  
  4.         System.out.println("eat an apple");  
  5.     }  
  6.     public static void main(String args[]){  
  7.         Apple a=new Apple();  
  8.         a.eat();  
  9.     }  
  10. }  
  11. </span>  

 

 
         动态绑定代码示例:

 

Java代码   收藏代码
  1. <span style="font-size: 16px;">package Fruit;  
  2. public class Orange implements MyFruit{  
  3.     public void eat() {  
  4.         System.out.println("eat an orange");  
  5.     }  
  6.     public static void main(String args[]){       
  7.         try {  
  8.             Class o= Class.forName("Fruit.Orange");  
  9.             Object object=o.newInstance();  
  10.             Orange o1=(Orange)object;  
  11.             o1.eat();  
  12.         } catch (ClassNotFoundException e) {  
  13.             e.printStackTrace();  
  14.         } catch (InstantiationException e) {  
  15.             e.printStackTrace();  
  16.         } catch (IllegalAccessException e) {  
  17.             e.printStackTrace();  
  18.         }  
  19.     }  
  20. }</span>  

 


       理解了动态与静态的概念,下面我们开始步入正题,了解构建框架技术的基础:反射机制(Reflection)。什么是框架技术呢?其实就是半成品,简单地说就是别人搭好的舞台,由你来表演。(当然,搭舞台的一般都是高手)。

 

        我们先看看反射能实现什么功能吧。

        1.在运行时得到任意一个类所具有的成员方法数组:

 

Java代码   收藏代码
  1. <span style="font-size: 16px;">java.lang.reflect.Method[] methods=a.getClass().getMethods();</span>  

 

         2.在运行时得到类定义的属性对象数组:

 

Java代码   收藏代码
  1. <span style="font-size: 16px;">    java.lang.reflect.Field[] fields=a.getClass().getFields();</span>  

          大家都用过java的编译工具吧,比如说我用的eclipse,写出一个对象名,一按点,就会自动弹出该对象的所有方法(曾经觉得好神奇的),其实就是利用了java的反射原理得到了类的属性和方法。

   
       3.得到类实现的接口:

Java代码   收藏代码
  1. <span style="font-size: 16px;"> Class[] interfaces=a.getClass().getInterfaces();</span>  

         当然,java.lang.reflect的方法很多,大家可以试着熟悉一下,在这里就不一一举例了。

        反射的这些功能在实际操作中有什么作用呢?还是用示例说明吧。比如说我和程序员A一起完成一个项目,上司规定了我们的工作(框架),于是乎我们各自为战。我们要保证自己的代码能够编译成功再交工给上司,但是,我的程序需要调用A要完成的那部分的方法,如果我不利用反射机制,就必须要等B完工了才能编译测试。显然,这在工作中是不现实的(不仅仅是时间问题)。有了反射之后,我只需要知道接口就OK了,方法没有实现也不会影响我的工作。
        今天就先说到这吧,希望能对大家有所帮助。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值