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

  

 

posted @ 2019-07-07 20:52  外邦马  阅读(150)  评论(0编辑  收藏  举报