java中的反射机制,java反射机制详解
00-1010 1.Java的反射:机制是指在程序运行状态下,你可以构造任意一类对象,知道任意一个对象所属的类,知道任意一个类的成员变量和方法,调用任意一个对象的属性和方法。这种动态获取程序信息,动态调用对象的功能被称为Java语言的反射机制。反射被认为是动态语言的关键,它使Java成为一种准动态语言。劣势增加不安全感。
2.动态语言(弱类型语言)是一种只在运行时确定数据类型的语言。变量在使用前不需要声明类型。通常,变量的值是它被赋予的值的类型。比如Php,Asp,JavaScript,Python,Perl等等。静态语言(强类型语言)是一种可以在编译时确定变量的数据类型的语言。大多数静态语言要求在使用变量之前,数据类型必须是活动的。如Java、C、C、C#等。弱类型语言是可以忽略数据类型的语言。
3.静态语言是一种可以在编译时确定变量的数据类型的语言。大多数静态类型语言要求在使用变量之前必须声明数据类型。比如:C,Java,Delphi,C#等。动态语言是一种在运行时确定数据类型的语言。
4.Class class:描述一个类的类。类是用Java语言定义的特定类的实现。类的定义包括成员变量、成员方法、该类实现的接口以及该类的父类。Class的对象用于表示当前运行的Java应用程序中的类和接口。例如,每个数组都属于一个类对象,所有具有相同元素类型和维度的数组共享一个类对象。的基本Java类型(Boolean、byte、char、short、int、long、float和double)和void类型也可以表示为类对象。
Java反射机制的概述
理解Class类并获取Class实列
Class C1=Class . forname( com . fianl _。反思_。POJO’);class C2=class . forname( com . fian l _。反思_。POJO’);class C3=class . forname( com . fian l _。反思_。POJO’);system . out . println(C1 . hashcode());system . out . println(C2 . hashcode());system . out . println(C3 . hashcode());运行结果如下:
结论:c1.c2.c3 .的hashCode说明一个类在内存中只有一个类对象。当一个类被加载后,该类的整个结构被封装在类对象中。
00-1010getName()类对象描述特定类的属性。类Class中最常用的方法GetName,以字符串的形式返回这个类对象表示的实体(类、接口、数组类、基本类型或void)的名称。NewInstance()类也有一个有用的方法来创建该类的实例。这个方法称为newInstance()。例如:x.getClass.newInstance(),创建一个与x相同类型的新实例,newInstance()方法调用默认构造函数(无参数构造函数)初始化新对象。GetLoader()返回这个类的classloader。GetComponentType()返回表示数组组件类型的类。GetClass()返回表示该类所代表的实体(类、接口、基元类型或void)的超类的类。IsArray()确定这个类对象是否代表一个数组类。class loader()/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
getComponentType()
如果当前类表示数组,则返回表示数组组件的类对象,否则返回null。
getConstructor(类[])
返回由当前类对象表示的类的指定公共构造函数子对象。
getConstructors()
返回由当前类对象表示的类的所有公共构造函数子对象的数组。
getDeclaredConstructor(类[])
返回由指定的当前类对象表示的类的构造函数对象。
getDeclaredConstructors()
返回由当前类对象表示的类的所有描述的构造函数子对象的数组。
/p>
getDeclaredField(字符串)
返回由当前类对象表示的类或接口的指定域。
对象。
getDeclaredFields()
返回当前Class对象表示的类或接口的所有已说明的域对象数组。
getDeclaredMethod(String,Class[])
返回当前Class对象表示的类或接口的指定已说明的一个方法对象。
getDeclaredMethods()
返回Class对象表示的类或接口的所有已说明的方法数组。
getField(String)
返回当前Class对象表示的类或接口的指定的公有成员域对象。
getFields()
返回当前Class对象表示的类或接口的所有可访问的公有域对象数组。
getInterfaces()
返回当前对象表示的类或接口实现的接口。
getMethod(String,Class[])
返回当前Class对象表示的类或接口的指定的公有成员方法对象。
getMethods()
返回当前Class对象表示的类或接口的所有公有成员方法对象数组,包括已声明的和从父类继承的方法。
getModifiers()
返回该类或接口的Java语言修改器代码。
getName()
返回Class对象表示的类型(类、接口、数组或基类型)的完整路径名字符串。
getResource(String)
按指定名查找资源。
getResourceAsStream(String)
用给定名查找资源。
getSigners()
获取类标记。
getSuperclass()
如果此对象表示除Object外的任一类,那么返回此对象的父类对象。
isArray()
如果Class对象表示一个数组则返回true,否则返回false。
isAssignableFrom(Class)
判定Class对象表示的类或接口是否同参数指定的Class表示的类或接口相同,或是其父类。
isInstance(Object)
此方法是Java语言instanceof操作的动态等价方法。
isInterface()
判定指定的Class对象是否表示一个接口类型。
isPrimitive()
判定指定的Class对象是否表示一个Java的基类型。
newInstance()
创建类的新实例。
toString()
将对象转换为字符串。
获取Class类的三种方法
1.知道具体的类,通过类的class的属性获取,该方法最安全可靠,性能最高
Class a2=pojo.class; System.out.println(a2.hashCode());
2.知道一个类的实例,调用实例的getClass()方法获取Class对象
pojo pojo = new pojo(); Class a1=pojo.getClass(); System.out.println(a1.hashCode());
3.知道一个类的全名,并且该类在类路径下,可通过Class类的静态方法forName()获取,可能抛出 ClassNotFoundException异常
Class c1 = Class.forName("com.fianl_.reflection_.pojo"); System.out.println(c1.hashCode());
运行代码:
Class c1 = Class.forName("com.fianl_.reflection_.pojo"); System.out.println(c1.hashCode()); //.知道一个类的实例,调用实例的getClass()方法获取Class对象 pojo pojo = new pojo(); Class a1=pojo.getClass(); System.out.println(a1.hashCode()); //知道具体的类,通过类的class的属性获取,该方法最安全可靠,性能最高 Class a2=pojo.class; System.out.println(a2.hashCode());
结果:
到此这篇关于Java实例讲解反射机制是怎么一回事的文章就介绍到这了,更多相关Java 反射机制内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。