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

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

Cedar
难度入门
时长 1小时20分
  • Java中集合的泛型,是防止错误输入的,只在编译阶段有效,绕过编译就无效了; 验证:我们可以通过方法的反射来操作,绕过编译; 绕过编译操作就绕过了泛型; 不能用foreach进行遍历操作;
    查看全部
  • 反射的操作都是编译之后的操作=====
    查看全部
  • 方法的反射操作; a1。print(10,20);方法的反射操作使用m对象来进行方法调用合a1.print调用的效果; 方法如果没有返回值返回不聊了,有返回值返回集体的返回值;
    查看全部
  • 1.要获取一个方法就是获取类的信息,获取类的信息首先要获取类的类类型; 2.获取方法由名称和参数列表来决定; getMethod获取的事public的方法; getDelcaredMethod自己生命的方法。
    查看全部
  • 构造函数也是对象; java.lang.Constructor中封装了构造函数的信息; getConstructors获取所有的public的构造函数; getDeclaredConstructors得到所有的构造函数;
    查看全部
  • 成员变量也是对象; java.lang.reflect.Field Field类封装了关于成员变量的操作; getFields()方法获取的是所有的public的成员变量的信息; getDeclaredFields获取的是该类自己声明的成员变量的信息;
    查看全部
  • Class.forName() 1 表示类的类类型,还代表了动态加载类 2编译时刻加载的类是静态加载类,运行时加载类是动态加载
    查看全部
  • 基本的数据类型对应的也有类类型,只要是在类中声明的关键字都会有类类型(void) c.getName(); c.getSimpleName(); getMethods()获取所有Public函数包括父类继承过来的方法 遍历Method[]
    查看全部
  • new创建对象是静态加载类,在编译时需要加载所有可能遇到的类(若有一个类有问题则均不可运行)(有一个出问题则全部用不了) 通过类的类类型生成实例创建该类对象,可以实现动态加载
    查看全部
  • 万事万物皆对象 类是对象 java.lang.Class的实例对象(现在一个类名字是Class) 只有虚拟机可以创建Class实例对象 (1)Class c1=fool.class;任何一个类都是Class的实例对象。任何一个类都有一个隐含的静态成员class c1 c2表示了Fool的类类型(class type)fool类本身是一个实例,万事万物皆对象类也是Class的实例对象,类的类类型 (2)Class c2=c1.getClaas(); (3)Class.forname(""); (4)Fool foo=(Foo)c1.newInstance();通过类的类类型创建该类的实例对象
    查看全部
    0 采集 收起 来源:Class类的使用

    2018-03-22

  • 通过反射了解集合泛型的本质 * 通过Class、Method来认识泛型的本质 1. ArrayList list = new ArrayList();//能放任何类型,因为没有泛型 ArrayList<String> list1 = new ArrayList<String>();//只能放String类型 //list1.add("hello"); //list1.add(20);错误的,集合的泛型就是用来防止错误输入的 Class c1 = list.getClass(); Class c2 = list1.getClass(); System.out.println(c1==c2);//反射的操作都是编译之后的操作 /* * c1==c2 返回true,说明编译之后,集合的泛型是去泛型化的!也就是说集合没有泛型了! * Java中集合的泛型,是防止错误输入的,只在编译阶段有效 * 绕过编译就无效了 * 验证:我们可以通过方法的反射操作,来绕过编译 */ try { Method m = c2.getMethod("add", Object.class);//这里不要写成String.class,不然无法向list1添加整型 m.invoke(list1, "hello"); m.invoke(list1, 20);//绕过编译操作,就绕过了泛型 System.out.println(list1.size()); System.out.println(list1); /* for (String string : list1) { System.out.println(string); }*///现在不能这样遍历了,会有类型转换错误。int不能转化为String } catch (NoSuchMethodException e) { e.printStackTrace(); } 2.我们要区分编译和运行。 反射操作:Class的操作、Method的操作、Field的操作都绕过了编译,都是在运行时刻执行的。
    查看全部
  • 方法的反射 如何获取某个方法: 方法的名称和方法的参数列表才能唯一决定某个方法 方法反射的操作: method.invoke(对象,参数列表) 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,如果有返回值返回具体值,参数可用数组的方式表示,也可以直接列举,没有参数就不写
    查看全部
  • 类也是实例对象,是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();
    查看全部
    2 采集 收起 来源:Class类的使用

    2018-03-22

  • 通过反射了解集合泛型的本质 * 通过Class、Method来认识泛型的本质 1. ArrayList list = new ArrayList();//能放任何类型,因为没有泛型 ArrayList<String> list1 = new ArrayList<String>();//只能放String类型 //list1.add("hello"); //list1.add(20);错误的,集合的泛型就是用来防止错误输入的 Class c1 = list.getClass(); Class c2 = list1.getClass(); System.out.println(c1==c2);//反射的操作都是编译之后的操作 /* * c1==c2 返回true,说明编译之后,集合的泛型是去泛型化的!也就是说集合没有泛型了! * Java中集合的泛型,是防止错误输入的,只在编译阶段有效 * 绕过编译就无效了 * 验证:我们可以通过方法的反射操作,来绕过编译 */ try { Method m = c2.getMethod("add", Object.class);//这里不要写成String.class,不然无法向list1添加整型 m.invoke(list1, "hello"); m.invoke(list1, 20);//绕过编译操作,就绕过了泛型 System.out.println(list1.size()); System.out.println(list1); /* for (String string : list1) { System.out.println(string); }*///现在不能这样遍历了,会有类型转换错误。int不能转化为String } catch (NoSuchMethodException e) { e.printStackTrace(); } 2.我们要区分编译和运行。 反射操作:Class的操作、Method的操作、Field的操作都绕过了编译,都是在运行时刻执行的。
    查看全部
  • 1)如何获取某个方法 方法的名称和方法的参数列表才能唯一决定某个方法 2)方法的反射的操作 method.invoke(对象,参数列表) 1. 要获取一个方法,就是要获取类的信息,获取类的信息就先要获取类的类类型 2. 获取方法,由名称和参数列表来决定。 假设有A类: class A{ public void print(int a,int b){ System.out.println(a+b); } } 则: A a1 = new A(); Class c = a1.getClass(); Method m = c.getMethod("print", int.class,int.class); m.invoke(a1, 10,20); 控制台输出结果:30
    查看全部

举报

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

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