2三、Java的反射

反射:框架设计的灵魂web

 

框架:半成品软件。能够在框架的基础上进行软件开发,简化代码框架

反射:将类的各个组成部分封装为其余对象,这就是反射机制(在Class类中包装)设计

        好处:一、能够在程序运行过程当中,操做这些对象对象

                 二、能够解耦,提升程序的可扩展性内存

 

获取Class对象的方式:开发

一、Class.forName("全类名"):将字节码文件加载进内存,返回class对象,全类名就是包名加上类名get

     多用于配置文件,将类名定义在配置文件中,读取文件,加载类servlet

二、类名.class:经过类名的属性class获取io

    多用于参数的传递class

三、对象.getClass():getClass()方法在Object类中定义

    多用于对象的获取字节码的方式

注意:同一个字节码文件(*.class)在一次程序运行过程当中,只会被加载一次,不论经过哪种方式获取的class对象都是同一个。

示例代码:

public class Demo {

    public static void main(String[] args) throws Exception{
      Class cls1 = Class.forName("lianbang.wu.web.servlet.Person");
      System.out.println(cls1);
      Class cls2 = Person.class;
      System.out.println(cls2);
      Person p1 = new Person();
      Class cls3 = p1.getClass();
      System.out.println(cls3);
    }

}

使用Class对象功能:

获取功能:一、获取成员变量

               二、获取构造方法                     

               三、获取成员方法

               四、获取类名

示例代码:

public class Demo {

    public static void main(String[] args) throws Exception{
      Class personClass=Person.class;
        Field[] fields = personClass.getFields();
        Field field = personClass.getField("level");
        Person p =new Person("读者",18,2);
        Object value = field.get(p);
        System.out.println(value);
        field.set(p,3);
        System.out.println(p.level);

        Field field1 =personClass.getDeclaredField("age");
        field1.setAccessible(true);
        Object value1 =field1.get(p);
        System.out.println(value1);
        System.out.println(p.getAge());

        Constructor constructor =personClass.getConstructor(String.class,int.class,int.class);
        Object p1 =constructor.newInstance("新读者",19,3);
        Object p2 =personClass.newInstance();

        Method method = personClass.getMethod("eat", String.class);
        method.invoke(p,"饭");
        System.out.println(method.getName());

        System.out.println(personClass.getName());
    }

}
相关文章
相关标签/搜索