Java反射机制

前言: ????作者简介:大家好,笑霸fianl,在校大二学生。 ????个人主页:?笑霸final的主页? ????系列专栏:本文写在java专栏:Java专栏链接 ????如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步???? ????如果感觉博主的文章还不错的话,请????三连支持????一下博主哦

Java反射机制??Java反射机制的概述????理解Class类并获取Class实列????类的加载与ClassLoader????Class一些常用的方法:????获取Class类的三种方法????1知道具体的类,通过类的class的属性获取,该方法最安全可靠,性能最高????2.知道一个类的实例,调用实例的getClass()方法获取Class对象????3知道一个类的全名,并且该类在类路径下,可通过Class类的静态方法forName()获取,可能抛出 ClassNotFoundException异常??Java反射机制的概述

1.Java的反射(reflection) :机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键,反射让Java成为一个准动态语言 。缺点增加不安全性。2.动态语言(弱类型语言) 是运行时才确定数据类型的语言,变量在使用之前无需申明类型,通常变量的值是被赋值的那个值的类型。. 比如Php、Asp、JavaScript、Python、Perl等等。. 静态语言(强类型语言) 是编译时变量的数据类型就可以确定的语言,大多数静态语言要求在使用变量之前必须生命数据类型。. 比如Java、C、C++、C#等。. 弱类型语言 是数据类型可以被忽略的语言。3.静态语言是在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型。 例如:C++、Java、Delphi、C#等。 动态语言是在运行时确定数据类型的语言。4.Class类:是描述类的一个类。Class 类是在Java语言中定义一个特定类的实现。一个类的定义包含成员变量,成员方法,还有这个类实现的接口,以及这个类的父类。Class类的对象用于表示当前运行的 Java 应用程序中的类和接口。 比如:每个数组均属于一个 Class 类对象,所有具有相同元素类型和维数的数组共享一个Class 对象。基本的 Java 类型(boolean, byte, char, short,int, long, float 和 double) 和 void 类型也可表示为 Class 对象。

理解Class类并获取Class实列

类的加载与ClassLoaderClass c1 = Class.forName(“com.fianl_.reflection_.pojo”); Class c2 = Class.forName(“com.fianl_.reflection_.pojo”); Class c3 = Class.forName(“com.fianl_.reflection_.pojo”); System.out.println(c1.hashCode()); System.out.println(c2.hashCode()); System.out.println(c3.hashCode());

运行结果如下:

结论:c1.c2.c3.的hashCode一样 说明一个类在内存中只有一个Class对象。一个类被加载后,类的整个结构会被封装在Class对象中

Class一些常用的方法:getName()一个Class对象描述了一个特定类的属性,Class类中最常用的方法getName以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。 newInstance()Class还有一个有用的方法可以为类创建一个实例,这个方法叫做newInstance()。例如:x.getClass.newInstance(),创建了一个同x一样类型的新实例。newInstance()方法调用默认构造器(无参数构造器)初始化新建对象。getClassLoader()返回该类的类加载器。getComponentType()返回表示数组组件类型的 Class。getSuperclass()返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。isArray()判定此 Class 对象是否表示一个数组类。getClassLoader()/******************************************************************/获取该类的类装载器。getComponentType()如果当前类表示一个数组,则返回表示该数组组件的Class对象,否则返回null。getConstructor(Class[])返回当前Class对象表示的类的指定的公有构造子对象。getConstructors()返回当前Class对象表示的类的所有公有构造子对象数组。getDeclaredConstructor(Class[])返回当前Class对象表示的类的指定已说明的一个构造子对象。getDeclaredConstructors()返回当前Class对象表示的类的所有已说明的构造子对象数组。getDeclaredField(String)返回当前Class对象表示的类或接口的指定已说明的一个域对象。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异常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反射机制

相关文章:

你感兴趣的文章:

标签云: