为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
反射——Java高级开发必须懂的_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

反射——Java高级开发必须懂的

Cedar
难度入门
时长 1小时20分
  • 类是对象1
    查看全部
    0 采集 收起 来源:Class类的使用

    2016-10-19

  • @Java反射机制——动态加载类 1、静态加载类,是编译时刻加载;动态加载类,是运行时刻加载 2、new创建对象:是静态加载类,在编译时刻就需要加载所有的【可能使用到的类】。有一个类有问题(如不存在),都不能通过编译,会报错。 3、Class.forName()通过动态加载类,可以用到一个类时,才进行加载。 【功能性的类尽量使用动态加载,并对新添的类实现功能性接口(标准),这样就不用重新编译】
    查看全部
  • foo类的类类型,是说foo这个类的类型是Class类的对象,是Class类的实例对象,一个类只能是Class类的一个对象
    查看全部
    0 采集 收起 来源:Class类的使用

    2016-10-18

  • 得到Class的三种方法: ①Class c=Person.class; ②Class c=Person.getClass( ); ③Class c=forName(“包名 类名”); 动态加载类: Class c=forName(“包名 类名”); 静态加载类: Person p=new Person( ); 得到类名的方法(先得到类的实例): c.getName( ); c.getSimperName( ); c.getMethods( );得到所有公开的方法包括父类继承过来的方法。 c.getDeclaredMethods( );得到自己定义的方法。 得到方法后,对于方法有: m.getName( );得到方法名。 m.getReturnType( );得到返回值类型。 m.getParameterTypes( ); 得到参数列表的类型的类类型。 得到参数列表后,对于参数类型有: p.getName( );得到参数类型名。 对于类中的成员变量: Field[ ] fs=c.getFields( );得到所有公开声明的成员变量。 c.getDeclaredFields( );得到所有自己声明成员变量。 f.getType( ).getName( );得到成员的类型的类型名。 c.getConstructors( );得到所有公开的构造函数。 c.getDeclaredConstructors( );得到所有构造函数。 至于得到构造函数名和参数列表类似于方法的获取。
    查看全部
  • 方法的反射操作:A a1 = new A(); a1.print(10,20); Method m =c.getMethod("print",int.class.int.class);(c,代表这个类的类类型,m代表这个print方法的对象) //利用反射机制:利用这个print方法的对象信息来操作这个类的对象。 Object o = m.invoke(a1,new Object[]{10,20});(要try catch);
    查看全部
  • 获取方法的两种形式::
    查看全部
  • 获取一个方法就是获取类的信息,首先获得这个类的类类型: 获取方法:名称和参数列表来决定。
    查看全部
  • 以后如果在任意情况下想要获取类的信息,那么首先要获取这个类的类类型 可以获取该对象对应类的成员变量的信息::public void getFied(Object obj){<br> 成员变量也是对象 java、lang.reflect.Field Field类封装了关于成员变量的操作 Class c = obj.getClass;<br> Field[] fs = c.getFields();//c.getDeclaredField();<br> for(Field fd:fs){<br> Class fieldType = fd.getFledType;<br> System.out.println(fieldType.getName+" "fd.getName);<br> }<br> 2:获取构造函数信息::成员变量实例 public static void printConMessage(Object obj){ Class c = obj.getClass(); /* * 构造函数也是对象 * java.lang. Constructor中封装了构造函数的信息 * getConstructors获取所有的public的构造函数 * getDeclaredConstructors得到所有的构造函数 */ //Constructor[] cs = c.getConstructors(); Constructor[] cs = c.getDeclaredConstructors(); for (Constructor constructor : cs) { System.out.print(constructor.getName()+"("); //获取构造函数的参数列表--->得到的是参数列表的类类型 Class[] paramTypes = constructor.getParameterTypes(); for (Class class1 : paramTypes) { System.out.print(class1.getName()+","); } System.out.println(")"); }
    查看全部
  • 通过new加载类属于静态加载类,在类编译时就会加载需要使用的类,一个出现问题,就会编译失败。 Class.forName()为动态加载,可以通过接口统一标准,实现动态加载
    查看全部
  • Class的实例是每个类,称为类类型。 通过类类型的newInstance()可以创建该实际,但必须有无参的构造方法。
    查看全部
  • 编译后的集合泛型去泛型化
    查看全部
  • 得到Class的三种方法: ①Class c=Person.class; ②Class c=Person.getClass( ); ③Class c=forName(“包名 类名”); 动态加载类: Class c=forName(“包名 类名”); 静态加载类: Person p=new Person( ); 得到类名的方法(先得到类的实例): c.getName( ); c.getSimperName( ); c.getMethods( );得到所有公开的方法包括父类继承过来的方法。 c.getDeclaredMethods( );得到自己定义的方法。 得到方法后,对于方法有: m.getName( );得到方法名。 m.getReturnType( );得到返回值类型。 m.getParameterTypes( ); 得到参数列表的类型的类类型。 得到参数列表后,对于参数类型有: p.getName( );得到参数类型名。 对于类中的成员变量: Field[ ] fs=c.getFields( );得到所有公开声明的成员变量。 c.getDeclaredFields( );得到所有自己声明成员变量。 f.getType( ).getName( );得到成员的类型的类型名。 c.getConstructors( );得到所有公开的构造函数。 c.getDeclaredConstructors( );得到所有构造函数。 至于得到构造函数名和参数列表类似于方法的获取。
    查看全部
  • 反射操作都是编译了之后的操作,编译之后集合的泛型是去泛型化 的
    查看全部
  • 到这里的笔记就截不了屏了
    查看全部
  • 要想获取类信息,首先要获取类类型
    查看全部

举报

0/150
提交
取消
课程须知
童鞋们,学习本课程前需要熟悉Java面向对象的思想,并能掌握Java IO输入输出流、集合和泛型等知识。可参考慕课网Java入门的一、二、三季以及我的文件我做主——Java IO流课程。
老师告诉你能学到什么?
1、能够理解并应用反射机制。 2、能够了解反射机制在集合泛型中的应用。 3、有利于更好的学习框架等Java高级技术。
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!