-1-获取构造器的方法
(1)Constructor getConstructor(Class
public class Person
{
private String name;
private int age;
private Person(String name , int age)
{
this.name = name;
this.age = age;
}
@Override
public String toString()
{
return "Person [ name: " + name + " , age: " + age + " ]";
}
}
在上的类中私有化了一个构造器。
private void showPerson()
{
try
{
Class<?> clazz = Class.forName("com.test.zhangtao.activitytest.Person");
Constructor constructor = clazz.getDeclaredConstructor(String.class , Integer.TYPE);
constructor.setAccessible(true);
Object person = constructor.newInstance("Java" , 14);
Log.d(TAG , person.toString());
}
catch (Exception e)
{
e.printStackTrace();
}
}
一定不要忘了在调用newInstance方法之前,调用constructor.setAccessible(true)。实际上setAccessible()方法属于AccessibleObject(父类),Method,Constructor,Field都可以调用该方法,从而实现通过反射来调用private方法,private构造器和private成员变量。
-3-通用public修饰的构造器创建对象的方式
public Object newInstance(String className, Object[] args) throws Exception
{
Class newoneClass = Class.forName(className);
Class[] argsClass = new Class[args.length];
for (int i = 0, j = args.length; i < j; i++)
{
argsClass[i] = args[i].getClass();
}
Constructor cons = newoneClass.getConstructor(argsClass);
return cons.newInstance(args);
}
-4-反射Class对象中一些其它的常用方法
Package getPackage():获取此类的包;
String getName():以字符串形式返回此Class对象所表示的类的名称;
String getSimpleName():以字符串形式返回此Class对象所表示的类的简称;