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

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

Cedar
难度入门
时长 1小时20分
  • int.class表示int的类类型,String.class表示String类的类类型,void也有类类型,任何事物都是java.longg.Class的实例对象
    查看全部
  • 反射的操作都是编译之后的操作。 编译之后集合的泛型时去泛型化的。 Java中集合的泛型,是防止错误输入的,只在编译阶段有效,绕过编译就无效了。 可以通过方法的反射来操作,绕过泛型。
    查看全部
  • 泛型 集合的泛型是为了防止你错误输入的。 反射的操作都是编译操作之后的操作,是在运行时的操作。 java中集合的泛型是为了防止错误输入的,只在编译阶段有效,绕过编译就无效了。 通过方法的反射操作可以绕过编译,不受泛型的约束。 例如: ArrayList<String> list1 = new ArrayList<String>(); list.add("hello"); //成功 list.add(20); //失败,类型不是String,会在编译时检验 但是通过反射可以将20添加到list1列表中 method.invoke(list1,20);//此方法在运行时被加载,此时已经不再检验list1的泛型了。
    查看全部
  • 获取某一个方法的反射: 由方法名称和方法的参数列表才能唯一地决定某个方法 使用method.invoke 1.要获取类的信息,首先要获取类的类类型。 A a = new A(); Class c = a.getClass(); 2.获取方法对象,由名称和参数列表决定 Method m = c.getMethod("print",new Class[]{int.class,int.class}); //或者 Method m = c.getMethod("print",int.class,int.class); //会获取方法名称为print,参数为两个int类型的方法 //方法的反射操作,使用method.invoke(对象,参数列表),与一般的方法调用刚好相反 Object o = m.invoke(a,new Object[]{10,20}); //或者 Object o = m.invoke(a,new Object[]{10,20});
    查看全部
  • 反射:获取类的信息,包括类名,类成员变量,成员函数,构造方法等。 获取类的成员变量的方法。 注意:万物皆是对象 成员变量也是对象,是java.lang.reflect.Field的对象 Field[] fs= c.getFields(); Field[] fs1= c.getDeclaredFields(); Class filedType = fs1[i].getType();//得到成员变量的类类型 String fieldName = fs1[i].getName();//得到成员变量的名称 打印对象构造函数的信息 // Constructor[] cons = c1.getConstructors(); Class ccon = cons[i].getParameterType();//得到构造函数的参数的类类型
    查看全部
  • 静态加载:编译时加载,命令:javac 动态加载:运行时加载,命令:java 通过反射可以得到某个类的类型、返回值类型、参数类型、方法名等信息 所有的类都是Class的实例; 所有的方法都是Method的实例。 Class c = obj.getClass(); Method[] mths = c.getMethod(); //返回public类型的方法,包括继承的方法 Method[] mths2 = c.getDeclaredMethod(); //返回自己声明的方法,不考虑访问权限 Class cm = mths[i].getReturnType();//获得返回值的类类型 Class[] cp = mths[i].getParameterTypes();//获得该方法的参数的类类型 mths[i].getName();//获得该方法的方法名
    查看全部
  • new对象是静态加载类,在编译时刻就需要加载所有的可能使用到的类。这样会出现在多个功能的情况下,如果有其中任何一个有问题,在编译时就会报错,导致已经完成的功能不能使用。 解决方法是:采用动态加载的方法,Class.forName为动态加载,在程序执行的时候才加载 Class c1 = Class.forName(args[0]); OfficeAble oa = c1.newInstance(); oa.start(); 其中oa为Interface Interface OfficeAble{ public void start(); } class Word implements OfficeAble { public void start(){ System.out.println("word starts"); } } //功能性的类就尽量使用动态加载
    查看全部
  • 任何一个类(用户创建的,或者是JDK中的)都是java.lang.Class的实例对象。 例如:class A就是Class类的实例对象,其表示方式有: A a = new A(); (1)Class c1 = A.class; (2) Class c2 = a.getClass(); (3)Class c3 = Class.forName("com.xiong.A"); 其中c1==c2==c3. c1,c2,c3成为A的类类型,每一个类只有一个类类型,所以c1,c2,c3相等。 由类类型可以创建出该类的实例,如 A aa = c1.newInstance()//前提要求必须有无参的构造函数
    查看全部
    0 采集 收起 来源:Class类的使用

    2018-03-22

  • 类是对象,是class类的对象
    查看全部
    0 采集 收起 来源:Class类的使用

    2015-04-26

  • 想获取类的信息,首先获取类的类类型
    查看全部
  • 功能性的类,使用动态加载
    查看全部
  • 类也是对象,是java.lang.Class类的对象 这个对象成为该类的类类型
    查看全部
    0 采集 收起 来源:Class类的使用

    2015-04-17

  • getMethods() getDeclaredMethods() getReturnType()获取返回值类型的类类型
    查看全部
  • 成员变量也是对象,Field类封装了关于成员变量的操作 getFields()获取多有public成员变量信息 getDeclaredFields获取该类自己声明的成员变量信息 构造函数也是对象 Constructor封装了构造函数信息 getConstructors()获取所有的public的构造函数 getDeclaredContructors得到所有的构造函数 (小技巧:for(XXX x : XXX){ }
    查看全部
  • 可以通过方法的反射来操作,绕过编译
    查看全部

举报

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

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