反射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();

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


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,131评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,805评论 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,719评论 0 11
  • 月初目标:60km,实际跑步12次,完成里程90km 惊喜点:三次连跑,数字化里程(12.21km-5.21km-...
    普罗米阅读 926评论 4 4
  • 在使用“西瓜甜甜”这个昵称之前,我曾经使用“Deanna”作为我的昵称,它是我读大学时候为了便于外籍教师的记忆而取...
    西瓜甜甜啦阅读 1,067评论 19 23