java反射机制

一、一切皆对象

java中一切皆对象(静态成员和普通数据类型不是,但是普通数据类型有包装类)

类是java.lang.Class的对象

Class类实例对象:

class Foo{

public static void main(String[] args){
        Foo fool1 = new Foo;
        //方式1
        Class c1 = Foo.class;
        //方式2,任何一个类中都有一个静态的Class类的成员变量
        Class c2 = fool1.getClass();
        //Class是Foo的类类型,fool1是Foo的类对象
        //一个类只能是Class的一个示例对象,因此c1 = c2
        //方式3,会抛出异常
        Class c3 = Class.froName("");
    }

}

 

可以通过类类型创建类对象

//会抛出异常,需要fool有无参数的构造方法
Foo fool2 = (Foo) Class.newInstance();

 

编译时加载类是静态加载,运行时加载类是动态加载

interface office{
}

class word{
}

class excel{
}
public static void main(String[] args){
    Class c = Class.forName(args[0]);
    Office a = (Office)c.newInstance();
}

cmd下运行

javac编译

java运行:java filename word

方法是Method的方法

 

类的成员变量也是对象

封装在java.lang.reflect.Field

用getField()

 

构造函数也是对象

封装在java.lang.Constructor中

getConstructor()

 

二、反射

Java 反射机制是在运行状态中,对于任意一个类,都能够获得这个类的所有属性和方法,对于任意一个对象都能够调用它的任意一个属性和方法。这种在运行时动态的获取信息以及动态调用对象的方法的功能称为 Java 的反射机制。

主要通过java.lang.reflect包实现

Method中的invoke()可以得到方法的反射。

eg:public String a (String c,String b){}

Method m = c.getMethod();

Object o = m.invoke("a",string.class,string.class);

 

反射与泛型。

1.编译后集合是去泛型的。只在编译阶段有效。

2.可以通过方法的反射机制绕过泛型。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值