首先要求大家对Java泛型知识有所了解,因为程序代码中大量使用了泛型相关知识。
- 动态语言与反射
- Java反射的典型应用
- Java反射常用的对象
- Class<T>
类是程序的一部分,每个类都有一个Class对象。换言之,每当编写并且编译了一个新类,就会产生一个Class对象。
Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的,因此不能显式地声明一个Class对象。
Class是Reflection起源。要想操纵类中的属性和方法,都必须从获取Class object开始。
第一个实例就用大家非常熟悉的ArrayList类,我们尝试来获取ArrayList申明的方法。
public static void main(String[] args) { ArrayList aList = new ArrayList(); Class alClass = aList.getClass(); System.out.println("①"+alClass); System.out.println("②"+alClass.getName()); Method[] alMethod = alClass.getDeclaredMethods(); for(Method method : alMethod){ System.out.println("③"+method); System.out.println("④"+method.getName()); } }
获取方法 | 说明 | 示例 |
object.getClass()每个对象都有此方法 | 获取指定对象的Class |
List list = new ArrayList(); Class listClass = list.getClass(); |
class. getSuperclass() | 获取当前Class的继承类Class |
List list = new ArrayList(); Class listClass = list.getClass(); Class superClass = listClass. getSuperclass(); |
Object.class | .class直接获取 | Class listClass = ArrayList.class; |
Class.forName(类名) | 用Class的静态方法,传入类的全称即可 | Class c = Class.forName("java.util.ArrayList"); |
Primitive.TYPE | 基本数据类型的封装类获取Class的方式 |
Class longClass = Long.TYPE; Class integerClass = Integer.TYPE; Class voidClass = Void.TYPE; |
Class. newInstance(); Class. getConstructor (new Class[]{}).newInstance(new Object[]{})
clazz. getConstructor(Class<?>... parameterTypes) . newInstance(Object... initargs)
下面看代码实例:
- Method对象--反射方法
- Field 对象--反射属性
- Spring框架的IOC的简化实现
- Java反射总结
只要用到反射,先获得Class Object
没有方法能获得当前类的超类的private方法和属性,你必须通过getSuperclass()找到超类以后再去尝试获得
通常情况即使是当前类,private属性或方法也是不能访问的,你需要设置setAccessible(true)(取消访问安全校验)来取得private的访问权。根据《编写高质量代码:改善Java程序的151个建议》书中介绍,除非一定要控制private安全访问,否则反射时都取消Java的安全访问校验(即设置setAccessible(true)),这样能提高反射性能。
Array对象并未讲解,请下来自己学习
相关推荐
### 反射实例—JAVA反射机制 #### 一、反射概念及原理 反射在计算机科学领域,特别是程序设计中,是指程序有能力访问、检测和修改其自身的结构和行为。这一概念最早由Smith于1982年提出,并迅速应用于各种编程语言...
Java反射机制是Java语言提供的一种强大功能,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类是`java.lang.Class`,它代表了运行时的类信息。通过Class对象,我们...
总之,Java反射机制为开发者提供了极大的灵活性,能够在运行时探索和操作类的内部细节,从而实现高度动态的程序设计。然而,过度使用反射可能会降低代码可读性和性能,因此应当权衡利弊,合理运用。
Java 反射机制详解 Java 反射机制是 Java 语言提供的一个重要功能,可以在运行时检查类、接口、方法和变量等信息,无需知道类的名字、方法名等。通过反射机制,可以在运行时实例化新对象、调用方法、设置和获取...
### Java反射机制概述 Java反射机制是指Java程序在运行时,可以动态地获取一个类的信息以及调用其方法的机制。这是Java语言的一个重要特性,允许程序在运行时检查和修改类的行为。 #### 反射机制的基本操作 在...
### Java反射机制的原理及在Android下的简单应用 #### 一、Java反射机制的基本概念 反射(Reflection)是指程序在运行时能够访问、检测和修改它自身的能力。这种能力使得程序能够动态地获取自身的结构信息并操作...
Java反射机制是一种非常强大的机制,它提供了一种在运行期获得类信息并构建类的Class对象和生成类实例的机制。它的应用非常广泛,包括动态代理、AOP、依赖注入等。但是,它也存在一些缺点,如性能问题和安全问题。
下面我们将深入探讨Java反射机制的核心概念、常见用法及其在实际开发中的应用。 1. **核心概念** - **类的Class对象**:每个Java类在内存中都有一个对应的Class对象,它包含了该类的所有信息,如类名、方法、字段...
Java反射机制是Java语言提供的一种强大的能力,它允许在运行时检查类、接口、字段和方法的信息,并且能够动态地创建对象和调用方法。在本篇“java反射机制学习(五):工厂模式”中,我们将探讨如何利用反射与工厂模式...
### Java反射机制详解 #### 一、Java反射机制概述 Java反射机制是Java语言的一个重要特性,它使得Java能够在运行时动态地获取类的信息,并且能够动态地调用类的方法和属性。这一特性极大地增强了Java语言的灵活性...
### Java反射机制深入浅出 #### 一、什么是反射? 反射是Java中一项非常重要的特性,它允许程序在运行时动态地获取类的信息,并且能够直接操作这些信息。通俗来说,反射就像是为Java对象装上了一面镜子,通过这面...
### 类的反射机制及其常用方法 #### 反射机制简介 反射是Java语言的一个重要特性,它允许在运行时检查类、接口、字段和方法的信息,并且可以动态地调用方法或修改字段值。这种能力使得Java程序具有高度的灵活性和...
### Java反射机制详解 #### 一、引言 Java反射机制是Java编程语言的一个核心特性,它允许程序在运行时动态地访问类的信息,并能够直接操作这些类的对象。这种能力对于许多开发框架(如Spring)来说至关重要,因为...
Class.forName() 方法是 Java 反射机制中的一种常用方法,用于加载类。但是,这个方法也存在安全隐患。攻击者可以使用这个方法来加载恶意类,导致系统受到攻击。 安全编码实践 为了避免反射机制的安全隐患,需要...
### Java中的反射机制 #### 一、引言 在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时动态地检查和修改自身的行为。这种能力对于实现框架、工具以及需要运行时动态行为的应用程序尤为...