`
xjk2131650
  • 浏览: 57174 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

反射基本概念

阅读更多

在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属性。 

Java代码
  1. import java.lang.reflect.Field;  
  2. import java.lang.reflect.Method;  
  3.   
  4.   
  5.   
  6. class User{  
  7.       
  8.      private String userName="";  
  9.        
  10.         public String getUserName() {  
  11.         return userName;  
  12.     }  
  13.         public int add(int a, int b) {  
  14.             return a + b;  
  15.         }  
  16.         private int minus(int a,int b)  
  17.         {  
  18.             return a-b;  
  19.         }  
  20.   
  21. }  
  22. public class ReflectTest {  
  23.      
  24.     /** 
  25.      * @param args 
  26.      */  
  27.     public static void main(String[] args) throws Exception {  
  28.           
  29.         Class<?> classType=Class.forName("User");//得到class对象  
  30.         Method[] meth=classType.getDeclaredMethods();//得到该class所有声明method  
  31.         for (Method method : meth) {  
  32.             System.out.println("method:"+method);  
  33.         }  
  34.         Field [] fiel=classType.getDeclaredFields();//得到该class所有声明field  
  35.         for (Field field : fiel) {  
  36.             System.out.println("fiueld:"+field);  
  37.         }  
  38.         User user=(User)classType.newInstance();//通过class获得User对象  
  39.         Method method=classType.getMethod("add",new Class<?>[]{int.class,int.class});//获取add方法,考虑到方法重载,还要加上参数条件才能唯一限定一个方法  
  40.         int result=(Integer)method.invoke(user, new Object[]{3,9});//通过invoke调用方法  
  41.         System.out.println("addresult:"+result);  
  42.         /** 
  43.          * 通过反射来访问方法的私有方法 
  44.          */  
  45.         Method methodminus=classType.getDeclaredMethod("minus",new Class<?>[]{int.class,int.class});//通过getDeclaredMethod取得私有的方法  
  46.         methodminus.setAccessible(true);//将可访问性设置为true  
  47.         int resultminus=(Integer)methodminus.invoke(user, new Object[]{3,9});//通过invoke调用方法  
  48.         System.out.println("resultminus:"+resultminus);  
  49.         /** 
  50.          * 通过反射来访问方法的私有属性 
  51.          */  
  52.         Field field=classType.getDeclaredField("userName");  
  53.         field.setAccessible(true);//将可访问性设置为true  
  54.         field.set(user, "bingyingao");//给私有属性userName赋值  
  55.         System.out.println(user.getUserName());  
  56.     }  
  57.   
  58. }  
分享到:
评论

相关推荐

    PHP进阶学习之反射基本概念与用法分析

    本文实例讲述了PHP进阶学习之反射基本概念与用法。分享给大家供大家参考,具体如下: 一、前言 Reflection(反射)是Java程序开发语言的特征之一,它允许运行中的Java程序对自身进行检查,或者说“自审”,并能直接...

    类的反射机制您的网络连接,请

    **反射基本概念** 1. **Introspection (内省)**:这是反射的核心,它赋予了Java程序检查自身的能力。通过内省,我们可以查看类的结构,包括包、类型参数、超类、实现的接口、内部类、字段、构造器和方法,甚至在...

    MediaController反射修改

    2. **反射基本概念**:学习反射的基本操作,如`Class`类的使用,获取类、方法和字段的`java.lang.reflect`接口,如`Class.forName()`, `getMethod()`, `getField()`等。 3. **反射调用私有方法和字段**:通过反射,...

    java 反射ppt 和 code 示例

    1. **反射基本概念**:解释什么是反射,它的作用以及为什么我们需要它。反射允许程序在运行时动态地获取类的信息,并能创建和操作类的对象。 2. **Class类**:介绍`Class`对象,它是所有类的通用表示,通过`Class....

    c# 反射多线程

    **1.1 反射基本概念** 反射是.NET框架中的一个重要特性,它允许程序在运行时动态地获取类型信息并操作类型。通过反射,程序员可以在不知道具体类型的情况下创建对象、调用方法、获取或设置字段值等。 **1.2 反射的...

    android反射实现实例

    ### 反射基本概念 反射基于Java的`java.lang.reflect`包,主要包含`Class`、`Constructor`、`Field`和`Method`四个核心类。它们分别代表类、构造器、字段和方法对象,可以用来获取类的信息和执行相关操作。 ### ...

    C# 反射示例 demo

    ### C# 反射基本概念 C#中的**反射**是一种强大的功能,允许程序在运行时获取类型的信息并创建或操作实例。通过反射,可以动态地加载程序集(Assembly),检索类型(Type)的信息,并调用类型的方法或属性等。反射...

    C#反射实例讲解C#反射实例讲解

    #### 二、反射基本概念 在深入探讨C#反射实例之前,我们首先了解几个关键的概念: - **Assembly(程序集)**:是.NET中的编译单元,包含了一组相关的类型和资源。 - **Type**:表示.NET Framework中的所有类型的抽象...

    java反射

    #### 二、反射基本概念 在深入探讨代码片段之前,我们先来了解一下Java反射的基本概念: 1. **Class**: 表示一个类的对象。 2. **Field**: 表示类中的一个成员变量。 3. **Method**: 表示类中的一个方法。 4. **...

    八年级物理新人教光的反射PPT教案学习.pptx

    这篇PPT教案主要介绍了八年级物理中的光的反射知识,属于初中阶段的物理教学内容,主要面向学生和教师。...综上所述,这份PPT教案详细阐述了光的反射基本概念、定律及其应用,旨在帮助学生掌握和理解光的反射原理。

    C# 反射技术应用

    #### 二、反射基本概念 反射可以让我们在运行时获取.NET类型的所有信息,包括类、结构体、委托、接口和枚举等。通过反射,我们可以获取这些类型成员的详细信息,比如方法、属性、事件以及构造函数等,并且可以进一步...

    C#反射实例

    1. 反射基本概念: 反射是.NET框架的核心组成部分,它提供了对程序集、类型、成员(如方法、属性、字段)以及元数据的访问。通过反射,我们可以在运行时获取关于类、接口、结构等类型的信息,并且可以动态创建对象...

    2018年八年级物理上册3.2探究光的反射规律练习新版粤教沪版20180810381

    综上所述,本资料详细地阐述了光的反射基本概念,实验探究反射定律的过程,以及镜面反射和漫反射的特性,并提供了相关例题来巩固理解。这些知识对于学习八年级物理的学生来说是非常重要的,有助于他们深入理解和掌握...

    java反射(reflect)

    一、Java反射基本概念 1. 类的Class对象:每个类都有一个对应的Class对象,它是运行时类信息的载体。通过`Class.forName()`或对象的`getClass()`方法可以获得此类的Class对象。 2. 字段(Field):代表类的成员变量...

    八年级物理上册 2.2《光的反射》同步导学案(无答案) 新人教版

    - 掌握光的反射基本概念,理解镜面反射和漫反射的区别。 - 熟悉并能应用光的反射定律解决实际问题。 - 提高观察和分析生活中光反射现象的能力。 9. **自主学习测评**: - 测评练习旨在检验学生对反射定律的理解...

    C#利用反射类的技术实现sql动态增删改查.rar

    1. **反射基本概念** 反射是.NET框架提供的一种能力,它允许程序在运行时获取关于自身的信息,并且能够根据这些信息动态地调用方法或访问属性。C#中的`System.Reflection`命名空间提供了反射相关的类,如`Type`、`...

    反射学习笔记含代码

    ### 一、反射基本概念 反射是Java的一项强大功能,它允许程序在运行时检查类的信息(如类名、方法、字段等),并可以创建和操作对象。通过反射,我们可以做到“动态”编程,即在运行时确定要执行的代码,这在框架...

    物理电学选择题初中.docx

    1. **光的反射基本概念**: - 光的反射是指光射到物体表面时,部分光线被物体表面反射回去的现象。反射遵循反射定律,即入射光线、反射光线和法线都在同一平面内,且入射角等于反射角。 2. **反射类型**: - 镜面...

    传输线的基本概念传输线的基本概念传输线的基本概念

    传输线的基本概念 传输线是连接天线和发射机输出端(或接收机...传输线的基本概念包括传输线的种类、特性阻抗、衰减系数、匹配概念、反射损耗和电压驻波比等知识点。了解这些概念对于设计和使用传输线都是非常重要的。

Global site tag (gtag.js) - Google Analytics