在java运行时环境中,对于任意一个类,能够动态的获取类的信息,动态调用类的方法。
在运行期间:判断,构造,调用任意一个类的成员变量和方法。而在编译期间:我们是用new 创建java的对象。
通过reflection机制,我们可以在运行时取得任何一个已知名称的class的内部信息,包括其修饰符,以及superclass,interfaces,也包括fields和methods的所有信息。
在jdk中主要由以下类来实现java反射机制:
-class类,
-Field类,
-Mehtod类,
-Array类。
------------------
动态语言定义:程序运行时,允许改变程序结构或者变量类型,这种语言称为动态语言。从这个观点看,perl,python,ruby,javasacript是动态语言,c++,java,c#不是动态语言。但是java却有一个非常突出的动态相关机制,Reflection。
----------------------
1.要想使用反射,首先需要获得待处理类或对象的class对象
2.获取class的三种方法。
1)通过Class.forName("");
2)通过类.class,eg:string.class;
3)通过对象的 obj.getClass();
3.若想通过类的不带参数的构造方法生成对象,有两种方式:
a)先获得class对象,然后通过class对象的newInstance()方法直接生成即可
b)先获得class对象,然后通过该对象获得对应的Constructor对象,再通过该Construtor对象的newInstance()方法生成;Class<?> classType=StringBuffer.class;
Constructor cons=classType.getConstructor(new Class[]{});
Object obj=new cons.newInstance(new Object[]{});
4.
若想通过类的带参数的构造方法生成对象,只有一个方法:
先获得class对象,然后通过该对象获得对应的Constructor对象,再通过该Construtor对象的newInstance()方法生成;Class<?> classType=StringBuffer.class;
Constructor cons=classType.getConstructor(new Class[String.class,int.class]{});
Object obj=new cons.newInstance(new Object[]{"abing",5});
5.通过反射可以调用一个对象的private方法,或者修改一对象的private属性。
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
-
-
-
- class User{
-
- private String userName="";
-
- public String getUserName() {
- return userName;
- }
- public int add(int a, int b) {
- return a + b;
- }
- private int minus(int a,int b)
- {
- return a-b;
- }
-
- }
- public class ReflectTest {
-
-
-
-
- public static void main(String[] args) throws Exception {
-
- Class<?> classType=Class.forName("User");
- Method[] meth=classType.getDeclaredMethods();
- for (Method method : meth) {
- System.out.println("method:"+method);
- }
- Field [] fiel=classType.getDeclaredFields();
- for (Field field : fiel) {
- System.out.println("fiueld:"+field);
- }
- User user=(User)classType.newInstance();
- Method method=classType.getMethod("add",new Class<?>[]{int.class,int.class});
- int result=(Integer)method.invoke(user, new Object[]{3,9});
- System.out.println("addresult:"+result);
-
-
-
- Method methodminus=classType.getDeclaredMethod("minus",new Class<?>[]{int.class,int.class});
- methodminus.setAccessible(true);
- int resultminus=(Integer)methodminus.invoke(user, new Object[]{3,9});
- System.out.println("resultminus:"+resultminus);
-
-
-
- Field field=classType.getDeclaredField("userName");
- field.setAccessible(true);
- field.set(user, "bingyingao");
- System.out.println(user.getUserName());
- }
-
- }
分享到:
相关推荐
本文实例讲述了PHP进阶学习之反射基本概念与用法。分享给大家供大家参考,具体如下: 一、前言 Reflection(反射)是Java程序开发语言的特征之一,它允许运行中的Java程序对自身进行检查,或者说“自审”,并能直接...
**反射基本概念** 1. **Introspection (内省)**:这是反射的核心,它赋予了Java程序检查自身的能力。通过内省,我们可以查看类的结构,包括包、类型参数、超类、实现的接口、内部类、字段、构造器和方法,甚至在...
2. **反射基本概念**:学习反射的基本操作,如`Class`类的使用,获取类、方法和字段的`java.lang.reflect`接口,如`Class.forName()`, `getMethod()`, `getField()`等。 3. **反射调用私有方法和字段**:通过反射,...
1. **反射基本概念**:解释什么是反射,它的作用以及为什么我们需要它。反射允许程序在运行时动态地获取类的信息,并能创建和操作类的对象。 2. **Class类**:介绍`Class`对象,它是所有类的通用表示,通过`Class....
**1.1 反射基本概念** 反射是.NET框架中的一个重要特性,它允许程序在运行时动态地获取类型信息并操作类型。通过反射,程序员可以在不知道具体类型的情况下创建对象、调用方法、获取或设置字段值等。 **1.2 反射的...
### 反射基本概念 反射基于Java的`java.lang.reflect`包,主要包含`Class`、`Constructor`、`Field`和`Method`四个核心类。它们分别代表类、构造器、字段和方法对象,可以用来获取类的信息和执行相关操作。 ### ...
### C# 反射基本概念 C#中的**反射**是一种强大的功能,允许程序在运行时获取类型的信息并创建或操作实例。通过反射,可以动态地加载程序集(Assembly),检索类型(Type)的信息,并调用类型的方法或属性等。反射...
#### 二、反射基本概念 在深入探讨C#反射实例之前,我们首先了解几个关键的概念: - **Assembly(程序集)**:是.NET中的编译单元,包含了一组相关的类型和资源。 - **Type**:表示.NET Framework中的所有类型的抽象...
#### 二、反射基本概念 在深入探讨代码片段之前,我们先来了解一下Java反射的基本概念: 1. **Class**: 表示一个类的对象。 2. **Field**: 表示类中的一个成员变量。 3. **Method**: 表示类中的一个方法。 4. **...
这篇PPT教案主要介绍了八年级物理中的光的反射知识,属于初中阶段的物理教学内容,主要面向学生和教师。...综上所述,这份PPT教案详细阐述了光的反射基本概念、定律及其应用,旨在帮助学生掌握和理解光的反射原理。
#### 二、反射基本概念 反射可以让我们在运行时获取.NET类型的所有信息,包括类、结构体、委托、接口和枚举等。通过反射,我们可以获取这些类型成员的详细信息,比如方法、属性、事件以及构造函数等,并且可以进一步...
1. 反射基本概念: 反射是.NET框架的核心组成部分,它提供了对程序集、类型、成员(如方法、属性、字段)以及元数据的访问。通过反射,我们可以在运行时获取关于类、接口、结构等类型的信息,并且可以动态创建对象...
综上所述,本资料详细地阐述了光的反射基本概念,实验探究反射定律的过程,以及镜面反射和漫反射的特性,并提供了相关例题来巩固理解。这些知识对于学习八年级物理的学生来说是非常重要的,有助于他们深入理解和掌握...
一、Java反射基本概念 1. 类的Class对象:每个类都有一个对应的Class对象,它是运行时类信息的载体。通过`Class.forName()`或对象的`getClass()`方法可以获得此类的Class对象。 2. 字段(Field):代表类的成员变量...
- 掌握光的反射基本概念,理解镜面反射和漫反射的区别。 - 熟悉并能应用光的反射定律解决实际问题。 - 提高观察和分析生活中光反射现象的能力。 9. **自主学习测评**: - 测评练习旨在检验学生对反射定律的理解...
1. **反射基本概念** 反射是.NET框架提供的一种能力,它允许程序在运行时获取关于自身的信息,并且能够根据这些信息动态地调用方法或访问属性。C#中的`System.Reflection`命名空间提供了反射相关的类,如`Type`、`...
### 一、反射基本概念 反射是Java的一项强大功能,它允许程序在运行时检查类的信息(如类名、方法、字段等),并可以创建和操作对象。通过反射,我们可以做到“动态”编程,即在运行时确定要执行的代码,这在框架...
1. **光的反射基本概念**: - 光的反射是指光射到物体表面时,部分光线被物体表面反射回去的现象。反射遵循反射定律,即入射光线、反射光线和法线都在同一平面内,且入射角等于反射角。 2. **反射类型**: - 镜面...
传输线的基本概念 传输线是连接天线和发射机输出端(或接收机...传输线的基本概念包括传输线的种类、特性阻抗、衰减系数、匹配概念、反射损耗和电压驻波比等知识点。了解这些概念对于设计和使用传输线都是非常重要的。