`

Java反射机制总结(引自他人)

阅读更多

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

关于Class(java.lang.Class):

Java有个Object类,是所有Java 类的继承根源,其内声明了数个应该在所有Java 类中被改写的方法:hashCode()、equals()、clone()、toString()、getClass()等。其中getClass()返回一个Class对象。
Class类十分特殊。它和一般类一样继承自Object,其实体用以表达Java程序运行时的classes和interfaces,也用来表达enum、array、primitive Java types(boolean, byte, char, short, int, long, float, double)以及关键词void。当一个class被加载,或当类加载器(class loader)的defineClass()被JVM调用,JVM便自动产生一个Class对象。
Class是反射(Reflection)故事的起源。针对任何您想探勘的类,唯有先为它产生一个Class对象,接下来才能经由后者唤起为数十多个的Reflection APIs。Reflection机制允许程序在正在执行的过程中,利用Reflection APIs取得任何已知名称的类的内部信息,包括:package、type parameters、superclass、implemented interfaces、inner classes、outer classes、fields、constructors、methods、modifiers等,并可以在执行的过程中,动态生成instances、变更fields内容或唤起methods。

1、Class是一个类,一个描述类的类(也就是描述类本身),封装了描述方法的Method,描述字段的Filed,描述构造器的Constructor等属性
2、对象照镜子后(反射)可以得到的信息:某个类的数据成员名、方法和构造器、某个类到底实现了哪些接口。
3、对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象。一个 Class 对象包含了特定某个类的有关信息。
4、Class 对象只能由系统建立对象。
5、一个类在 JVM 中只会有一个Class实例。

反射机制获取类的三种方式:

public class Person { private String name; /** * 该类如果要能通过反射创建实例,必须要有显示的无参构造方法 */ public Person() { } public Person(String name) { this.name = name; } public void showEffect() { System.out.println("这种装扮的" + name); } }

 

/** 
 * 反射机制获取类的三种方式
 */  
@Test  
public void testGetClass() throws ClassNotFoundException {  
    Class clazz = null;  
  
    //1 直接通过类名.Class的方式得到  
    clazz = Person.class;  
    System.out.println("通过类名: " + clazz);  
  
    //2 通过对象的getClass()方法获取,这个使用的少(一般是传的是Object,不知道是什么类型的时候才用)  
    Object obj = new Person();  
    clazz = obj.getClass();  
    System.out.println("通过getClass(): " + clazz);  
  
    //3 通过全类名获取,用的比较多,但可能抛出ClassNotFoundException异常  
    clazz = Class.forName("com.java.reflection.Person");  
    System.out.println("通过全类名获取: " + clazz);  
} 

利用newInstance创建对象:

注意:一个类要能通过反射创建实例,它必须有显示的无参构造方法,这是一个硬性要求。

/** 
 * Class类的newInstance()方法,创建类的一个对象。 
 */  
@Test  
public void testNewInstance()  
        throws ClassNotFoundException, IllegalAccessException, InstantiationException {  
  
    Class clazz = Class.forName("com.java.reflection.Person");  
  
    //使用Class类的newInstance()方法创建类的一个对象  
    //实际调用的类的那个 无参数的构造器(这就是为什么写的类的时候,要写一个无参数的构造器,就是给反射用的)  
    //一般的,一个类若声明了带参数的构造器,也要声明一个无参数的构造器  
    Object obj = clazz.newInstance();  
    System.out.println(obj);  
}

 

分享到:
评论

相关推荐

    利用Java反射机制实现对象相同字段的复制操作

    利用Java反射机制实现对象相同字段的复制操作 Java反射机制是Java语言中一个强大的工具,可以实现对象相同字段的复制操作。下面是对该机制的详细介绍和分析。 一、为什么需要对象相同字段的复制操作? 在项目开发...

    必须熟烂于心的java基础面试

    Java反射机制是在程序运时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种动态的获取信息以及动态调用对象的方法的功能称为Java的反射机制。Java...

    s1java总结ava学习心得

    此外,熟悉和掌握Java的IO流、网络编程、反射机制、异常处理等高级主题,将使你的编程技能更上一层楼。这些知识在处理文件操作、网络通信、动态加载类及处理运行时异常等方面发挥着重要作用。 最后,学习使用开发...

    Java学习基础_总结

    7. **反射**:反射机制允许在运行时检查和修改类的信息,包括类名、方法、属性等。它在动态代理、插件系统和配置文件驱动的程序设计中发挥着重要作用。 8. **JVM**:理解Java虚拟机的工作原理,包括类加载、内存...

    java-ppt.rar_java .ppt_java ppt_java基础 ppt_java基础 ppt_ppt jav

    13. **反射机制**:动态获取类信息,创建对象,调用方法,修改字段值的能力。 14. **JNI(Java Native Interface)**:让Java代码调用C/C++原生代码,实现性能优化或利用已有库。 15. **JavaFX和Swing**:构建图形...

    java csdn java++

    8. **反射机制**:Java的反射API,用于在运行时动态地获取类的信息并操作类的对象。 9. **JDBC数据库操作**:连接数据库、执行SQL语句、处理结果集,以及事务管理和预编译的PreparedStatement。 10. **设计模式**...

    精通 Java_JDK

    例如,集合框架提供了ArrayList、HashMap等数据结构,I/O流支持文件读写和网络通信,多线程API允许并发编程,反射机制则可以在运行时检查和修改对象的属性和行为。 除了这些基础组件,Java JDK还包括一些其他工具,...

    用于存放java源码和Thinking of Java的资源

    最后,压缩包可能还包括一些文档、教程或者笔记,这些资料可能涵盖了Java的基础知识,如语法、垃圾回收机制,以及更高级的主题,如反射、动态代理和Java集合框架等。通过阅读这些文档,开发者能够系统地学习Java,...

    Java学习总结

    - **反射机制**:反射允许运行时动态地获取类的信息并操作其内部结构,例如创建对象、调用方法等。 综上所述,学习Java不仅仅是一个简单的语法学习过程,更是一个涉及技术、思维以及解决问题能力全面提升的过程。...

    Java自学之道(完整版)

    进一步,Java的反射机制允许你在运行时检查类、接口、字段和方法的信息,这对于动态编程和插件系统很有用。再者,理解Java的注解(Annotation)及其元注解,可以增强代码的自解释性和元数据功能。 最后,Java标准库...

    java题库测试

    这个题库可能包含了多种类型的题目,如基础语法、面向对象、集合框架、多线程、网络编程、IO流、异常处理、反射机制、JVM内存模型等Java核心概念。通过这些题目,学习者可以加深对Java语言的理解,提高解决问题的...

    Java零基础小白学习重点难点总结老杜

    以下是对"Java零基础小白学习重点难点总结【老杜】"的详细解读: 1. **基础语法**: - 变量与数据类型:Java支持基本数据类型(如int、double、boolean等)和引用类型(如类、接口和数组)。理解它们的区别和用法...

    JAVA自学之路

    对于并发编程,Java提供了丰富的工具和API,如线程、同步机制(synchronized关键字、Lock接口)、ExecutorService和并发集合。理解和运用这些知识可以让你编写出高效、多线程的应用。 最后,不要忽视Java的高级特性...

    Java开发技术大全 Java开发实战经典下载地址

    3. **反射与注解**:理解反射机制,使用注解进行元数据标记,增强代码的灵活性和可配置性。 4. **Java虚拟机(JVM)原理**:了解JVM的工作机制,包括内存管理、垃圾回收、类加载过程等,优化应用程序的性能。 5. **...

    java3d开发参考教程

    4. 高级光照和材质:Java 3D支持多种光照模型和材质效果,包括漫反射、高光反射和环境光等。开发者可以通过简单的API调用来实现复杂的视觉效果。 5. 高级变换控制:在三维世界中,对对象进行位置、大小、方向的变换...

    java教程.jar

    6. **异常处理**:Java提供了丰富的异常处理机制,通过try-catch-finally语句块来捕获和处理运行时错误,使得程序更加健壮。 7. **集合框架**:Java集合框架包括List、Set和Map接口,以及ArrayList、LinkedList、...

    java高级程序设计PPT

    Java高级程序设计是Java开发中的重要领域,涵盖了多线程、网络编程、内存管理、反射、I/O流、集合框架优化、性能调优等多个主题。这份"java高级程序设计PPT"应该是一份详尽的教学资料,对于已经掌握了Java基础知识的...

    Java程序员高手文章集+(PDF)源码整理

    【Java程序员高手文章集+(PDF)源码整理】这一资源主要针对的是Java编程语言的学习与实践,特别是对于希望成为Java编程高手的程序员。这个压缩包包含了一整套精选的Java技术文章,以及相关的源码整理,是提升Java技能...

    初学JAVA必备

    11. **反射**:反射允许程序在运行时动态地获取类的信息并操作类的对象,是Java中强大的功能之一。 12. **Java Swing和JavaFX**:这两个是Java的图形用户界面(GUI)库,用于创建桌面应用。 13. **Java EE(企业版...

Global site tag (gtag.js) - Google Analytics