java反射是java控制反转(依赖注入)的基础。
所以要想理解掌握Spring等IoC容器,首先要掌握java反射机制。
java反射所关联的类及方法:
Object.getClass() --- Class.forName() ---- Class.getName() ----Class.newInstance() 等
其中:
类 Object
是类层次结构的根类。每个类都使用 Object
作为超类。所有对象(包括数组)都实现这个类的方法。
Class
类的实例表示正在运行的 Java 应用程序中的类和接口。Class类即表示即运行时的类
Object.getClass() // 返回此 Object
的运行时类,运行时类用Class<T>的实例表示。返回的 Class
对象是由所表示类的 static synchronized
方法锁定的对象。
如: package Reflect;
/**
* 通过一个对象获得完整的包名和类名
* */
class Demo{
//other codes...
}
class hello{
public static void main(String[] args) {
Demo demo=new Demo();
System.out.println(demo.getClass().getName());
}
}
Class.forName(String) //返回与带有给定字符串名的类或接口相关联的 Class
对象,返回相应的Object
的运行时类,运行时类用Class<T>的实例表示 与Object.getClass() 返回相同类型的对象。
使用示例:
package Reflect;
class Demo{
//other codes...
}
class hello{
public static void main(String[] args) {
Class<?> demo1=null;
Class<?> demo2=null;
Class<?> demo3=null;
try{
//一般尽量采用这种形式
demo1=Class.forName("Reflect.Demo");
}catch(Exception e){
e.printStackTrace();
}
demo2=new Demo().getClass();
demo3=Demo.class;
System.out.println("类名称 "+demo1.getName());
System.out.println("类名称 "+demo2.getName());
System.out.println("类名称 "+demo3.getName());
}
}
结果:
类名称 Reflect.Demo
类名称 Reflect.Demo
类名称 Reflect.Demo
Class.getName() //以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。示例见上。
Class.newInstance() //配合Class的静态方法getName() ,来实现动态加载类的对象实例化,即运行时类的对象实例化。
示例:略