• 反射(2019年10月28日)


    目前创建对象的三种方式:1.通过构造方法,用关键字new来创建对象 2.用clone来浅拷贝一个对象 3.利用反射机制,反射一个对象

    反射方式创建类;

    1.利用已经存在的对象来反射新的对象

    1 Student s = new Student();

    2 Class sClazz = s.getClass();  

    2.利用已知类名来创建对象

    1 Class clazz = Student.class; 

    3.利用准确的类名来创建对象

    1 Class clazz = Class.forName("com.bli.zyx.Student");

    2 Student s=(Student)clazz.newInstance();

    //newInstance会去找无参的构造方法执行,创建对象

    如果对象中没有无参的构造方法,那么我们需要创建一个构造器来创建有参的构造方法

    1                Constructor <Student> c=clazz.getConstructor(String.class,String.class);//利用构造器,后面的参数是构造函数中的形式参数类型

    通过构造器的方式可以匹配不同的参数列表的构造方法
          Constructor<Student> c = clazz.getConstructor(String.class,int.class);
          Student s1 = c.newInstance("asdfa",123);
          s1.eat();

      Constructor [] consList = clazz.getConstructors();//构造器数组,可以把所有的构造器都取到 

    取到属性:

     获取共有的属性
     Field f = clazz.getField("room");
    f.set(s1,
    "room222");//设置属性

     获取私有的属性

                Field f1 = clazz.getDeclaredField("stuNo");
            System.out.println(f1.getName());
            f1.setAccessible(true);// 给权限来修改私有的属性值
            f1.set(s1, "101");

     获取属性数组,并遍历

                    Field [] flist = clazz.getDeclaredFields();
            for(Field f:flist){
                System.out.println(f.getName());
            }

    获取方法:

      获取公开的方法:

            Method  studyM1 = clazz.getMethod("study", String.class);
            studyM1.invoke(s1, "hello");

      获取私有的方法:

            Method m3 = clazz.getDeclaredMethod("study", String.class);
            m3.setAccessible(true);// 给权限
            m3.invoke(s1, "abc");

      获取方法的数组,并遍历

            Method [] mList = clazz.getDeclaredMethods();
            for(Method m : mList){
                System.out.println(m);
            }

      

  • 相关阅读:
    activemq的两种基本通信方式的使用及总结
    EJBCA认证系统结构及相关介绍
    白话经典算法系列之一 冒泡排序的三种实现 【转】
    springcloud配置需要主要的地方
    Spring的RestTemplate
    mysql中的事务
    list去重
    webpack的使用
    rocketmq在linux搭建双master遇到的坑
    redis配置文件详解
  • 原文地址:https://www.cnblogs.com/Starlets/p/11767036.html
Copyright © 2020-2023  润新知