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

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

Cedar
难度入门
时长 1小时20分
  • 1.动态加载类:实在运行时编译; 2.在动态加载时,创建对象时,不要直接加载,要写一个接口,来统一类;
    查看全部
  • 原来泛型是在编译时进行的,怪不得在myeclipse中进行编码时会提示错误呢。
    查看全部
  • ## 通过反射了解集合泛型的本质 * 编译之后集合的泛型是去泛型化的. * Java中集合的泛型,是繁殖输入错误的,只在编译阶段有效,绕过编译就无效了. * 可以通过方法反射来操作,绕过编译. ``` java ArrayList<String> list = new ArrayList<String>(); Class class = list.getClass(); try{ Method m = class.getMethod("add", Object.class); m.invoke(list, 100); //绕过编译操作,绕过了泛型. } catch (Exception e){ e.printStackTrace(); } ``` * 反射的操作都是在运行的时候操作的,全部绕过了编译.
    查看全部
  • ## 方法反射的基本操作 * 方法名称 和 方法的参数列表才能位移决定某个方法. * 方法对象method的invoke(对象,参数列表)方法来进行反射. * 对于可变参数,可以直接列出,或者使用数组表示. * invoke函数 方法如果没返回值,返回null;若有的花就返回具体返回值,需使用强制类型转换.
    查看全部
  • ## 获取成员变量构造函数信息 * java.lang.reflect.Field类封装了关于成员变量的操作. * getFields() 获取所有public的成员变量的信息. * getDeclaredFields() 获取该类自己声明的成员变量信息. * getType() 获取成员变量类型的类类型. * getName() 获取成员变量的名称. * java.lang.Constructor 中封装了构造函数的信息. * getConstructor() 获取所有public的构造函数. * getDeclaredConstructor() 获取所有的构造函数. * getName() 获取名称 * getParameterTypes() 获取参数列表变量的类类型.
    查看全部
  • ## 获取方法信息 * double.class 和 Double.class不同. * package不存在类类型,package不是在类里面声明的.只要是在类里面声明的都有类类型. * gatName() 获取类的全称. double.class是double, Double是java.lang.Double. * getSimpleName() 获取不带包名的名称. Double是Double. * 方法是Method类的对象. * 获取所有public函数(包括继承来的)Method[] ms = c.getMethods(); * getDeclaredMethods() 获取所有该类自己声明的方法,不限访问权限. * ms[i].getName() 获取方法的名称. * Class returnType = ms[i].getReturnType() 获取方法返回值类型的类类型. * Class paramTypes = ms[i].getParameterTypes() 获取参数列表的类的类类型.
    查看全部
  • ## 动态加载类 * 编译时加载类是静态加载类,运行时刻加载类是动态加载类. * new 创建对象 是静态加载类,在编译的时候就需要加载所有可能使用到的类. * 在运行时加载,可以只在运行时加载,用哪个就加载哪个. * 用Class.forName()动态加载类,再用newInstance创建类对象,可以创建为Interface,然后相关的类实现接口就行. * 用动态加载,不需要重新编译,直接动态的运行使用即可.有助于程序架构.
    查看全部
  • # 反射--java高级开发 ## Class类的使用 * java中静态成员和普通数据类型(有对应的封装类来弥补,比如Integer)不是对象. * 类也是对象,类是java.lang.Class类的实例对象. * //Constructor. Only the Java Virtual Machine creates Class objects. private CLass() {} * Class实例对象不能直接通过构造方法构造,以下是三种标示方法: Foo foo1 = new Foo(); 1. Class c1 = Foo.class; //任何一个类都有一个隐含的静态成员变量class. 2. CLass c2 = foo1.getClass(); //c1, c2表示了Foo类的类类型(class type) 3. Class c3 = null; c3 = Class.forName("[className]") //会抛出ClassNotFoundException异常 * c1 == c2 == c3, 一个类只可能是Class类的一个实例对象. * 可以直接通过类的类类型创建该类的实例对象. Foo foo = (Foo) c1.newInstance(); //同样会抛出异常,需要有无参数的构造方法
    查看全部
    0 采集 收起 来源:Class类的使用

    2018-03-22

  • 类是对象 是java.lang.class类的实例对象
    查看全部
    0 采集 收起 来源:Class类的使用

    2014-11-08

  • 类是对象, 类是java.lang.Class类的实例对象。 静态成员、基本数据类型不是对象
    查看全部
    0 采集 收起 来源:Class类的使用

    2014-11-06

  • 动态加载类
    查看全部
  • 反射绕过编译,在运行时执行。静态加载与动态加载
    查看全部
  • 使用class.forName时,如果需要调用 则首先需要创建一个接口,让需要的对象继承他。然后.newInstance()实例化。 然后就可以用了。 功能型的类,尽量动态加载,而不是静态加载
    查看全部
  • 实例的实例
    查看全部
    0 采集 收起 来源:Class类的使用

    2014-11-02

  • invoke 调用,唤起
    查看全部

举报

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

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