java的反射机制
反射机制可以允许我们实例化一个类,调用方法操作属性从编码期改为在运行期决定。并且也可以在运行期间动态的得知一个类的情况(它有哪些方法、属性等)
反射机制可以大大提高代码的灵活度,但是实际开发中使用要适度。过度是用反射机制会降低代码的运行效率。
想获取一个类的类对象的方式:
1、类名.class
每个类都有一个静态的属性:class,
可以直接获取这个类的类对象。
当我们明确需要获取某个类的类对象时可以使用这种方式。
2、通过Class的静态方法:forName,
这种方式我们可以指定想加载的类的名字来获取该类的类对象(路径要写全:包名.类名)
3、通过类加载器ClassLoader
注:Class.forName(String className)
这里在加载一个类时指定的字符串为加载类的完全限定名:包名.类名
Class有一个快速实例化对象的方法:newInstance
但是要注意,该class实例表示的类必须要包含无参构造方法,否则不能使用这种方式实例化。
利用反射机制步骤:
//1、加载类对象
Class cls=Class.forName("Reflect.Person");
//2、实例化
Object o=cls.newInstance();//默认类型是Object
/*
* 3、通过类对象获取其定义的方法
* method的每一个实例用于表示一个类中的一个具体的方法
*/
Method method=cls.getMethod("sayHello", null);//null表示sayHello方法的参数类型,无参就是null
//4、调用该方法
method.invoke(o, null);//null表示调用方法是传进去的参数
拓展:jdk5.0以后推出:
可变参数:不知道多少个,你给几个就是几个
public static void dosome(String... a){
System.out.println(a.length);
}
public static void dosome(int a,String... a1){
System.out.println(a1.length);
}