Class.forName()
方法返回的是一个 Class
对象,用于表示一个类的定义。在使用 forName()
方法时,需要传递一个字符串参数,表示要获取的类的全限定名。
由于 forName()
方法是一个静态方法,因此可以通过类名直接调用该方法,并不需要实例化对象。例如:
Class<?> clazz = Class.forName("com.example.MyClass");
在此示例中,Class.forName()
方法返回了名为 com.example.MyClass
的类的 Class
对象,并将其赋值给了 clazz
变量。
获取到一个 Class
对象之后,通常会使用该对象来获取该类中定义的方法、属性等信息,并进行相应的操作。例如,可以使用 getMethods()
方法获取该类中定义的所有公共方法:
Method[] methods = clazz.getMethods();
在上述代码中,clazz
是一个 Class
对象,通过调用 getMethods()
方法获取了该类中定义的所有公共方法,并将其赋值给了 methods
变量。
需要注意的是,由于 forName()
方法是一个静态方法,因此获取到的 Class
对象也是一个静态对象。因此,在使用该对象时通常也需要调用相应的静态方法,如 getMethods()
、getField()
等。这并不是因为 Class.forName()
获取到的类只能包含静态方法,而是因为 Class
对象本身是一个静态对象,其中包含的方法和属性也都是静态的。
如果要调用非静态方法或访问非静态属性,需要在获取到目标类的实例对象之后进行操作。例如,可以通过调用 newInstance()
方法创建一个新的实例,并在该实例上调用相应的方法或属性:
Object obj = clazz.newInstance(); Method method = clazz.getMethod("myMethod"); method.invoke(obj);
在上述代码中,newInstance()
方法创建了一个 MyClass
的新实例,并将其赋值给了 obj
变量。然后,通过 getMethod()
方法获取了 myMethod()
方法,并在新实例上调用该方法。
需要注意的是,使用 newInstance()
方法创建实例对象时,必须确保目标类具有默认构造函数,否则会抛出异常。如果目标类没有默认构造函数,应该使用其他构造函数来创建实例对象。