反射Class

class类的使用

方法的反射

成员变量的反射

构造函数的反射

Java类加载机制

反射帮我们做一些程序运行时刻的事情。

静态的成员,普通数据类型不是对象。

类是class的对象。

属性名称规范:如果第一个首字母是大写,则第二个字母也应该是大写,如果是第一个字母是小写则没有问题(如果不按规范来,用到Java反射的时候可能会找不到对应的set/get方法)

万物皆对象,一个类可以实例化一个对象,一个类也是Class的一个对象,c为Person的类类型(class type),表示Person是一个对象,Class的对象,任何一个类都是Class的实例对象,有三种表示方式,如下所示:

//事例告诉我们任何一个类都有一个静态成员属性

Class c= Person.class

1.所有类的对象都是class的实例。

获取class对象的三种方法

《1》 Class person = Class.forName("Person");//常用方法

《2》

 

Class

 

person = new Person.getClass();

《3》

 

Class 

person = Person.class

一个类只可能是Class类的一个实例对象。 以上person是相同的。


可以通过类的类类型创建类的对象实例。(动态加载一个类,编译时刻加载类是静态加载类,运行时刻加载类是动态加载类)

Person person = (Person)person.newInstance(); //必须要有无参的构造方法



类是class的一个实例,基本的数据类型也是(int,String,void)

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

c1.getName();


person.getDeclaredFields()//获得自己声明的一些属性,不包括父类的

person.

getFields()//可以获得自己和父类的一些public方法

Person person = (Person)person.newInstance(); //必须要有无参的构造方法


Method类,方法的对象,一个成员方法就是一个Method对象,getMethods()方法获取的是所有public的函数,包括父类的,getDeckaredMethods()获取的是自己声明的,不问访问类型。

2 通过class获取对象

Class.forName("Person").getConstructors();

Object person = con[0].newInstance("zld",18);

获取类实现的所有接口类
Class.forName("Person").getInterfaces();

取得其他类中的父类

  demo=Class.forName( "包名.Person" );
 demo.getSuperClass();

用反射可能证明泛型是伪泛型,泛型只在编译时起作用,防止错误的输入。


你可能感兴趣的:(反射Class)