`

java的getClass()函数

阅读更多
JAVA反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
1. 得到某个对象的属性
Java代码 
public Object getProperty(Object owner, String fieldName) throws Exception {   
     Class ownerClass = owner.getClass();   
    
     Field field = ownerClass.getField(fieldName);   
    
     Object property = field.get(owner);   
    
     return property;   
}  


Class ownerClass = owner.getClass():得到该对象的Class。

Field field = ownerClass.getField(fieldName):通过Class得到类声明的属性。

Object property = field.get(owner):通过对象得到该属性的实例,如果这个属性是非公有的,这里会报IllegalAccessException。

2. 得到某个类的静态属性
Java代码 
public Object getStaticProperty(String className, String fieldName)   
             throws Exception {   
//通过这种方式获得类型的要注意,参数是包名+类名
     Class ownerClass = Class.forName(className);   
    
     Field field = ownerClass.getField(fieldName);   
    
     Object property = field.get(ownerClass);   
    
     return property;   
} 


Class ownerClass = Class.forName(className) :首先得到这个类的Class。

Field field = ownerClass.getField(fieldName):和上面一样,通过Class得到类声明的属性。

Object property = field.get(ownerClass) :这里和上面有些不同,因为该属性是静态的,所以直接从类的Class里取。

3. 执行某对象的方法
Java代码 
public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception {   
    
     Class ownerClass = owner.getClass();   
    
     Class[] argsClass = new Class[args.length];   
    
     for (int i = 0, j = args.length; i < j; i++) {   
         argsClass[i] = args[i].getClass();   
     }   
  
      Method method = ownerClass.getMethod(methodName,argsClass);   
    
     return method.invoke(owner, args);   
}  



Class owner_class = owner.getClass() :首先还是必须得到这个对象的Class。

5~9行:配置参数的Class数组,作为寻找Method的条件。

Method method = ownerClass.getMethod(methodName, argsClass):通过methodName和参数的argsClass(方法中的参数类型集合)数组得到要执行的Method。

method.invoke(owner, args):执行该Method.invoke方法的参数是执行这个方法的对象owner,和参数数组args,可以这么理解:owner对象中带有参数args的method方法。返回值是Object,也既是该方法的返回值。

4. 执行某个类的静态方法
Java代码 
public Object invokeStaticMethod(String className, String methodName,   
             Object[] args) throws Exception {   
     Class ownerClass = Class.forName(className);   
    
     Class[] argsClass = new Class[args.length];   
    
     for (int i = 0, j = args.length; i < j; i++) {   
         argsClass[i] = args[i].getClass();   
     }   
    
    Method method = ownerClass.getMethod(methodName,argsClass);   
    
     return method.invoke(null, args);   
 } 



基本的原理和实例3相同,不同点是最后一行,invoke的一个参数是null,因为这是静态方法,不需要借助实例运行。

5. 新建实例
Java代码 
public Object newInstance(String className, Object[] args) throws Exception {   
     Class newoneClass = Class.forName(className);   
    
     Class[] argsClass = new Class[args.length];   
    
     for (int i = 0, j = args.length; i < j; i++) {   
         argsClass[i] = args[i].getClass();   
     }   
    
     Constructor cons = newoneClass.getConstructor(argsClass);   
    
     return cons.newInstance(args);   
    
} 



这里说的方法是执行带参数的构造函数来新建实例的方法。如果不需要参数,可以直接使用newoneClass.newInstance()来实现。

Class newoneClass = Class.forName(className):第一步,得到要构造的实例的Class。

第5~第9行:得到参数的Class数组。

Constructor cons = newoneClass.getConstructor(argsClass):得到构造子。

cons.newInstance(args):新建实例。

6. 判断是否为某个类的实例
Java代码 
public boolean isInstance(Object obj, Class cls) {   
     return cls.isInstance(obj);   
} 



7. 得到数组中的某个元素
Java代码 
public Object getByArray(Object array, int index) {   
     return Array.get(array,index);   
}  
分享到:
评论

相关推荐

    Java反射学习 getClass()函数应用

    `getClass()`函数是Java反射的核心组成部分,它位于`java.lang.Object`类中,是所有Java对象的公共方法。通过`getClass()`,我们可以获取到对象所属的类的`Class`对象,从而获取类的各种信息。 1. **`getClass()`...

    详解java中this.getClass()和super.getClass()的实例

    在这两个类的构造函数中,我们使用 this.getClass() 和 super.getClass() 来获取当前类的 Class 对象。 输出结果表明,无论在父类还是子类中,this.getClass() 和 super.getClass() 都返回当前类的 Class 对象。这...

    利用java反射调用实现对字符串的解析,成功调入函数,并且返回值

    在这个场景中,我们关注的是如何利用Java反射调用来解析字符串并执行相关函数,最终获取返回值。下面将详细阐述这个过程。 首先,`ReflectUtils.java` 文件可能包含了一些静态方法,这些方法提供了反射操作的便利...

    java 反射getClass .class 的使用方法示例

    Java 反射机制中getClass()和.class的使用方法示例 本文主要介绍了 Java 反射机制中getClass()和.class的使用方法,并结合实例形式分析了 Java 类反射机制的相关操作技巧。 一、获取类的反射 在 Java 中,可以...

    javascript实现类似java中getClass()得到对象类名的方法

    本文实例讲述了javascript实现类似java中getClass()得到对象类名的方法。分享给大家供大家参考。具体如下: 在javascript中没有能够返回特定类型名的函数 如一个对象 console.log(obj); 得到的是[object ...

    Java中获取当前函数名、类名、当前类的文件名.doc

    ### Java中获取当前函数名、类名、当前类的文件名 #### 一、引言 在Java开发过程中,有时候我们需要获取当前执行的函数名、类名甚至是类的文件名,这对于日志记录、错误追踪等方面有着重要的作用。本文将详细介绍几...

    复数类的JAVA实现

    接下来,我们需要为这个类提供构造函数,以便于初始化复数。通常会有一个无参构造器和一个带参数的构造器: ```java public ComplexNumber() { this.real = 0.0; this.imaginary = 0.0; } public ComplexNumber...

    JAVA加密 保护源代码 防止反编译的工具

    JAVACOMPILE 这款工具就不一样了,javacompile 它是修改了虚拟机内核, 用户目录里没有需要的JAVA字节码,而是当JAVA需要调用函数的时候才通过网络下载相对应的已经二次编译的字节码,就算用户通过 CLASS.getClass ...

    Java反射机制的动态调用计算器的加法,减法函数;修改一个学生对象的私有数据成员

    Java反射机制是Java语言提供的一种强大功能,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在给定的场景中,我们利用反射机制实现了动态调用计算器的加法和减法函数,并修改了学生对象的...

    检测函数返回值类型的简单程序.rar

    在Java编程语言中,函数是实现特定功能的代码块,它们可以接受参数并返回值。在Java中,每个函数都有一个预定义的返回类型,它决定了函数执行后能够返回的数据类型。这个压缩包"检测函数返回值类型的简单程序.rar...

    Java中通过Class类获取Class对象的方法详解

    * 反射机制:通过Class对象可以获取类的所有信息,例如字段、方法、构造函数等,可以用于反射机制。 * 动态加载类:通过Class类中的forName()方法可以动态加载类,实现动态加载类的功能。 * 依赖注入:通过Class对象...

    java Swing读取图片

    在Java中,我们通常使用`ImageIcon`类的构造函数来加载图片。以下代码展示了如何从文件系统中加载图片: ```java String imagePath = "path/to/your/image.jpg"; ImageIcon imageIcon = new ImageIcon(imagePath);...

    Java反射机制

    Java反射相关的API主要位于`java.lang.reflect`包中,这些API提供了操作类、构造函数、方法和字段的功能。以下是一些核心API: 1. **`java.lang.Class`**:表示类的类型,可以通过多种方式获取,如`Class.forName()...

    JAVA反射机制的入门代码

    1. **获取`Class`对象**:通过`Class.forName("类名")`或`某个对象.getClass()`获取`Class`对象,例如: ```java Class&lt;?&gt; clazz = Class.forName("com.example.YourClassName"); ``` 2. **创建对象**:使用`...

    Java exception_java_

    在这个例子中,如果文件不存在,`FileReader`构造函数会抛出`FileNotFoundException`,这个异常会被相应的`catch`块捕获并处理。 从异常获取信息包括访问异常的类型(`e.getClass()`)、消息(`e.getMessage()`)和...

    java反射深入剖析(推荐)

    Java反射是Java语言提供的一种强大的机制,它允许我们在运行时检查和操作类、接口、字段和方法等。本文将深入剖析Java反射的概念及其在实际开发中的应用。 首先,我们需要了解,反射的核心在于`java.lang.Class`类...

    java反射机制详解与应用

    Java反射机制是Java语言的一项强大功能,它允许程序在运行时动态地获取类的信息并操作类的对象。这一特性使得Java具有高度的灵活性和强大的扩展性,尤其是在开发框架和库时,反射机制起到了至关重要的作用。本文将...

    JAVA反射机制应用

    在JAVA反射机制中,Class类和Field类、Method类、Constructor类是最重要的三个类,它们提供了访问类、字段、方法和构造函数的能力。 在获取某个对象的属性时,我们可以使用getField方法,例如: ```java public ...

    Reflection_in_Java.zip_in_java 反射_java 反射机制_java反射_反射机制

    我们可以通过`Class.forName()`方法或者对象的`getClass()`方法获取到`Class`实例。一旦有了`Class`对象,我们就可以获取类的元数据,包括类名、包名、父类、接口、字段和方法等信息。 `Constructor`类代表类的构造...

    java考试复习资料

    - `getClass()`: 获取对象所属的类。 #### 二十二、Java中的“指针” 虽然Java没有传统意义上的指针,但在底层实现中仍然使用类似指针的概念来引用对象。这种指针对程序员是不可见的,由JVM管理和操作。 #### 二...

Global site tag (gtag.js) - Google Analytics