反射(含路径问题)部分笔记课案

上传人:大米 文档编号:431001167 上传时间:2023-10-25 格式:DOCX 页数:10 大小:32.47KB
返回 下载 相关 举报
反射(含路径问题)部分笔记课案_第1页
第1页 / 共10页
反射(含路径问题)部分笔记课案_第2页
第2页 / 共10页
反射(含路径问题)部分笔记课案_第3页
第3页 / 共10页
反射(含路径问题)部分笔记课案_第4页
第4页 / 共10页
反射(含路径问题)部分笔记课案_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《反射(含路径问题)部分笔记课案》由会员分享,可在线阅读,更多相关《反射(含路径问题)部分笔记课案(10页珍藏版)》请在金锄头文库上搜索。

1、源文件来自Y2笔记反射(Reflect)反射即将Class类中的所有的成员映射为相应的对象。要学习反射那么需要先了解和掌握以下几个类:类描述Class描述所有的Class文件的共性Filed描述的是Class文件的中的属性的共性Constructor描述的是Class文件中的构造函数的共 性Method描述的是Class文件中的函数的共性1.获取指定类的Class对象方式一:类名.class方式二:对象名.getClass()方式三:forName(String className)该方法是 Class类的静态方法推荐举例1: 获取字符串类的 Class对象。public static voi

2、d main(String口 args)throws Exception /使用不同的方式会过去 Class对象Class clazz1 = String.class ;Class clazz2 = new String( zhangsan ).getClass();/参数必须指定类的全名(类的全限定名)Class clazz3 = Class.forName ( java.lang.String);/ class文件时候独一无二的,那么 Class对象也应该是单例的System. out .println(clazz1 = clazz2);/ trueSystem. out .println

3、(clazz2 = clazz3);/ true以上的方式都可以获取指定类的Class对象,在实际的开发中到底要使用哪一一般的情况下我们都需要在不知道类名的情况下获取类的Class对象并进而获取类中包含的成员进行操作。大家可以参考Tomcat的一个基本的 server.xml文件2.将Class对象中的属性进行反射为Filed对象 常用的获取属性字段的方法方法Field口 getDeclaredFields()描述获取所有声明的字段数组对象Field getFields()FieldgetDeclaredField(String获取所有的声明的共有字段数组对象 获取指定名称的声明的字段对象na

4、me)Field getField(String name)获取指定名称的声明的共有字段对象举例1:获取所有的声明字段数组对象public static void main(String口 args)throws Exception / 获取Shape类的Class对象 Class clazz = Class.forName (cn.sve.bean.Shape );/获取所有的属性Field 口 fs = clazz.getDeclaredFields(); System. out .println(fs. length );/ 2/获取所有共有的属性 fs = clazz.getField

5、s();System. out .println(fs. length );/ 1/获取指定名字的私有的属性 Field field = clazz.getDeclaredField(x);System. out .println(field);/获取指定名字的共有的属性 field = clazz.getField(y);System. out .println(field);举例2:调用Field类的方法进行字段对象的操作。throws Exception public static void main(String口 args)/ 获取Shape类的Class对象Class clazz

6、= Class.forName ( cn.sve.bean.Shape );/获取所有的属性Field 口 fs = clazz.getDeclaredFields();System. out .println(fs. length );/ 2/获取所有共有的属性fs = clazz.getFields();System. out .println(fs. length );/ 1Shape shape = new Shape(); / 20/获取指定名字的私有的属性Field field = clazz.getDeclaredField(x);System. out .println(fie

7、ld);System. out .println( /获取x的属性值,彳 field.setAccessible( System. out .println( / 设置x的属性值 field.set(shape, 20); System. out .println(属性名:+field.getName();/操作私有的属性x需要暴力的反射true );”设置之前的 x值:+field.get(shape);”设置之后的 x值:+field.get(shape);/获取指定名字的共有的属性field = clazz.getField(y);System. out .println(field);

8、/给属性y进行设置值System. out .println( 属性名:+field.getName();/获取设置属性值之前的值System. out .println(设置之前的 y值:+field.get(shape);/20 field.set(shape,30);/ 30System. out .println(设置之后的 y值:+shape. y);/ 30 以上的代码可以通过程序进行反射类中的属性字段并操作,但是没有进行静态属 性的反射和操作。举例3:反射静态的成员属性。throws Exception public static void main(String口 args)/

9、 获取Shape类的Class Class clazz = Class./获取共有的静态属性Field field = clazz.getField(对象forName(cn.sve.bean.Shape);System. field.set( System.outout.println( null , 40); .println(z);”设置之前的z值:+field.get(设置之后的z值:+field.get(null );null );3 .将Class对象中的方法进行反射为Method对象。public static void main(String口 args)throws Exce

10、ption / 获取Shape类的Class对象Class clazz = Class.forName ( cn.sve.bean.Shape );/获取所有的声明的方法Method ths = clazz.getDeclaredMethods();System. out .println(ths. length ); / 2/获取私有的带参数的sayHello 方法Method sayHello = clazz.getDeclaredMethod(sayHello String. class 匚System. out .println(sayHello);/调用私有的方法sayHello.s

11、etAccessible(true );sayHello.invoke( new Shape(), zhangsan );/获取所有的共有的方法ths = clazz.getMethods();System. out .println(ths. length ); / 10/获取带参数的共有的方法Method greet = clazz.getDeclaredMethod(greet ,String. class );System. out .println(greet);/方法的调用greet.invoke( new Shape(), zhangsan );4 .将Class对象中的构造函数

12、进行反射为Constructor对象。public static void main(String口 args)throws Exception / 获取Shape类的Class对象Class clazz = Class.forName (cn.sve.bean.Shape );/获取所有的声明的构造函数Constructor cons = clazz.getDeclaredConstructors();System. out .println(cons. length );/ 3/获取带参数的私有的构造函数对象 Constructor con =clazz.getDeclaredConstr

13、uctor(int . class , int . class); System. out .println(con); /暴力反射私有的构造函数创建对象 con.setAccessible( true ); Shape myshape = (Shape) con.newInstance(400,500); System. out .println(myshape.getX()+, +myshape. y);/获取所有的共有的构造函数 cons = clazz.getConstructors(); System . out .println(cons. length );/ 2con = cl

14、azz.getConstructor(int . class );System. out .println(con); /调用构造函数创建对象 Shape shape = (Shape) con.newInstance(100); System. out .println(shape.getX(); 面试题:请简单的叙述出你所可以创建的对象的几种方式? 第一种:直接使用new关键字 第二种:Construnctor.newInstance 第三种:枚举 第四种:单例、工厂模式内省(Introspect)其实在以上的反射技术体验中我们发现其实反射的对象一般是一个具有特定功 能的一个类。引入一个基本的概念:JavaBean如果一个类提供了封装好的属性、构造函数(无参数)、共有的get和set方法以及简单的业务逻辑方法那么将这样的一个类称之为JavaBeangfeo

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 试题/考题 > 初中试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号