zoukankan      html  css  js  c++  java
  • java之反射2

    1.前面我们知道了什么是反射以及反射的创建方式,现在我们来对反射做一点补充

    //先建一个学生类作为我们的实验类

    //制作一个javabean

    //(javabean是一种基本的结构,私有的属性,公有地get/set方法,一个无参的构造方法,以及类的属性是共有的)

    public class Student {
    private int stuno;
    private String sname;
    private String schoolName;

    public Student() {
    }

    public Student(int stuno, String sname, String schoolName) {
    this.stuno = stuno;
    this.sname = sname;
    this.schoolName = schoolName;
    }

    public int getStuno() {
    return stuno;
    }

    public void setStuno(int stuno) {
    this.stuno = stuno;
    }

    public String getSname() {
    return sname;
    }

    public void setSname(String sname) {
    this.sname = sname;
    }

    public String getSchoolName() {
    return schoolName;
    }

    public void setSchoolName(String schoolName) {
    this.schoolName = schoolName;
    }
    }
      //在测试类中测试

      //创建完成了,不创建对象,直接使用类名来创建类

      Class c=Class.forName("包名.类名");

      //得到了类对象

      Field []field=c.getDeclareFields();

      //使用加强for来看有哪些属性

      for(Field f:field){

        System.out.println(f);

      }

      //单独调出一个属性

      Field f=c.getDeclareField();

      //因为属性是私有的,所以无法调用,这时就要使用setAccessible()了,它可以改变属性的访问权限

      f.setAccessible(true);

      //这时就可以调用了,怎么调用呢?使用invoke()函数调用

      f.invoke();

      //普通方法的调用也是类似

      Method method =c.getDeclareMethod("方法名");

      //私有方法想要调用就用setAccessible(true);

      //调用就用invoke(实例对象,参数类型.class...);

    2.反射的作用

      和泛型的结合使用

      反射是在运行时起作用的,而泛型是在编译时起作用的(运行的时候压根就没有泛型这东西,就是为了限制程序员别啥都往里面放),这样就有意思了,我们可以使用反射往泛型里放不该有的东西,而欺骗了编译系统,23333

      

  • 相关阅读:
    JS学习笔记-OO疑问之对象创建
    文件系统类型:
    Swift 编程语言新手教程
    数组长度计算
    tomcat配置文件server.xml具体解释
    openGL点精灵PointSprite具体解释: 纹理映射,旋转,缩放,移动
    iOS安全攻防(三):使用Reveal分析他人app
    逍遥叹
    oracle存储过程实例
    Java爬虫
  • 原文地址:https://www.cnblogs.com/waibangma/p/11147667.html
Copyright © 2011-2022 走看看