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

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

Cedar
难度入门
时长 1小时20分
  • 2017/03/20 方法的反射—2 class A{ public void print(){ System.out.println("helloworld"); } public void print(int a,int b){ System.out.println(a+b); } public void print(String a,String b){ System.out.println(a.toUpperCase()+","+b.toLowerCase()); } }
    查看全部
  • 2017/03/20 方法的反射—1 1)如何获取某个方法:名称和参数列表才能唯一决定某个方法 2)方法反射的操作:method.invoke(对象,参数列表) //要获取print(int ,int )方法 1.要获取一个方法就是获取类的信息,获取类的信息首先要获取类的类类型 A a1 = new A(); Class c = a1.getClass(); /* 2.获取方法 名称和参数列表来决定 * getMethod获取的是public的方法 * getDelcaredMethod自己声明的方法*/ try { //Method m = c.getMethod("print", new Class[]{int.class,int.class}); Method m = c.getMethod("print", int.class,int.class); //方法的反射操作 //a1.print(10, 20);方法的反射操作是用m对象来进行方法调用 和a1.print调用的效果完全相同 //方法如果没有返回值返回null,有返回值返回具体的返回值 //Object o = m.invoke(a1,new Object[]{10,20}); Object o = m.invoke(a1, 10,20); System.out.println("="); //获取方法print(String,String) Method m1 = c.getMethod("print",String.class,String.class); //用方法进行反射操作 //a1.print("hello", "WORLD"); o = m1.invoke(a1, "hello","WORLD"); System.out.println("==="); //Method m2 = c.getMethod("print", new Class[]{}); Method m2 = c.getMethod("print"); //m2.invoke(a1, new Object[]{}); m2.invoke(a1); } catch (Exception e)
    查看全部
  • 编译时刻加载时静态加载类,运行时刻加载时动态类
    查看全部
  • class类的使用 方法的反射 成员变量的反射 构造函数的反射 Java类加载机制
    查看全部
    0 采集 收起 来源:Class类的使用

    2017-03-19

  • Class c1=Foo.class; Class c2=foo1.getClass();
    查看全部
    0 采集 收起 来源:Class类的使用

    2017-03-19

  • Class c1=Foo.class
    查看全部
    0 采集 收起 来源:Class类的使用

    2017-03-19

  • 反射操作是绕过编译(即运行时执行)时执行
    查看全部
  • java集合泛型是为了防止输入错误,只在编译阶段有效,其他情况无效
    查看全部
  • 方法的反射: 1.获取A类中的print(int,int)方法: ①要获取一个方法就是获取类的信息,获取类的信息首先要获取类的类类型 A a1=new A(); Class c= a1.getClass(); ②获取方法 由名称和参数列表来决定,getMethod获取的是public方法,getDelcaredMethod获取自己声明的方法 Method m =c.getMethod(methodName,paramtypes);//paramtypes可以用数组的形式 表示new Class[]{int.class,int.class},也可以直接列举类类型 2.方法的反射操作:是用m对象来进行方法调用,和a1.print(10,20)调用的方法相同 m.invoke(a1,new Object[]{10,20}) Object o=m.invoke(对象名,参数);//方法如果没有返回值返回null,如果有返回值返回具体值,参数可用数组的方式表示,也可以直接列举,没有参数就不写 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"); } }
    查看全部
  • 动态加载class:功能性的类尽量使用动态加载(dynamic load),而不是静态加载(static load)。 Class.forName("类的全称"); ·a.表示类的class type,b.代表动态加载类 ·请大家分清编译,运行 ·编译时刻加载类是静态加载类(new constructor) 运行时刻加载类是动态加载类 new 创建对象 是静态加载类,在编译时刻就需要加载所有的可能使用到的类(100个功能,一个加载不成功,程序就编译不通过) 通过动态加载就可以解决该问题 try{ //动态加载类,在运行时刻加载 Class c =Class.forName("ClassName1") //通过class type,创建该类对象 ClassName1 cn = (ClassName1)c.newInstance(); }
    查看全部
  • 动态加载类,一般来说功能性的类,采用动态加载类。
    查看全部
  • 反射操作绕过编译
    查看全部
  • 编译时刻静态加载,运行时刻动态加载
    查看全部
  • java反射机制 1 Class类反射 1.1 Class类 1)在在面向对象的世界里,万事皆对象 java语言中,类是对象,类是java.lang.Class类的实例对象 2)类的实例的表示方式 第一种方式 Class c1 = Obj.Class; 第二种方式 Class c2 = obj.getClass(); 第三种方式 Class c3 = new Class.forName("包名+类名");
    查看全部
    0 采集 收起 来源:Class类的使用

    2018-03-22

  • 每一个类是Class类的实例对象(java.lang.Class) 类也是实例对象,是java.lang.Class类的实例对象,可以用三种方式表示: 1、Class c1=类.class; 2、Class c2=类的实例对象.getClass(); 3、Class c3=null; c3=Class.forName("类所属的包.类名"); 第三种方法需要先实例化一个变量,然后通过Class.forName("")赋值,但需try,catch处理, c1和c2、c3都代表了类的类类型,一个类只可能是Class类的一个实例对象。 我们称类这个实例对象是这个类的类类型。 可以通过类的类类型创建该类的实例对象,该实例对象需要需无参构造方法。 例:Foo(类) foo(类的实例对象)=(Foo需强制转换类型,一般为接口,便于转换)c1.newInstance();
    查看全部
    0 采集 收起 来源:Class类的使用

    2018-03-22

举报

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

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