java反射机制
1.什么是反射?
可以在运行时,获取任意类信息的机制
-------------------------------------------------------------------------------2.反射的作用:
a.动态构造对象;b.动态调用类和对象的任意方法、构造器;
c.动态调用和处理属性;
d.动态获取泛型信息;
e.处理注解;
---------------------------------------------------------------------------------------
3.常用反射方法:
1.Class.forName();2.getClass();
3.类名.class
String path="java.util.student";
eg. Class c2=Class.forName(path);
Class c1=String.class;
c1与c2是相同的
*********************************************************************
附加类:(在包java.util.student)
publc class student{
private int id;
private String name;
private HashMap<int> students=new HashMap<>();
public student(){}
public student(int id,String name){
this.id=id;
this.name=name;
students.put(name,int);
}
public void print(){
System.out.printin("haha");
}
public void set(int id,String name){
this.id=id;
this.name=name;
students.put(name,int);
}
public int getId(String name){
return students.get(name);
}
}
*********************************************************************
---------------------------------------------------------------------------------------
5.相关方法:
Class c2=Class.forName(path);
a.属性获取:
Field[] pFields=c2.getFileds();
Field[] Fields=c2.getDeclaredFields();
pFields与Fields的区别在:
Fields 获取该类下的所有属性;
而pFields只能获取public 修饰的属性;
b.方法获取:
我们来获取其方法
Method[] m=c2.getDeclaredMethods();
或者直接获取:
Method m1=c2.getDeclaredMethod("print",null);后面这个参数为方法参数类型区别重载的
Method m2=c2.getDeclaredMethod("getId",String.calss);
c.构造器获取:
Constructor[] constructors=c2.getDeclaredConstructors();
for(Constructor tmp:Constructor){````}
Constructor constructor=c2.getDeclaredConstructor(int.calss,String.class);
-------------------------------------------------------------------------------------
6.动态调用:
a.动态掉用构造器创建对象:
haha s=c2.newInstance();(但是这个方法只能调用无参构造器)
有参构造:
Constructor<haha> constructor=c2.getDeclaredConstructor(int.class,String.class);
haha s1=m2.newInstance(100,"xixi");
b.动态调用方法:
String s=c2.newInstance();
Method m=c2.getDeclaredMethod("set",int.calss,String.class);
m.invoke(s,"250","enen");
----------------------------------------------------------------------------------
7.反射性能优化:(这个逼近我也没用过,自己百度)
setAccessible();