Java教程

Java 反射

Java Reflection 是一个在运行时检查或修改类的运行时行为的过程。
java.lang.Class 类提供了许多方法,可用于获取元数据,检查和更改类的运行时行为。
java.lang和java.lang.reflect包提供了Java反射的类。

使用的地方

Reflection API主要用于:
IDE(集成开发环境),例如Eclipse,MyEclipse,NetBeans等。 调试器 测试工具等
您知道吗? 有多少种方法可以获取Class类的实例? 如何创建javap工具? 如何创建appletviewer工具? 如何从类外部访问私有方法?

java.lang.Class类

java.lang.Class类主要执行两项任务:
提供了在运行时获取类的元数据的方法。 提供了检查和更改类的运行时行为的方法。

Class类的常用方法:

方法 说明
public String getName() 返回班级名称
public static Class forName(String className)throws ClassNotFoundException 加载类并返回Class类的引用。
public Object newInstance()throws InstantiationException,IllegalAccessException 创建新实例。
public boolean isInterface() 检查它是否是接口。
public boolean isArray() 检查它是否为数组。
public boolean isPrimitive() 检查它是否原始。
public Class getSuperclass() 返回超类的类引用。
public Field[] getDeclaredFields()throws SecurityException 返回此类的字段总数。
public Method[] getDeclaredMethods()throws SecurityException 返回此类的方法总数。
public Constructor[] getDeclaredConstructors()throws SecurityException 返回此类的构造函数总数。
public Method getDeclaredMethod(String name,Class[] parameterTypes)throws NoSuchMethodException,SecurityException 返回方法类实例。

如何获取Class类的对象?

有3种获取Class类实例的方法。它们如下:
类的 forName()方法 对象类的 getClass()方法 .class语法

1)Class类的forName()方法

用于动态加载类。 返回Class类的实例。 如果您知道类的全限定名,则应使用它。不能将其用于基本类型。
让我们看看forName()方法的简单示例。
class Simple{
}
class Test{
    public static void main(String args[]){
        class c=Class.forName("Simple");
        System.out.println(c.getName());
    }
}
Simple

2)Object class的getClass()方法

它返回Class类的实例。如果您知道类型,则应使用它。而且,它可以与原语一起使用。
class Simple{
}
class Test{
    void printName(Object obj){
        class c=obj.getClass();
        System.out.println(c.getName());
    }
    public static void main(String args[]){
        Simple s=new Simple();
        Test t=new Test();
        t.printName(s);
    }
}
Simple

3).class语法

如果类型可用,但没有实例,则可以通过将" .class"附加到类型的名称,也可以用于原始数据类型。
class Test{
    public static void main(String args[]){
        class c = boolean.class;
        System.out.println(c.getName());
        class c2 = Test.class;
        System.out.println(c2.getName());
    }
}
boolean Test

确定类对象

使用以下Class类方法确定类对象:
1)public boolean isInterface(): 确定指定的Class对象是否表示接口类型。
2)public boolean isArray(): 确定此Class对象是否表示数组类。
3)public boolean isPrimitive(): 确定指定的Class对象是否表示原始类型。
让我们看一下反射api确定对象类型的简单示例。
class Simple{
}
interface My{
}
class Test{
    public static void main(String args[]){
        try{
            class c=Class.forName("Simple");
            System.out.println(c.isInterface());
            class c2=Class.forName("My");
            System.out.println(c2.isInterface());
        }
        catch(Exception e){
            System.out.println(e);
        }
    }
}
false true

Java 拓展学习

Java newInstance Javap工具 创建javap工具 创建 appletviewer
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4