java反射是java控制反转(依赖注入)的基础。
所以要想理解掌握Spring等IoC容器,首先要掌握java反射机制。
java反射所关联的类及方法:
Object.getClass() --- Class.forName() ---- Class.getName() ----Class.newInstance() 等
其中:
类 Object
是类层次结构的根类。每个类都使用 Object
作为超类。所有对象(包括数组)都实现这个类的方法。
Class
类的实例表示正在运行的 Java 应用程序中的类和接口。Class类即表示即运行时的类
Object.getClass() // 返回此 Object
的运行时类,运行时类用ClassClass
对象是由所表示类的 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
使用示例:
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() ,来实现动态加载类的对象实例化,即运行时类的对象实例化。
示例:略