动态加载类

0、任何一个类都是Class的实例对象,这个实例对象有三种表示方式:

1、Class c1 = Foo.class;//------->实际上告诉我们任何一个类都有一个隐含的静态成员变量;

2、Class c2 = foo1.getClass();//已知该类的对象.c1 c2表示foo类类型的实例。类也是对象,是Class的对象。

3、Class c3 = null;

      try{

c3 = Class.forName("com.imooc.reflect.Foo");//通过类的类类型(Class)创建对象

}catch(ClassNotFoundException e){

e.printStackTrace();

}

1、编译时刻加载类是静态加载类,运行时刻加载类是动态加载类。

2、new创建对象是静态加载类,在编译时刻就需要加载所有的可能使用到的类。

3、例如new了两个不同类型的对象,但其中的一个类类型不存在,则那个存在类类型的对象也用不了,动态加载类可以解决该问题。

public static void main(String[] args){

try{

Class c = Class.forName(args[0]);//动态加载类,在运行时刻加载类

InterfaceName classname = (Interface) c.newInstance();//通过类类型,创建对象

}

catch()

4、基本数据类型的类类型

Class c1 = int.class;

Class c2 = Integer.class

Class c3 = void.class;

system.out.print(c1.getName(c1));

5、一个成员方法就是一个Method对象

Method [] ms = c1.getMethods();//获取的是所有public函数,包括父类继承而来的。

Method [] ms = c1.getDeclaredMethods();//获取的是所有该类自己声明的方法,不问访问权限。

6、类的成员变量也是对象,是属于java.lang.reflect.Field 封装了关于成员变量的操作 getFields()方法获取的是所有的public的成员变量的信息

getDeclaredFields获取的是该类自己声明的成员变量的信息。

Field[] fs = c.getDeclaredFields();

for(Field field : fs){

Class fieldType = field.getType.();//得到成员变量的类型的类类型

String typeName = fieldType.getName();

String fieldName = field.getName();//得到成员变量的名称 

System.out.println(typeName+" "+fieldName);

}

7、类的构造函数

下面的方法就是为了obj对象得到构造函数的信息:

public static void printConMessage(Object obj){

Class c = obj.getClass();

//构造函数也是对象,java.lang.Constructor中封装了构造函数的信息  getConsructors获取所有的public的构造函数 getDeclaredConstructors得到所有的构造哈数

Constructor []  cs = c.getDeclaredConstructors();

for(Constructor constuctor : cs){

System.out.println(constructor.getName()+"(");//获取构造函数的名字

Class[] paramTypes = constructor.getParameterTypes();

for(Class class1 : paramTypes){

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

}

}

  }

8、java中集合的泛型是防止错误输入的,只在编译阶段有效,编译之后就没有泛型存在了。我们可以通过方法的反射来操作,绕过编译。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值