Class类

1.在面向对象过程中,所有的事物都可以当作对象。而在java中,有两种东西不是对象,静态成员,与普通的数据成员。
但是普通数据成员可以被java包装器进行数据包装成对象,这样就弥补了数据成员的对象使用。静态成员可以被作为一个类,而每一个类都是java.lang.Class类的实例对象。可以这样看 eg:
package com.java.reflect;

public class test{
public static void main(String[]args){
Foo foo1=new Foo()//这是类Foo的实例对象foo1
Class c1=Foo.class();//Foo类也是Class类的实例对象,它有三种表示,这是第一种:知道类名时使用
Class c2=foo1.getClass()//已经知道该类的对象,可以通过该类对象调用getClass()方法表示:Class类的实例对象称为该类的类类型。
Class c3=Class.forName(“com.java.reflect.Foo”)//一个类只能是Class类的一个实例对象,所以C1=C2=C3
我们可以通过类的类类型创建该类的实例对象,通过C1,C2,C3
Foo foo=(Foo)c1.newInstance()//无参的构造方法。
}
}
class Foo{}

2.new对象是静态加载,在编译运行之前就加载完所有有可能要访问的类
这个时候就要用到Class的动态加载

Class c=Class.forName("");
Common com=(Common)c.newInstance();//Common为实现类的公共实现接口。

3.获取类方法信息

public static void printClassMessage(Object obj){
 Class c=obj.getClass()//返回类对象obj的类类型
 //获取类名称
 System.out.println("类的名称是:"+c.getName());
 /**
 *Method类,方法对象,一个成员方法就是一个Method对象
 *getMethods()获取所有的public方法。包括父类继承的。
 *getDeclaredMethods()获取所有该类自己声明的方法,不关注访问权限。
 */
 Method[]ms=c.getMethods();
 要获取方法名
 for(Mehod me:ms){
 Class returned=me.getReturnType();//方法返回的值的类类型,即method.class
 returned.getName()//方法的类型名称
 me.getName()//方法名称
//获取参数类型--》得到参数列表的类型的类类型
Class[] paramTypes=me.getParameterTypes();
for(Class class1:paramTypes){
  System.out.println(class1.getName()+",");
  }
 }
}

4.获取类成员变量的信息。
java.lang.reflect.Field//封装了关于成员变量的操作

Field[]fs=c.getFields();//获取所有公共的成员变量
//Field[] fs=c.getDeclaredFields()//获取该类自己的成员变量

//获取成员变量类型名称
for(Field f1:fs){
 Class fieldType= f1.getType();//获取成员变量的类型的类类型
 fieldType.getName();
  f1.getName();//获取成员变量名称。
}

5.也可以得到构造函数信息,注意,和上面的区别在于getDeclaredConstuctors(),得到自己的所有构造函数信息。

6.方法的反射:
首先对于获取某一个方法,是由方法的名称,和方法的参数列表唯一确定。
其次:方法的反射操作是由 method.incoke(对象,参数列表)。
7,由反射机制学习集合泛型的本质

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值