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

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

Cedar
难度入门
时长 1小时20分
  • 编译 运行
    查看全部
  • 静态加载,在编译时刻就要加载所有的类
    查看全部
  • 动态加载 不需重新编译、 当有100个类时,有一个不能加载时,其它类需要运行。功能性的类,需要用到动态加载类
    查看全部
  • 通过反射了解集合泛型的本质 ArrayList list = new ArrayList(); ArrayList<String> list1 = new ArrayList<String>(); list1.add("hello"); Class c1 = list.getClass(); Class c2 = list1.getClass(); //c1 == c2 为true //反射的操作都是编译之后的操作 //c1 == c2 结果返回true说明编译之后的集合的泛型是去泛型化的 Java中集合的泛型,是防止错误输入的,只在编译阶段有效,绕过编译就无效了 //验证:通过方法的反射来操作,绕过编译 Method m = c2.getMethod("add",Object.class); m.invoke(list1,20);//绕过了泛型 区分编译和运行 所有反射的操作都是要绕过编译直接进入运行的
    查看全部
  • 方法的反射 public class MethodDemo1{ public static void main(String[] args){ //获取一个方法就是获取类的信息,获取类的信息首先就要获取类的类类型 A a1 = new A(); Class c = a1.getClass(); //获取方法名称和参数列表来决定 getMethod获取的是public的方法 //getDelcaredMethod自己声明的方法 //Method m = c.getMethod("print",new Class[]{int.Class,int.Class}); Method m = c.getMethod("print",int.Class,intClass); //方法的反射操作 用m对象来进行方法的调用和a1.print调用效果一样 //方法如果没有返回值返回null,有返回值返回具体的返回值 Object o = m.invoke(a1,new Object[]{10,20}); } } class A{ public void print(int a,int b){ System.out.println(a+b); } public void print(String a,String b){ } }
    查看全部
  • java-reflect专题
    查看全部
    0 采集 收起 来源:Class类的使用

    2017-01-18

  • Class c = obj.getClass(); //构造函数也是对象 java.lang.Constructor中封装了构造函数的信息 getConstructors获取所有的public的构造函数 getDeclaredConstructors()获取所有构造函数 Constuctor[] cs = c.getDeclaredConstructors();
    查看全部
  • 成员变量也是对象 java.lang.reflect.Field Field类封装类关于成员变量的操作 getFileds()方法获取的是所有的public的成员变量的信息 getDecaredFields获取该类自己声明的成员变量的信息 //Field[] fs = c.getFields(); //Field[] fs = c.getDecaredFields(); for(Field field : fs){ Class fieldType = fs.getType(); String fieldname = field.getName(); }
    查看全部
  • 基本的数据类型对应的类类型 void的关键字都存在类类型 Class c1 = int.class//int 数据类型的类类型 Class c2 = String .class;// String 类的类类型,String类的字节码 Class c3 = double.class; Class c4 = Double.class; Class c5 = void.class; Class类的基本操作 public class Classdemo{ } public class ClassUtil{ public static void printClassMessage(Object obj){ //获取类的信息,首先获取类的类类型 Class c = obj.getClass();//传递的是哪个子类的对象,c就是该类的类类型 //获取类的名称 打印(c.getname()); //Method类是方法对象 一个成员方法就是一个Method对象 //getMethods()方法获取的是所有public的方法,包括父类继承而来的 //getDeclaredMethods()获取所有该类生命的方法,不问访问权限 Method[] ms = c.getMethods();// for(int i=0;i<ms.length;i++){ //得到返回值类型的类类型 Class returnType = ms[i].getReturnType(); 打印(returnType.getName()); // 得到方法的名称 打印(ms[i].getName()) //获取参数类型--》 得到的是参数列表的类型的类类型 Class[] paramTypes = ms[i].getParameterTypes(); for(Class class1:paramTypes){ print(class1.getName()); } } } }
    查看全部
  • 动态加载类 Class.forName("类的全称") 不仅表示了类的类类型,还代表类动态加载类 //new 创建对象 是静态加载类 ,在编译时刻就需要加载所有的可能使用到的类 //通过动态加载类可以解决该问题 class office{ main方法{ try{ //动态加载,在运行时刻加载类 Class c = Class.forName("packagename.Classname"); //通过类类型,创建该类对象 OfficeAble e = (OfficeAble)c.newsInstance(); e.start(); }catch(...){ } } }
    查看全部
  • java.lang.Class 的构造对象是私有的只能由虚拟机来调用
    查看全部
    0 采集 收起 来源:Class类的使用

    2017-01-18

  • 可以通过c1 c2 c3 来构造Foo类的对象实例 Foo foo2 = (Foo)c1.newInstance();
    查看全部
    0 采集 收起 来源:Class类的使用

    2017-01-18

  • 所有的类都是java.lang.Class的实例对象 class Foo{ } Foo foo = new Foo() Class c1 = Foo.class; Class c2 = foo.getClass(); Class c3 = Class.forName("packagename.Foo"); c1 or c2 or c3 都是Foo的类类型
    查看全部
    0 采集 收起 来源:Class类的使用

    2018-03-22

  • 静态成员和基本数据类型都不是面相对象的
    查看全部
    0 采集 收起 来源:Class类的使用

    2017-01-18

  • Class类
    查看全部
    0 采集 收起 来源:Class类的使用

    2017-01-18

举报

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

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