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了,方法没有实现也不会影响我的工作。
今天就先说到这吧,希望能对大家有所帮助。
相关推荐
### Java反射机制的原理及在Android下的简单应用 #### 一、Java反射机制的基本概念 反射(Reflection)是指程序在运行时能够访问、检测和修改它自身的能力。这种能力使得程序能够动态地获取自身的结构信息并操作...
Java反射的另一个重要应用是动态代理。动态代理可以在运行时创建一个实现一组给定接口的新类,这个新类可以对方法调用进行拦截并在调用前后执行自定义逻辑。这在AOP(面向切面编程)中非常有用,例如日志记录、性能...
本文将深入探讨Java反射机制的原理及其在实际开发中的应用。 首先,我们要理解什么是反射。反射是指在运行时,程序能够获取关于类、接口、字段和方法等信息,并且能够动态地调用方法、创建对象的能力。在Java中,`...
本文将深入探讨Java反射机制的原理、应用场景以及如何在实际开发中使用反射。 Java反射机制是一项强大而灵活的功能,它使得Java程序能够在运行时动态地检查和操作类及其成员。在实际开发中,反射机制在框架设计、...
### Java反射原理详解 #### 一、Java反射机制概述 Java反射机制是Java语言的关键特性之一,赋予了Java一定程度上的动态性。通过反射,程序可以在运行时获取任意一个已知名称类的内部信息,包括其修饰符(如public,...
根据提供的文件信息,我们可以深入探讨Java反射机制的基本原理及其应用场景。 ### Java反射机制的基本概念 Java反射机制允许程序在运行时获取类的信息,并且能够直接操作这些信息。这包括类名、方法名称、参数类型...
10. **实际应用** 反射在许多场景下都很有用,如: - 框架设计:Spring、MyBatis等框架大量使用反射实现动态代理、依赖注入等功能。 - 动态代理:Java的`java.lang.reflect.Proxy`类可以创建动态代理对象。 - ...
在实际应用中,这两种方法可以帮助我们在运行时检查类、方法等是否包含特定的注解,以及获取注解的详细信息。例如,如果我们定义了一个名为`@Loggable`的注解,用于标记需要记录日志的方法,可以通过反射检查某个...
Java反射是Java语言的一个强大特性,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制的核心在于`java.lang.Class`类,它是Java中所有类的通用表示,提供了访问类元数据的能力。 首先,我们要理解`...
虽然Java反射提供了一种非常灵活的方式来操作类和对象,但在实际应用中也需要注意几个关键点: ##### 1. **安全性** - 使用反射可能会导致安全漏洞,因为可以访问到私有成员。 - 在设计应用程序时应限制反射的...
本文将详细介绍 Java 反射机制的基本原理以及其实现方式。 #### 二、反射机制的核心概念 Java 反射机制主要依赖于以下几个核心概念: 1. **`Class` 类**:表示一个类的对象,包含了关于类的所有信息,包括类名、...
尽管“反射”一词在计算机科学中有着全新的含义,但它与物理学中的反射原理在某些方面存在相似之处,这有助于我们理解其概念。 在计算机科学中,反射通常指能够自描述和自控制的应用。具体而言,这类应用可以通过...
### Java反射机制详解 #### 一、反射的基本概念与历史背景 反射的概念最早由Smith在1982年提出,其核心思想是程序有能力访问、检测甚至...对于初学者而言,了解并掌握Java反射机制的基本原理和应用场景是非常有益的。
下面我们将详细探讨Java反射的基本方法及其应用。 一、获取类信息 1. `Class` 类:反射的核心是`Class`类,它代表一个Java类。通过`Class`对象,我们可以获取到类的元数据。获取`Class`对象的方法有: - 使用`...
本文将深入探讨Java反射的基本概念、用途、工作原理以及如何安全有效地使用反射。 一、反射基础 1. 类与对象的元数据:在Java中,每个类都由Class对象表示,这个对象包含了关于类的所有信息,如类名、构造器、方法...
1. 动态代理原理:动态代理是基于Java反射机制,通过在运行时动态生成实现了特定接口的代理类,以此来实现对原对象的代理。 2. java.lang.reflect.Proxy类:Proxy类提供了创建动态代理类和代理对象的工厂方法。通过...
本文主要探讨了类装载的原理、实现方式及其在实际应用中的作用。 首先,类装载的过程分为三个主要阶段:装载、链接和初始化。装载阶段涉及寻找并导入类或接口的二进制数据,通常由类装载器(ClassLoader)执行。...
首先,让我们深入理解Java反射机制的基本概念: 1. **Class对象**:每个类在Java中都有一个对应的Class对象,它包含了该类的所有信息,如类名、方法、字段等。我们可以通过`Class.forName(String className)`或`...
因此,在实际应用中,我们需要权衡其利弊,合理地使用反射技术。 总结起来,通过结合Java反射机制,我们可以优化工厂模式,使其在运行时具有更强的动态性,能够根据不同的条件或配置创建不同类型的对象。这在应对...
Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有高度的灵活性,尤其在处理框架、插件系统以及元数据驱动...