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

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

Cedar
难度入门
时长 1小时20分
  • 编译时加载的类:静态加载类(用new关键词创建的类) 运行时加载的类:动态加载类(用类类型创建的类)(不过需要有接口或者父类(抽象类)) //Class.forName("类的全名") Class c = Class.forName(args[0]); OfficeAble oa = (OfficeAble) (c.newInstance());//需要有无参构造器 //OfficeAble 是接口(interface)
    查看全部
  • Class类 1)在面向对象的世界里,万事万物皆对象。 类是对象,类是java.lang.Class类的实例对象。 There is a class named Class 2)//Foo的实例对象如何表示 Foo foo1=new Foo();//foo1就表示出来了 //Foo这个类也是一个实例对象,Class类的实例对象,如何表示呢? //任何一个类都是Class的实例对象,这个实例对象有三种表示方式 //第一种表示方式--->实际在告诉我们任何一个类都有一个隐含的静态成员变量class Class c1=Foo.class; //第二种表达方式--->已经知道该类的对象通过getClassF方法 Class c2=foo1.getClass(); //官网c1,c2表示了Foo类的类类型(class type),万事万物皆对象,类也是对象,是Class类的实例对象 //这个对象我们称为该类的类类型 //不管c1 or c2都代表了Foo类的类类型,一个类只可能是Class类的一个实例对象 //第三种表达方式 Class c3=null; c3=Class.forName("com.imooc.reflect.Foo"); //我们完全可以通过类的类类型创建类的对象实例--->通过c1 or c2 or c3创建Foo的实例对象 Foo foo=(Foo)c1.newInstance();//需要有无参数的构造方法
    查看全部
    0 采集 收起 来源:Class类的使用

    2018-03-22

  • 1. 反射的操作都是编译之后的操作。 2. Java中的泛型仅在编译阶段有效,(仅仅是防止编程错误的输入)绕过编译就无效了。 那就是说用反射可以使泛型无效(编译之后是去泛型化的)
    查看全部
  • 方法的反射: 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类实例化的三种表示方式...
    查看全部
    0 采集 收起 来源:Class类的使用

    2016-03-24

  • 获取一个类的方法,就是要获取一个类的信息; 而获取一个类的信息,首先要获取这个类的类类型
    查看全部
  • 编译时加载类是静态加载类(一百个功能,如果有一个出错,其他也不能用),运行时加载类是动态加载类(每个功能各不干扰,用接口去实现)
    查看全部
  • Class类
    查看全部
  • @try——catch...内容 //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);
    查看全部
  • public class MethodDemo1 { public static void main(String[] args) { //要获取print(int ,int )方法 1.要获取一个方法就是获取类的信息,获取类的信息首先要获取类的类类型 A a1 = new A(); Class c = a1.getClass(); /* * 2.获取方法 名称和参数列表来决定 * getMethod获取的是public的方法 * getDelcaredMethod自己声明的方法 */ try { ... } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 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()); } }
    查看全部
  • 这个Foo类是Class类的“对象”
    查看全部
    0 采集 收起 来源:Class类的使用

    2016-03-20

  • 只有java虚拟机才能创建Class对象
    查看全部
    0 采集 收起 来源:Class类的使用

    2016-03-20

  • 1) 基本的数据类型,void的关键字都有类类型 2) 方法是Method类的对象 3) Class类常用方法: getName(); getSimpleName(); getMethods(); getDeclaredMethods(); Method类常用方法: getReturnType(); getParametersType(); getName();
    查看全部
  • Class、Method反射都是在运行时执行,可以绕过编译
    查看全部
  • 方法的反射
    查看全部

举报

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

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