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

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

Cedar
难度入门
时长 1小时20分
  • 除了基本的数据类型、静态成员不是对象,万事万物皆对象,而基本的数据类型可封装为包装类。 类是java.lang.class的对象 三种获取类类型的表示方式: (1)通过隐含的静态成员变量class Class c = Foo.class (2)通过对象实例的getClass方法 Class c = foo1.getClass() (3)通过Class中的forName方法 ,这个需要去捕获异常 Class c = Class.forName("hello.xiaoxi.Foo") 通过类类型去创建对象实例: Foo f1 = (Foo)c.newInstance()
    查看全部
  • 添加文档注释:alt+shift+j
    查看全部
  • double 是基本数据类型,而Double是double的包装类 所以 Class c3=double.class //double的类类型,(跟c1类似) Class c4=Double.class //double类的类类型(跟c2类似)
    查看全部
  • 类的加载的问题: 1.静态加载:在我们编译程序的时候属于静态加载 2.动态加载:在我们运行的时候属于动态加载 相关的类 Class ,Method(该类可以获取该类所有public的方法包括从父类继承而来的) getReturnType() 得到方法的返回值类型的类类型 getName() 得到方法的名称 getParameterTypes() 得到的是参数列表的类型的类类型
    查看全部
  • Java反射机制——通过反射了解集合泛型的本质 1:java中集合的泛型,只在编译阶段有效,用来限定输入的,编译之后是去泛型的。 2:反射的操作都是编译之后的操作;就是运行阶段; 3:java中集合的泛型是防止错误输入的;只在编译阶段有效,只要绕过编译就无效啦 我们可以通过方法的反射来操作,绕过编译 eg: ArrayList list1=new ArrayList(); ArrayList<String> list2=new ArrayList<String>(); Class c1=list1.getClass(); Class c2=list2.getClass(); System.out.print(c1==c2);//true Method m=c2.getMethod("add",Object.class); m.invoke(list2,20);//向成功向list2集合中添加一个int 型的值;绕过编译 当然是不能直接foreach list2集合的,会报类型转换错误
    查看全部
  • 动态加载类<br> 定义接口<br> interface OfficeAble{<br> public void start(); <br> }<br> class Word implements OfficeAble{<br> public static void start(){<br> System.out.println("word...starts");<br> }<br> }<br> 1.Class.forName("类的全称")不仅表示了类得类类型,还代表了动态加载类<br><br> 编译时刻加载类是静态加载类、运行时刻加载类是动态加载。<br><br> 2.new 创建对象是静态加载类,在编译时刻就需要加载所有的可能使用到的类;<br> 一个错误就会导致编译失败,通过动态加载类可以解决这个问题<br><br> <br> OfficeAble oa=(OfficeAble)c.newInstance();//在此之前应该定义个接口Interface OfficeAble,并且让子类实现它。<br><br> <br> OfficeBetter.java只用编译一次,每次添加新的功能后只用编译所用的接口实现类,然后运行“java OfficeBetter 类名” 。 <br> <br> 3.在线升级用的就是动态加载类。功能性的类,要使用动态加载,而不能使用静态加载。
    查看全部
  • 静态加载与动态加载
    查看全部
  • 类是java.lang.class的对象
    查看全部
    0 采集 收起 来源:Class类的使用

    2016-08-09

  • 1.Class.forName("类的全称")不仅表示了类得类类型,还代表了动态加载类<br> 编译时刻加载类是静态加载类、运行时刻加载类是动态加载。<br> 2.new 创建对象是静态加载类,在编译时刻就需要加载所有的可能使用到的类; 一个错误就会导致编译失败,通过动态加载类可以解决这个问题<br> Class c = Class.forName(args[0]);<br> 通过类类型,创建该类对象。<br> OfficeAble oa=(OfficeAble)c.newInstance();//在此之前应该定义个接口Interface OfficeAble,并且让子类实现它。<br> oa.start();<br> 。。。。在编译时Word.java需要重新编译,而OfficeBetter.java不需要,每次添加新的功能的时候只用编译使用了接口的子类,然后运行时输入 java OfficeBetter Word,这时oa是Word类<br> 3.在线升级用的就是动态加载类。功能性的类,要使用动态加载,而不能使用静态加载。
    查看全部
  • 1.Class类 1) 在面向对象的世界里,万事万物皆对象。(java语言中,静态的成员、普通数据类型除外) 类是不是对象呢?类是(哪个类的对象呢?)谁的对象呢? 类是对象,类是java.lang.Class类的实例对象 2)这个对象到底如何表示 3 )Class.forName("类的全称") 不仅表示了,类的类类型,还代表了动态加载类 请大家区分编译、运行 编译时刻加载类是静态加载类、运行时刻加载类是动态加载类 4)基本的数据类型 void关键字 都存在类类型 5)Class类的基本API操作 2.方法的反射 1)如何获取某个方法 方法的名称和方法的参数列表才能唯一决定某个方法 2)方法反射的操作 method.invoke(对象,参数列表) 3)为什么要用方法的反射 why?指定方法名称调用方法 举个实际应用的案例 ---->通过标准JavaBean的属性名获取其属性值 BeanUtil类 4)通过Class,Method来认识泛型的本质
    查看全部
    0 采集 收起 来源:Class类的使用

    2018-03-22

  • 验证:我们可以通过方法的反射来操作,绕过编译 Method m = c2.getMethod("add",object.class); m.invoke(list1,12);//我靠还真绕过编译,泛型了 //这货我清楚了
    查看全部
  • 通过getClass获取类对象,再getMethod获取方法, m.invoke(a1,new object[](10,20));//方法反射
    查看全部
  • 获取两个相同名称方法,可以用getMethod方法来获取 c.getMethod("print","int.class,int.class"); 指定参数,获取方法...
    查看全部
  • 我擦,构造方法也是对象,真他M是万物皆对象啊 java.lang.Constructor中封装了构造函数的信息 getConstructor获取所有的public的构造函数 getDeclaredConstructors得到所有的构造函数 Constructor【】 cs = c.getDeclaredConstructors()
    查看全部
  • getMethd.是获取方法, getField方法是获取变量 Field[] fs = c.getDeclaredFields()获取的是自己申明的变量信息
    查看全部

举报

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

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