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

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

Cedar
难度入门
时长 1小时20分
  • java中集合的泛型,是防止错误输入的 只在编译阶段有效 编译之后是无效的
    查看全部
  • /** * 成员变量也是对象 * java.lang.reflect.Field * Field类封装了关于成员变量的操作 * getFields()方法获取的是所有public的成员变量 * getDeclaredFields()获取的是所有自定义的成员变量 */ /* * 构造函数也是对象 * java.lang.Constructor封装了对构造函数的信息 * getConstructors()获取所有public的构造函数 * getDeclaredConstructors()获取所有的构造函数信息 */
    查看全部
  • 可以得到一个方法的参数列表,以数组形式返回,至于一个方法只能有一个返回值,所以,亦可以得到这个方法得返回值
    查看全部
  • //首先要获取类的类类型 Class c = obj.getClass(); System.out.println("类的类名称是:"+c.getName()); /** * Method类,方法对象 * 一个成员方法就是一个method对象 * getMethods()获得的就是所有public的方法,包括从父类继承而来的 * getDeclaredMethods()是获取该类自己声明的所有方法,不考虑访问权限 */ Method[] m = c.getMethods(); for(int i =0;i<m.length;i++) { //获得方法的返回值类型的类类型 Class returntype = m[i].getReturnType(); System.out.print(returntype.getName()+" "); //获得方法的名称 System.out.print(m[i].getName()+"("); //获取方法的参数类型-->得到的是参数列表的类型的类类型 Class[] paramstype = m[i].getParameterTypes(); for (Class class1 : paramstype) { System.out.print(class1.getName()+","); } System.out.println(")"); }
    查看全部
  • 其实这里有点不懂,我的理解是newInstance()这个实例对象接收范围太窄了,是Word的话只能固定是Word类,如果要接收Excel就要对newInstance类型进行改动,所以加一个接口或父类就可以接收它旗下的子类实例对象,接收起来就会更加灵活
    查看全部
  • 动态加载如果语法没有错误,是可以通过编译的,注意是编译,在程序运行时可以指明自己想实例化的类,并且建立其的类类对象,若不存在就会报错,选择性就会提高了
    查看全部
  • new是用与静态加载的,就是会一次过将全部可能用到的类全部加载进来,然后编译才可以通过,这下子,有点明白反射的道理了,如果采用动态加载,如果某个类存在,程序就会运行出结果,如果,指明的类不存在,程序就会抛出异常
    查看全部
  • 方法反射:Object o = c.getMethod("print",int.class,int.class).invoke(a,10,30);
    查看全部
  • 编译之后的集合是去泛型化得,通过反射绕过编译
    查看全部
  • getFields);获得成员变量的信息
    查看全部
  • Class类 类也是对象 Java中万物皆对象
    查看全部
    0 采集 收起 来源:Class类的使用

    2016-04-20

  • @Java反射机制——通过反射了解集合泛型的本质 1、反射的操作都是【编译之后】的操作(因为编译获得class字节码文件之后才能得到.class),即运行时操作 2、所以method.invoke()方法也是运行期运行,可以绕过编译期。 二、验证:对一个带有泛型的数组添加不同于泛型的元素。 1、例如:List<String> list = new ArrayList<String>() 2、通过Method m = list.getClass().getMethod("add",Object.class);获得list.add()方法的对象 3、m.invoke(list,"hello");m.invoke(list,1); 按理因为泛型的存在,不能添加整形"1"进去。因为invoke()是运行期操作,所以能够通过编译。 4、结果显示,能够插入"hello"和1,说明<>泛型只作用于编译期,且只是为了规范输入
    查看全部
  • 通过反射了解集合泛型的本质: 反射的操作都是编译之后的操作。 Java中集合的泛型,是防止错误输入的,只在编译阶段有效,绕过编译就无效了。 验证:我们可以通过方法的反射来操作,绕过编译。
    查看全部
  • 1基本数据类型(包装类弥补面向对象)和静态的不是面向对象的 2java.lang.Class的实例对象=Class类 3Class类的构造器是私有的 所有new不出来 只能Class自己使用(Constructor. Only the Java Virtual Machine creates Class objects.) 4得到Class类型3种方式 1.Class a= A.class 2.Class a = a.getClass() 3.Class c = null; c = Class.forName("com.A"); 5编译时加载类是静态加载 new Class() 运行时加载时动态加载Class.forName(); 6main(String[] args) args[0]就是cmd命令行 输入的第一个参数 7在线升级或者添加新功能 执行类是不用编译的 执行类的编译代码不用修改用动态加载规则 类 用新功能实现规则 编译功能类 直接运行执行类不用编译即可 8修改以前的代码 意味着重新编译(javac) 但是动态加载规则接口 值编译添加的新功能类 (实现规则) 执行类直接编译就可 不用重新加载(因为没有修改代码) 9java源码里面有的声明里有native关键字 意思是本地方法(用java声明,底层是用c实现的 ) 10反射的操作都是运行时操作 是之后的操作(。class是字节码是编译后生成的) 11泛型相当于前台的客户端简单验证,是对错误输入的一中检查(同一容器一般都只存一中 类型,所以foreacht,因为foreache都是对同一种类容器的遍历),运行时的容器是没有泛 型效果的(通过反射可以操作不是声明时的泛型类型),所以同一声明类型不同泛型的两种 引用类型的类型是相同的(ArrayList<String> a1== ArrayList<Integer>a2)
    查看全部
  • 类是java.lang.Class类的对象,即所有的类的实例化对象都是Class的对象。
    查看全部
    0 采集 收起 来源:Class类的使用

    2016-04-20

举报

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

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