反射机制个人总结

在运行中发现类中的信息并使用,比如运行时,将类中的成员变量,方法,构造方法等,创建出一个个对应的对象。

java.lang包中存在一个Class类。 该类的实例,表示的是在java运行时的类或接口。JVM运行期间,每个类都是一个class对象。

可以通过类名.class、(引用类型的实例化)类型.getClass()、Class.forName("类名")等方法获取class对象

//类名.class
Class cla = 类名.class;
Class cla1 = int.class;//基本类型只有这一种获取类对象的方式

//类型.getClass
Person p = new Person();
Class cls = p.getClass;

//Class.forName(String className)
Class cls = Class.forName(java.lang.String);
//在括号中填写的是类的完全限定名,包名加类名

获取类对象的完全限定名 getName();获取类名 getSimpleName();获取包 getPackage();

Class cls = Class.forName("java.lang.String");
String name = cls.getName();//java.lang.String
name = cls.getSimpleName();//String
/*
    获取当前类对象所表示的类的包,返回一个Package类型的实例来表示包的信息
*/
Package pack = cls.getPackage();
String packname = pack.getName;//java.lang

获取类中的方法 getMethods(); 返回的是一个Method[]数组

Method[] methods = cls.getMethods();
for(Method method : methods){
    System.out.println(method.getName);//获取类中方法的名字
}

通过反射实例化对象

Scanner scan = new Scanner(System.in);
System.out.println("输入要实例化的类名");
String className = scan.nextLine();
Class cls = Class.forName(className);
//类对象提供了一个可以通过公开的,无参的构造器实例化的方法
Object obj = cls.newInstance();
System.out.println(obj);

使用有参构造实例化

//例如:Person(String,int);
Class cls = Class.forName(Person类的完全限定名);
//获取Person的构造器,若其中不传任何参数,则获得的还是无参构造
Constructor c = cls.getConstructor(String.class,int.class);
Object obj = c.newInstance("王五",55);//实例化时需要传参,等同于 new Person("王五",55)

使用反射机制调用方法

Class cls = Class.forname(完全限定名);
Object obj = cls.newInstance();

Method method = cls.getMethod(方法名字);
//通过方法对象调用方法
method.invoke(obj);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值