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

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);
   }
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为你写诗_xue

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值