java中的反射机制,java反射机制详解

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: