`

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

阅读更多

           

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

 

 

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

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

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

package Fruit;
public interface MyFruit{
      public void eat();
}

    静态绑定代码示例:

package Fruit;
public class Apple implements MyFruit{
	public void eat(){
		System.out.println("eat an apple");
	}
	public static void main(String args[]){
       	Apple a=new Apple();
	 	a.eat();
	}
}

 

 
         动态绑定代码示例:

 

package Fruit;
public class Orange implements MyFruit{
   	public void eat() {
		System.out.println("eat an orange");
	}
	public static void main(String args[]){		
		try {
			Class o= Class.forName("Fruit.Orange");
			Object object=o.newInstance();
			Orange o1=(Orange)object;
			o1.eat();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
	}
}

 


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

 

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

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

 

java.lang.reflect.Method[] methods=a.getClass().getMethods();

 

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

 

    java.lang.reflect.Field[] fields=a.getClass().getFields();

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

   
       3.得到类实现的接口:

 Class[] interfaces=a.getClass().getInterfaces();

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

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

分享到:
评论
1 楼 文昌平蓝杰 2013-05-18  
嗯,写的蛮不错的,继续努力哈

相关推荐

    反射在实际开发中的应用

    本段代码是在学习了反射相关知识后,结合实际开发经验,以一个简单demo讲述开发中是如何利用发射进行开发。 主要包含以下三个知识点:1.以tomcat为例,讲述其基于反射运行的原理。2. 反射的三种实现方式--获取字节码...

    Java动态代理简单应用

    概念  代理模式是基本的设计模式之一,它是开发者为了提供额外的或...  Java动态代理实现机制采用了反射的思想,有关于反射的基础知识,可以参见博客Java发射机制浅析。  原理  Spring核心AOP实现技术之一是采用

    SpringAOP的实现机制(底层原理)、应用场景等详解,模拟过程的实例

    通过学习它们的原理和实际应用,您将能够更好地理解和利用Spring AOP来提高您的应用程序的可维护性和可扩展性。 内容亮点: JDK动态代理: 我们将详细介绍JDK动态代理的概念和工作原理。您将了解如何使用Java的...

    Java岗位常规面试题.pdf

    2. 请解释Java中的反射(Reflection)机制以及其在实际项目中的应用。 3. Java中的HashMap和ConcurrentHashMap有什么区别?请比较它们的特点和适用场景。 4. 请解释Java中的线程安全(Thread Safety)是什么,以及...

    Java学习笔记

    概念和原理方面:线程、类库API(文档)、泛型、枚举、注解、反射、网络等 JAVA中最大的特点是面向对象,面向对象的概念最早出现在70年代,由Smaltalk(IBM)提出来的。 JAVA语言跨平台执行,它必须先编译后解释执行,...

    JAVA面试题最全集

    1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出...

    java面试题

    76.4. 在weblogic管理制台中对一个应用域(或者说是一个网站,Domain)进行jms及ejb或连接池等相关信息进行配置后,实际保存在什么文件中? 86 76.5. 在weblogic中发布ejb需涉及到哪些配置文件 87 76.6. 如何在weblogic中...

    使用反射技术和Facade模式演示封装数据库操作--ORM原理

    5. 运行SQL脚本生成演示应用所需的数据库表与测试数据 6. 运行com.jb.arklis.app.DemoApplication类 7. 如果一切正常,那么可以看一个弹出的对话框,里面数据库表userinfo的十二记录 设计思路: 该自定的框架对书写...

    Java 高级特性.doc

    这里就直接先应用张老师写的代码然后再讲清其原理吧! package cn.itcast.corejava; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java....

    超爽的自学课件(java)

    1) 第1章:对象入门 这一章是对面向对象的程序设计(OOP)的一个综述,其中包括对“什么是对象”之类的基本问题的回答,并讲述了接口与实现、抽象与封装、消息与函数、继承与合成以及非常重要的多形性的概念。...

    整理后java开发全套达内学习笔记(含练习)

    Reflection [java] 反射 [ri'flekʃәn] script n.手写体,小型程序 [skript] serialized vt.序列化,串行化 ['siәriәlaiz]'(serializable adj.)(deserialize反序列化,反串行化) Socket [java] 网络套接字['sɒkit...

    Spring3.x企业应用开发实战(完整版) part1

    3.2.3 Java反射机制 3.3 资源访问利器 3.3.1 资源抽象接口 3.3.2 资源加载 3.4 BeanFactory和ApplicationContext 3.4.1 BeanFactory介绍 3.4.2 ApplicationContext介绍 3.4.3 父子容器 3.5 Bean的生命周期 3.5.1 ...

    Spring.3.x企业应用开发实战(完整版).part2

    3.2.3 Java反射机制 3.3 资源访问利器 3.3.1 资源抽象接口 3.3.2 资源加载 3.4 BeanFactory和ApplicationContext 3.4.1 BeanFactory介绍 3.4.2 ApplicationContext介绍 3.4.3 父子容器 3.5 Bean的生命周期 3.5.1 ...

    javaSE代码实例

    第2章 基本数据类型——构建Java 大厦的基础 12 2.1 源代码注释 12 2.1.1 单行注释 12 2.1.2 区域注释 12 2.1.3 文档注释 13 2.2 基本数据类型 14 2.2.1 整型 15 2.2.2 浮点型 17 2.2.3 char型 17...

    net学习笔记及其他代码应用

    30.简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。 答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。 31.公司要求开发一个继承System....

    asp.net知识库

    .NET 2.0 泛型在实际开发中的一次小应用 C#2.0 Singleton 的实现 .Net Framwork 强类型设计实践 通过反射调用類的方法,屬性,字段,索引器(2種方法) ASP.NET: State Server Gems 完整的动态加载/卸载程序集的解决方案 ...

    Spring面试题

    3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 2. ...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    ASP.Net中有一些技术是有局限性的,传智播客根据这些技术在企业中的实际应用情况进行了调整、补充。比如项目中几乎没有在UI层直接访问数据库的,而是采用三层架构,因此我们不讲解UI层直连数据库的控件SQLDataSource...

    Android插件框架Android-Plugin-Framework.zip

    由于此框架没有实际的项目应用,目前对activity的提供标准API的测试还不够完全,可能在其他开发场景中,activity的部分标准API可能会出现问题。毕竟这里使用了很多反射,会涉及到多机型多系统版本的兼容问题。后续还...

Global site tag (gtag.js) - Google Analytics