黑马程序员——反射

时间:2023-02-19 16:50:12

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

反射

概述

   关于反射的理解,张孝祥老师给我们讲了一个很棒的总结:“反射就是把Java类中的各种成分映射成相应的java类。”表示java类的Class类显然要提供一系列的方法来获取其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应类的实例对象来表示,它们是Field、Method、Contructor、Package等。java反射主要提供了以下功能:在运行使判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。实现java反射的类包括以下几种:Class类、Field类、Constructor类、Method类,Class类是表示正在运行的java应用程序中的类和接口;Field类是提供有关类或接口的属性信息,以及对它的动态访问权限;Constructor类是提供关于类的单个构造方法的信息以及对它的 访问权限;Method类是提供关于类或接口中某个方法信息;值得一提的是Class类是java反射中最重要的一个功能类,所有获取对象的信息都需要它来实现。

Class类

Class类是反射的重点,学习反射首先就要明白Class类。java程序中的各个java类属于同一类事物,描述这类事物的java类名就是Class。Class类代表java类,它的各个实例对象对应各个类在内存中的字节码,一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码。Class没有公共的构造方法,Class对象是在加载类时又java虚拟机以及通过调用类加载器中的defineClass方法自动构造的,因此不能显示地声明一个Class对象。Class类描述了类所属于的包名,字段名称的列表,方法名称的列表等。有三种方法能够得到Class的对象的方法:1、调用Object类的getClass()方法来得到Class对象;2、使用Class类中的静态forName()方法获得与字符串对应的class对象;3、如果X是一个java类型,X.class就代表了匹配的类对象。 class person{ private String name; private int age; public String getname(){ return this.name; } public void setname(String name){ this.name=name; } public int getage(){ return this.age; } public void setage(int age ){ this.age=age; } public String toString(){ return "姓名:"+this.name+",年龄"+this.age; } } public class fanshe1 {public static void main(String args[]){ Class<?> c=null; try{ c=Class.forName("xuexijava.person"); } catch(ClassNotFoundException e){e.printStackTrace(); } person per=null; try{ per=(person) c.newInstance(); } catch(Exception e){e.printStackTrace(); } per.setname("王洋"); per.setage(22); System.out.println(per); } }

常用的Class类方法

1、getName():一个Class对象描述了一个特定类的属性,Class类中最常用的方法getName以String的形式返回此Class对象所表示的实体名称。2、newInstance():为类创建一个实例,调用默认构造器初始化新建对象。3、getClassLoader():返回该类的类加载器。4.getComponentType():返回表示数组组件类型的Class。5.getSuperClass():返回表示此Class所表示的实体的超类的Class。6.isArray():判定此Class对象是否表示一个数组类。

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------