29.反射

今天的内容:
1.反射机制:Java的反射机制是指在运行状态中,对于任何一个类,都可以知道这个类所有属性 和方法,对于任何一个对象,都可以用这个对象调用所有方法和属性,这种动态 获取数据和操作对象的方法和属性的能力叫反射机制.

2.反射:将java类中所有成员属性,方法,构造方法映射成一个个对象.
反射是所有框架的灵魂.
属性->映射成->Field的对象
方法->映射成->Method的对象
构造方法->映射成->Constructor的对象

3.反射对象:当程序运行,第一次加载类时,先将硬盘上.class文件加载内存中,这时类加载器 和JVM会根据.class文件生成.class对象,这个对象叫反射对象.一个类只有一 个反射对象.

4.获得反射对象:
注意:全限定类名:包名.类名
4.1:类名.class;
4.2:对象.getClass();
4.3:Class.forName(“类的全限定类名”) ;(推荐用)
eg:public static void main(String[] args) throws ClassNotFoundException {
//创建学生的实例对象
Student stu1=new Student();
Student stu2=new Student();

//获得这个类的反射对象
Class stuClass=Class.forName("com.qf.day39.demo1.Student");
//==左右两边是引用数据,比内存地址.
//一个类只有一个反射对象
System.out.println(stu1.getClass()==stu2.getClass());//true
System.out.println(stu1.getClass()==Student.class);//true
System.out.println(stu1.getClass()==stuClass);//true

}

5.用反射对象操作类的属性
eg:public static void main(String[] args) throws Exception {
//获得学生类的反射对象
Class stuClass=Class.forName(“com.qf.day39.demo1.Student”);
//用反射对象获得学生类的实例对象,默认调用学生类的无参构造
Student stu1= (Student) stuClass.newInstance();

//用反射对象调用方法得到属性的反射对象
Field snameFidle=stuClass.getDeclaredField("sname");
//私有属性修改属性访问权限,这样私有的属性也可以访问了
snameFidle.setAccessible(true);

//用属性的反射对象调用方法
System.out.println("属性的访问修饰符:"+snameFidle.getModifiers());
System.out.println("属性的数据类型:"+snameFidle.getGenericType());

//用属性的反射对象给某个实例对象的当前这个属性设值
snameFidle.set(stu1,"刘本益");//相当于stu1.sname="刘本益"

System.out.println("学生姓名为:"+snameFidle.get(stu1));//相当于stu1.sname

}

6.用反射对象操作类的方法
eg:public static void main(String[] args) throws Exception {
//获得学生类的反射对象
Class stuClass=Class.forName(“com.qf.day39.demo1.Student”);
//用反射对象获得学生类的实例对象,默认调用学生类的无参构造
Student stu1= (Student) stuClass.newInstance();

//用类的反射对象调用方法得到指定方法的反射对象,第一个参数是方法名,第二个参数是方法参数数据类型
Method show2Method=stuClass.getDeclaredMethod("show2", String.class);
//设置私有方法权限
show2Method.setAccessible(true);
//用方法反射对象调用方法
System.out.println("方法的访问修饰符:"+show2Method.getModifiers());
System.out.println("方法的返回值类型:"+show2Method.getGenericReturnType());
System.out.println("方法的参数列表的数据类型:"+ Arrays.toString(show2Method.getGenericParameterTypes()));

//用方法的反射对象调用方法
show2Method.invoke(stu1,"黄小平");//相当于 stu1.show2("黄小平")

}

7.用反射对象操作类的构造方法
eg:public static void main(String[] args) throws Exception {
//获得学生类的反射对象
Class stuClass=Class.forName(“com.qf.day39.demo1.Student”);

//用反射对象获得构造方法反射对象
Constructor stuConstructor=stuClass.getDeclaredConstructor(String.class);
//私有构造方法修改访问权限
stuConstructor.setAccessible(true);
//用构造方法的反射对象调用方法
System.out.println("构造方法的访问修改符:"+stuConstructor.getModifiers());
System.out.println("构造方法的参数列表的数据类型:"+ Arrays.toString(stuConstructor.getGenericParameterTypes()));

//用构造方法的反射对象来调用构造方法创建实例对象
Student stu1=(Student) stuConstructor.newInstance("刚哥");

}

总结:
1.ajax的post提交:注意设置请求头部信息.请求参数在sent(参数)传
2.ajax的分页
3.反射的原理
4.用反射对象操作类中属性
5.用反射对象操作类中方法

猜你喜欢

转载自blog.csdn.net/qq_44949002/article/details/120031338
今日推荐