RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
Java中的反射机制是什么意思

这篇文章给大家分享的是有关Java中的反射机制是什么意思的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

在遵化等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站建设、网站建设 网站设计制作按需求定制制作,公司网站建设,企业网站建设,品牌网站设计,网络营销推广,外贸营销网站建设,遵化网站建设费用合理。

今天我们就来讲讲java的反射机制。

当程序主动使用某个类的时候,如果该类还没有被加载到内存中,则系统会通过加载、连接、初始化这三个步骤对该类进行初始化,有时候会把这一整个流程叫做类加载器或类初始化

类加载时值将类文件读入到内存中,并且为该类创建一个对象、之后可以直接通过对象来调用类及其实现的父类方法和属性

一、反射机制到底是什么:类是由一组对象(拥有着共同属性)来组成的,而类与类之间也有共同的属性、构造方法、方法等结构,用来描述类的特性,即可以调用或查看某个类的属性、方法、即构造方法就叫做反射。

二、java反射机制的好处:

1.极大的提高了应用程序的扩展性,之前都是通过多来将子类对象传递给父类应用来实现的,大大的增加了代码的耦合性,并且无法访问真实对象的信息,这个时候就可以采取使用反射机制。

2.当代码需要后期维护的时候,则需要修改很多地方,而通过反射机制,只需要直接修改一个地方即可。

e.g Person person=new Student();

三、应用场景:一般应用于底层框架的应用,不过大部分都已经封装好了的、以及可以实现工厂模式和代理模式等设计模式,同时也可以解决java泛型擦除等令人苦恼的问题

一个类的组成:

成员变量、成员方法、构造方法、修饰符、包等

四、反射的组成:1.Class(类本身) 2.Field(属性) 3.Method(方法)

接下来就直接进入代码阶段吧:

一、获取类的三种方法:

Person person = new Person();

1.Class clazz = Person.class;//通过类来获取对象

2.Class clazz = Class.forName("Reflect.Person");//通过类权限名(包名.类名)来获取Class对象

//Class.forName会抛出异常,因为根据字符串来找到类,所以可能会出现找不到这样的类异常

3.Class clazz = person.getClass();//通过类对象来调用

二、自身类

Class []interfaces = clazz.getInterfaces();//获取Person类里所有的接口

String classname = clazz.getName();//获取类名字(包名.类名)

String simpleName = clazz.getSimpleName(); //仅仅只是获得类名字,并没有包名

int modifiers = clazz.getModifiers();//获取权限符是什么 返回值是int 1:public 2:private依次

Package aPackage = clazz.getPackage();//获得包名

Class superclass = clazz.getSuperclass();//获取该类的父类,有且只有一个

Object o = clazz.newInstance();//生成类的实例对象,由于不知道要生成什么类的对象,而所有类的顶端都是Object的子类郑州哪家医院人流好 http://www.120csfkyy.com/

三、属性(Filed)

Field math = clazz.getField("math");//获得指定的name属性,有且只能找到public的属性

Field[] fields = clazz.getFields();//获得所有的public的属性,以及父类

Field id = clazz.getDeclaredField("id");//获得public 以及private、protected等指定(id)属性

Field[] declaredFields = clazz.getDeclaredFields();//获得所有的属性以及父类

当然找到属性能干嘛了,最重要的就是赋值啦。

由于私有属性,除了本类以外的类都不可进行其访问,所以在设置值上面自然和public的不太一样

public属性设值:

Field name = clazz.getField("name");

name.set(o,"TTL");//第一个属性是要设置值得属性属于哪个类实例化对象里面的,第二个参数则是要设置的值

private属性设置:

Field sex = clazz.getDeclaredField("sex");

sex.setAccessible(true);//设置访问权限

sex.set(person1,"女");

四、方法

Method setAddress = clazz.getMethod("Address", String.class);

//第一个参数为要找方法的名字,第二个参数则是要找方法的形参是什么类型的

Object address = setAddress.invoke(person1, "苏州");

//第一个参数为类实例化的对象,第二个参数为参数要设置的值

//执行方法

五、构造方法

Constructor constructor = clazz.getConstructor(String.class, String.class);

//由于构造方法和类名一样,这里就不需要在此写类名对象了,只需写参数即可匹配到对应的构造方法

constructor.newInstance("TTL","四川");//执行构造方法

感谢各位的阅读!关于“Java中的反射机制是什么意思”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!


名称栏目:Java中的反射机制是什么意思
分享地址:http://lswzjz.com/article/pcpoed.html