Java反射
反射反射 首先说“正”
所谓的正操作指的是当我们要使用一个类的时候 一定要先导入程序所在的包 然后根据类进行对象的实例化,并且依靠对象调用类中的方法。但是说‘反’,根据实例化对象反推出其类型.
举例
import java.util.Date;
public class JavaAPIDemo {
public static void main(String args[]) {
Date a = new Date();
System.out.println(a.getTime())
}
}
如果要想实现反的处理操作,首先采用Object类中的方法
举例
import java.util.Date;
public class JavaAPIDemo {
public static void main(String args[]) {
Date a = new Date();
System.out.println(a.getClass())
}
}
getClass()可以帮助使用者找到对象的根源
反射之中所有的核心操作都是通过Class类对象展开的,可以说Class类是反射操作的根源所在,如果想获取他的实例化对象,可以通过三种方式完成。
1、[Object类支持] public final Class<?> getClass
举例
package run.time;
class Person {
}
public class runtimesss {
public static void main(String args[]) {
Person person = new Person();
Class<? extends Person> cls = person.getClass();
System.out.println(cls);
System.out.println(cls.getName());
}
}
这种方式有一个不是缺点的缺点:如果现在只是想获得Class类对象,则必须产生指定类对象后才能获得
2、[JVM支持] 采用“类.class”
举例
class Person {
}
public class runtimesss {
public static void main(String args[]) {
Class<? extends Person> cls = Person.class;
System.out.println(cls);
System.out.println(cls.getName());
}
}
3、【Class类支持】在Class类里面提供有一个方法static方法
public static Class<?> forName(String className)
throws ClassNotFoundException
举例
package run.time;
public class runtimesss {
public static void main(String args[]) throws ClassNotFoundException {
Class<?> forname = Class.forName("vo.Person");
System.out.println(forname.getName());
}
}
注意包
package vo;
public class Person {
}
这种模式可以直接采用字符串形式定义要使用的类型并且程序中不需要编写任何的import语句