您的位置:首页 > 其它

通过构造函数反射--通过一个对象获取一个完整的包名和类名

2015-12-23 16:32 375 查看
import java.lang.reflect.Constructor;

import java.lang.reflect.InvocationTargetException;

import com.student.admin.Account;

import com.student.admin.Person;

public class ReflectDemo {

//通过一个对象获取一个完整的包名和类名

public static void main(String[] args) {

Account account=new Account();

Class c=account.getClass();//获取完整的类名

String name=c.getName();

System.out.println(name);

System.out.println(c);

System.out.println("------------------");

instance();

Instance1();

Instance2();

}

//所有类对象都是Class的实例

//Class实例化对象

public static void instance(){

Class<?>demo1=null;

Class<?>demo2=null;

Class<?>demo3=null;

//实例化对象

try {

demo1=Class.forName("com.student.admin.Account");

demo2=new Account().getClass();

demo3=Account.class;

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println("demo1:"+demo1.getName());

System.out.println("demo2:"+demo2.getName());

System.out.println("demo3:"+demo3.getName());

}

//实例化其他类对象

public static void Instance1(){

Class<?> demo=null;

try {

demo=Class.forName("com.student.admin.Person");

Person per=null;

try {

System.out.println(demo.getName());

per=(Person) demo.newInstance();

// System.out.println((Person)demo.newInstance());

per.setAge(18);

per.setName("xie");

System.out.println(per);

} catch (InstantiationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//通过Class调用其他类中的构造函数 (也可以通过这种方式通过Class创建其他类的对象)

public static void Instance2(){

Class<?> demo=null;

try{

demo=Class.forName("com.student.admin.Person");

System.out.println(demo);

}catch (Exception e) {

e.printStackTrace();

}

Person per1=null;

Person per2=null;

Person per3=null;

Person per4=null;

//取得全部的构造函数

Constructor<?> cons[]=demo.getDeclaredConstructors();

try{

/*per1=(Person)cons[0].newInstance();

per2=(Person)cons[1].newInstance("Rollen");

*/

per3=(Person)cons[2].newInstance("xe",19);

//判断哪一个是参数类型

// per4=(Person)cons[3].newInstance("xue",18);

//
Class[] cc1 = cons[0].getParameterTypes();

//
System.out.println(cc1.length);

//
Class[] cc2 = cons[1].getParameterTypes();

//
System.out.println(cc2.length);

//
Class[] cc3 = cons[2].getParameterTypes();

//
System.out.println(cc3.length);

//
Class[] cc4 = cons[3].getParameterTypes();

//
System.out.println(cc4.length);

}catch(Exception e){

e.printStackTrace();

}

// System.out.println(per1);

// System.out.println(per2);

// System.out.println(per3);

System.out.println(per3);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: