为了账号安全,请及时绑定邮箱和手机立即绑定

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

难度入门
时长 1小时20分
学习人数
综合评分9.67
759人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.5 逻辑清晰
  • Java反射机制——通过反射了解集合泛型的本质 1:反射的操作都是编译之后的操作;就是运行阶段 2: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集合的,会报类型转换错误
    查看全部
  • 1、静态加载类,是编译时刻加载;动态加载类,是运行时刻加载 2、new创建对象:是静态加载类,在编译时刻就需要加载所有的【可能使用到的类】。有一个类有问题(如不存在),都不能通过编译,会报错。 3、Class.forName()通过动态加载类,可以用到一个类时,才进行加载。 【功能性的类尽量使用动态加载,并对新添的类实现功能性接口(标准),这样就不用重新编译】 1.Clss.forName("类的全称") 不仅表示了类的类类型,还代表了动态加载类 请大家区分编译、运行 编译时刻加载类是静态加载类,运行时刻加载类是动态加载类 2.//new 创建对象是静态加载类,在编译时刻就需要加载所有的可能使用到的类。eg word excel //通过动态加载类可以解决该问题 //动态加载类,在运行时刻加载 Class c=Class.forName(args[0]); //通过类类型,创建该类对象 OfficeAble oa=(OfficeAble)c.newInstance();//word 和excel都想加载就用一个标准oa oa.start(); //编写一个标准接口 interface OfficeAble { public void start(); } //让word 和excel继承oa class Excel implements OfficeAble { public void start(){ } }
    查看全部
  • Class类的基本API操作 1、c.getName();//获取类的名称 2、c.getSimpleName();//不包含包名的类的名称 3、c.getMethods();//获取类的【所有方法】集合,【所有方法都是Method类的对象】得到的是一个数组 4、c.getReturnType()//方法返回值类型。 4、c.getDeclaredMethods();//获取的是所有该类【自己声明】的方法,【不问访问权限】
    查看全部
  • java的反射机制(reflect) 1.静态的成员,普通数据类型不是对象 2.类是java.land.Class类的实例对象 3.任何一个类都是Class的实例对象,有三种表达方式 (1)Class c1 = 类名.class; (2)Class c2 = 类的实例对象.getClass(); (3)Class c3 = Class.forName(类名); 其中c1,c2,c3都是一样的,即c1==c2.c1==c3,c2==c3;因为一个类只有一个 类类型(class type) 4.可以通过类类型来获取一个类的实例对象:类名 类的实例对象名称 = c1.newInstance();前提是该类有空参数的构造方法。
    查看全部
    2 采集 收起 来源:Class类的使用

    2015-03-09

  • public Class A{ public void print(){}; public void Print(Sting a,String b){} public void Print(int a,int b){}; } public Class B{ public static void main(String[] args){ A a1 = new A(); Class c= a1.getclass; Method getMet=c.getMethod("print",String.class,String.class);//忘了加引号 Object obj=getMet.invoke(a1,"df","df"); } }
    查看全部
  • everything is object very good
    查看全部
    1 采集 收起 来源:Class类的使用

    2015-02-02

  • 如果想一个类的信息,就要湖获得类的类型 获得类的类去再型后再去获得类信息就会轻而易举的获得了
    查看全部
  • @·class类的使用 1)在面向对象的世界里,万事万物皆对象。 java语言中,静态的成员、普通数据类型是不是对象呢?类是谁的对象呢? ...类是对象,类是java.lang.Class类的实例对象 2)这个对象到底如何表示 有三种表示方式, 以class Foo为例,Foo这个类 也是一个实例对象,Class类的实例对象,如何表示呢? 【方式一】 Class c1 = Foo.class; //第一种表示方式 --->实际在告诉我们任何一个类都有一个隐含的静态成员变量 【方式二】 Class c2 = foo1.getClass(); //第二种表达方式,已经知道该类的对象通过getClass方法 /*官网 c1,c2表示了Foo类的类类型(class type) * 万事万物皆对象, * 类也是对象,是class类的实例对象 * 这个对象我们成为该类的类类型 * */ ##不管c1 or c2 都代表了Foo类的类类型,一个类只可能是Class类的一个实例对象 System.out.println(c1 == c2); //输出结果为true 【方式三】 c3 = Class.forName("com.imooc.reflect.Foo"); (要try..catch捕获异常) ☞通过类的类类型创建该类的对象实例 我们完全可以通过类的类类型创建该类的对象实例 --->通过c1或c2或c3创建Foo的实例对象 !!前提要有无参数的构造方法 Foo foo = (Foo)c1.newInstance();
    查看全部
    1 采集 收起 来源:Class类的使用

    2018-03-22

  • 编译时加载的类:静态加载类(用new关键词创建的类) 运行时加载的类:动态加载类(用类类型创建的类)(不过需要有接口或者父类(抽象类)) //Class.forName("类的全名") Class c = Class.forName(args[0]); OfficeAble oa = (OfficeAble) (c.newInstance());//需要有无参构造器 //OfficeAble 是接口(interface)
    查看全部
  • 方法的反射: 1. 方法名称加参数列表可以唯一确定一个方法 2. 通过方法对象来实现方法的功能,即把实例对象当成参数传给方法对象 Here is an example: There is a class A: class A{void printInfo(String s1, String s2){System.out.println(s1 + s2);}} Implement the class: A a = new A(); Class c = a.getClass(); Method m = c.getMethod("printInfo", String.class, String.class); //getMethod方法只能获得public方法 //getDeclaredMethod方法能获得所有自己声明的方法 //you can write the above code like following: Method m = c.getMethod("printInfo", new Object[]{String.class,String.class}); Object o = m.invoke(a, "Hello ", "World!");//Here, o = null //You can also write like: Object o = m.invoke(a, new Object[]{"Hello ","World!"}); //The above code just like: a.printInfo("Hello ","World!");
    查看全部
  • 想获得类的信息先得到类的类类型Class c=object.getClass();,再根据想要的比如Field [] fs=c.getDeclaredFields();获得数组,再将其进行处理即可
    查看全部
  • 1)在面向对象(oop)的世界里,万事万物皆对象。 在Java中,包括基本的数据类型,都是对象。 Class c = int.class;//int 的类类型 那就是说: 类是对象,类是java.lang.Class类的实例对象。这个对象我们称之为类类型。 换言之,每一个类都有一个类类型,这个类类型就是java.lang.Class的实例对象 (视频中原话:Class的实例对象是该类的类类型) 2)如何获取一个类的类类型(三种方法) class Foo{} Foo foo1=new Foo(); 1. Class c1 = Foo.Class;//任何一个类都有一个隐含的静态成员变量class 2. Class c2 = foo1.getClass()//已经知道该类的对象通过getClassF方法 3. Class c3 = null; c3 = Class.forName("com.immoc.reflect.Foo"); //of course, c1 == c2 == c3 is true 3)利用类类型来创造实例对象(需要有无参数的构造方法)(需要有强制类型转化,且有异常抛出) Foo foo2 = (Foo)(c1.newInstance()); Foo foo3 = (Foo)(c2.newInstance()); Foo foo4 = (Foo)(c3.newInstance());
    查看全部
    1 采集 收起 来源:Class类的使用

    2018-03-22

  • Foo foo1 = new Foo(); 获取Foo类的类类型的三种方法 Class c1 = Foo.class; Class c2 = foo1.getClass(); Class c3 = Class.forName("com.xx.XXclass");
    查看全部
    1 采集 收起 来源:Class类的使用

    2018-03-22

  • Class类:反射机制
    查看全部
    1 采集 收起 来源:Class类的使用

    2016-01-05

  • 1.万般皆对象<br> 2.只有java虚拟机才能创建class实例对象<br> 3.任何一个类都是Class类的对象,这个实例对象有三种表示方式
    查看全部
    1 采集 收起 来源:Class类的使用

    2018-03-22

举报

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

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

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