Java Reflection
1.JAVA反射机制:
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。
1.1Java反射机制的好处:
Java反射机制通过new来实例化对象只需要(包.类),这样使得反射机制灵活性更高。
1、获取Class对象属性
package com.reflection.calss;
public class Book {
private String name;
private int no;
private String type;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
2、测试类:
package com.reflection.calss;
/*
* 第一: 反射 Class 对象的机制与实现:
* */
public class Test {
public static void main(String[] args) {
Class dom1 = null;
Class dom2 = null;
Class dom3 = null;
try {
//第一种:最重要
dom1 = Class.forName("com.reflection.calss.Book");
System.out.println("第一种:"+ dom1);
//第二种
Book book = new Book();
//Object bk = book.getClass();
Class<?> bk = book.getClass();
System.out.println("第二种:"+ bk);
//第三种
dom3 = Book.class;
System.out.println("第三种:"+ dom3);
//先获取class对象 再获取实例化对象
Book book3 = (Book) dom3.newInstance();
System.out.println("实例化对象和内存地址:"+ book3);
} catch (Exception e) {
e.printStackTrace();
}
}
}
3、Method对象的机制与实现
package com.reflection.method;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class MethodDom {
//获取方法名
public void MethodTest(Object ob){
Class cl = ob.getClass();
Method[] me = cl.getDeclaredMethods();
for(Method mm : me){
System.out.println("方法名称:" + mm.getName() );
System.out.println("修饰符:" + mm.getModifiers() );
System.out.println("" + mm.getReturnType() + " \n ");
}
}
//获取实例化方法
public void showuser(Object ob){
try {
//方法名 无参数
Class cl = ob.getClass();
Method me= cl.getMethod("getName", null);
me.invoke(ob, new Object[0]);
//方法名 一参数
Method ms = cl.getMethod("setName", String.class);
ms.invoke(ob, "set 调用");
//方法名 多参数
Class[] cll = {String.class, int.class};
Method m1 = cl.getMethod("Test", cll);
Object[] boj = {"哈哈哈",123};
m1.invoke(ob, boj);
} catch (Exception e) {
e.printStackTrace();
}
}
}
4、测试类:
package com.reflection.method;
import com.reflection.field.Book;
public class TestMethod {
public static void main(String[] args) {
Book ob = new Book();
ob.setName("跑男第十八季");
ob.setType("娱乐");
ob.setNo(90);
MethodDom te = new MethodDom();
//te.MethodTest(ob);
te.showuser(ob);
System.out.println(ob.getName());
System.out.println(ob.getName());
}
}
5、Field
对象的机制与实现
package com.reflection.field;
import java.lang.reflect.Field;
public class ShowField {
//第一种:方法 接收传递过来的class对象
public void show(Class c){
//getFields只能获取共有属性 getDeclaredFields可以获取私有属性
Field[] fi = c.getDeclaredFields();
for(Field ff : fi){
System.out.println(ff.getName());
System.out.println(ff.getType());
}
}
//第二种: 接收传递过来的实体类对象 对象的属性 和 值
public void obshow(Object ob){
Class cs = ob.getClass();
Field[] fo = cs.getDeclaredFields();
for(Field e : fo ){
try {
//私有属性可见
e.setAccessible(true);
System.out.println("名:"+e.getName()+ " " + "值:"+e.get(ob));
} catch (IllegalArgumentException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
}
}
}
}
6、测试类:
package com.reflection.field;
public class Test {
public static void main(String[] args) {
Book bo = new Book();
bo.setNo(1);
bo.setName("斗破苍穹");
bo.setType("玄幻");
ShowField ft = new ShowField();
ft.show(Book.class);
ft.obshow(bo);
}
}
看看这篇文章
反射机制和工厂设计模式的使用(http://blog.csdn.net/javawebrookie/article/details/49686587)
简单工厂设计模式(http://blog.csdn.net/javawebrookie/article/details/49682021)
分享到:
相关推荐
深入了解java反射机制的原理,通过反射机制可以破坏单例模式,如何防止通过反射机制拿到单例模式的构造器呢?用枚举类可破
### Java反射机制详解 #### 一、什么是Java反射机制? Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的...
### Java反射机制应用详解 #### 一、Java反射机制简介 Java反射机制是Java语言提供的一种能在运行时分析类信息并动态操作对象的功能。通过反射,我们可以在程序运行期间获取类的信息(如类名、方法名等),创建...
### Java反射机制详解 #### 一、反射机制是什么 反射机制是Java编程语言的一个核心特性,它允许程序在运行时动态地获取类的信息,并且能够动态地创建对象和调用对象的方法。简单来说,反射机制使得Java程序可以...
反射机制允许我们在运行时动态地获取类的信息并操作对象,而工厂模式是一种设计模式,它提供了一种创建对象的最佳方式,使得代码更加灵活且易于维护。 **Java反射** Java反射API提供了一种在运行时检查类、接口、...
Java反射机制是Java编程语言中一项强大的工具,它允许程序在运行时检查和操作类、接口、对象等的内部信息。反射机制的核心在于能够在运行时动态地获取类的信息,并且可以动态调用对象的方法,创建对象,甚至修改对象...
Java的反射机制与动态代理是Java编程中两个非常重要的高级特性,它们在许多实际场景中发挥着关键作用,如框架开发、插件系统、元数据处理等。下面将详细讲解这两个概念及其应用。 首先,Java的反射机制允许我们在...
Java反射机制是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在构建框架和库时尤为有用。本篇文章将...
Java反射机制是Java编程语言的核心特性之一,它赋予了程序在运行时检查和操作对象的能力。反射机制使得Java代码能够动态地获取类的信息(如类名、方法、字段),并且能够在运行时创建和调用对象的方法,这为编程带来...
7. 动态代理:Java反射机制可以结合java.lang.reflect.Proxy类创建动态代理,实现代理模式,为接口的方法提供动态处理逻辑。 在实际开发中,反射机制常用于以下场景: - 插件化开发:通过反射加载插件中的类,实现...
通过以上内容,我们可以看出Java反射机制不仅能够提供对类和对象的动态操作,还为实现诸如动态代理这样的高级编程模式提供了基础。然而,由于反射操作具有一定的性能开销,并可能破坏封装性,因此在使用时应谨慎权衡...
Java反射机制是Java语言的一种强大的特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射主要涉及到`java.lang.Class`类、`java.lang.reflect`包中的类(如Constructor、Method、Field)以及...
在本篇“java反射机制学习(五):工厂模式”中,我们将探讨如何利用反射与工厂模式结合,提升代码的灵活性和可扩展性。 首先,工厂模式是一种常用的创建型设计模式,它提供了一种创建对象的最佳方式。传统的工厂模式...
主要讲述Java反射机制与设计模式之一:代理模式的原理与应用;同时详细讲述了Java对代理模式的支持以及Java中动态代理的原理,应用与实践。
总的来说,Java反射机制和动态代理是Java平台强大而灵活的特性,它们使得Java程序能够在运行时具有更高的灵活性和可扩展性。然而,使用反射也可能带来性能开销和安全风险,因此在实际应用中需要权衡利弊,合理使用。
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、字段和方法的信息。这种动态类型的能力使得Java代码能够处理未知或未提前定义的对象,增强了程序的灵活性和可扩展性。在"Java...
### Java反射机制概述 Java反射机制是指Java程序在运行时,可以动态地获取一个类的信息以及调用其方法的机制。这是Java语言的一个重要特性,允许程序在运行时检查和修改类的行为。 #### 反射机制的基本操作 在...
Java反射机制是Java编程语言中的一个强大工具,它允许程序在运行时检查和操作类、对象、字段和方法。在本教程中,我们将深入探讨Java反射机制的核心概念、功能、API以及应用场景。 **3.1 应用场景** 反射机制在...
Java反射机制是Java语言提供的一种强大的工具,允许程序在运行时检查并操作类和对象的内部属性。通过反射,开发者可以在程序执行过程中动态地创建对象并调用它们的方法,这大大增强了代码的灵活性和可扩展性。在Java...
总之,Java反射机制是Java动态特性的基石,为开发者提供了强大的功能,同时也带来了对设计模式、框架开发和代码优化等方面的深刻影响。理解并合理运用反射机制,对于提升Java程序的灵活性和扩展性具有重要意义。