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

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

Cedar
难度入门
时长 1小时20分
  • 1. 万变不离其宗:要想获得类的信息,就必须要获得类的类类型 2. 把一段代码单独载出去写成一个方法: 选定代码块 -->Refactor(重构)--> Extract Method(抽取方法)-->给导出的方法命名。
    查看全部
  • .Class類的使用 .方法的反射 .成員變量的反射 .構造函數的反射 .Java類加載機制
    查看全部
    0 采集 收起 来源:Class类的使用

    2017-02-18

  • 1. 基本的数据类型、void关键字都有类类型。 截图中的double.class和Double.class是不同的类类型,前者是数据类型double的类类型,后者是Double类的类类型。 getSimpleName()可以返回不包含包名的类名。 2. Class类的基本API操作。 public static void printClassMessage(Object obj){ //要获取类的信息,首先要获取类的类类型 Class c = obj.getClass();//传递的是哪个子类的对象,c就是该子类的类类型 //获取类的名称 System.out.println("类的名称是"+c.getName()); /*万事万物皆对象 * Method类——方法对象 * 一个成员方法就是一个Method对象 * Method类封装了对成员方法的操作 * getMethods()方法获取的是所有的public的函数,包括从父类继承而来的 * getDelaredMethods()获取的是所有该类自己声明的方法,不问访问权限 */ Method[] ms = c.getMethods();//或者c.getDeclaredMethods() for(int i=0;i<ms.length;i++){ //得到方法的返回值类型的类类型 Class returnType = ms[i].getReturnType(); System.out.print(returnType.getName()+" ");//返回值类型的名字 //得到方法的名称 System.out.print(ms[i].getName()+"("); //获取参数类型--->得到的是参数列表的类型的类类型 Class[] paramTypes = ms[i].getParameterTypes(); for (Class class1 : paramTypes) { System.out.println(class1.getName()+","); } System.out.println(")"); } }
    查看全部
  • 获取类中方法的信息
    查看全部
  • Class.forName("类的全称"): * 不仅表示了类的类类型,还代表了动态加载类 * 请大家区分编译、运行 * 编译时刻加载类是静态加载类、运行时刻加载类是动态加载类 用new创建对象,属于静态加载类,在编译时刻就需要加载所有的可能使用到的类,只要有一个类缺失或者类中某个成员缺失,就会报错(不管实际上有没有用到这个类),导致整个程序都无法运行。 于是我们希望:要用哪个类的时候再加载这个类,不用就不加载。 通过动态加载类可以解决上述问题。 本例中举了Word类、Excel类加载的例子,现在做动态加载: Class c = Class.forName(args[0]); //通过类类型,创建该类对象,这里就产生一个问题:是生成Word呢还是生成Excel?老师的解决思路是:只创建一个新类OfficeAble,作为接口,令Word类、Excel类都实现这个接口就可以了: OfficeAble oa = (OfficeAble)c.newInstance(); oa.start(); class Word implements OfficeAble { public void start(){} } 代码设计思路:功能性的类最好使用动态加载。 Class c = Class.forname(参数);//动态加载类返回该类的类类型。 接口 x = (接口)c.newInstance();通过转换为接口的类型,用来实现方法。
    查看全部
  • Class类 1. 在面向对象的世界里,万事万物皆对象。 但在java语言中,有两样东西不是对象:静态成员(变量、方法)、普通数据类型(int等)。另外,基本数据类型的包装类就是对象了。关于静态成员,它属于类而不属于对象。 类是对象,类是java.lang.Class类的实例对象。 2. Class类的实例(对象)到底如何表示? There is a class named Class. Class类(Class.class)的无参构造函数是私有的,只有Java的虚拟机可以创建Class类的实例对象。 这里先在任意一个类A的外头定义一个class Foo(){};在类A中创建对象:Foo foo1 = new Foo(); 任何一个类都是Class的实例对象,这个实例对象有三种表示方式: ---> 第一种表示方式:实际上在告诉我们任何一个类都有一个隐含的静态成员变量class。 Class c1 = Foo.class; //已知类名 ---> 第二种表达方式,已知该类的对象,通过getClass方法。 Class c2 = foo1.getClass(); //已知对象名 -----官网的解释:c1,c2表示了Foo类的类类型(class type)。总之,类是对象,是Class类的实例对象,这个对象我们称之为该类的类类型。如上面所举的例子,Foo类的对象是Foo自身的实例对象(例如foo1),Foo类的类类型是指Class类的对象。 -----不管c1 还是 c2,都代表了Foo类的类类型,一个类只可能是Class类的一个实例对象,所以这里c1=c2。 ---> 第三种表达方式 Class c3 = null; c3 = Class.forName("com.imooc.reflect.Foo");这里要写类的全名,也就是包含包名。 ----------- 我们完全可以通过类的类类型创建该类的对象实例:通过c1、c2、c3创建Foo的实例对象: Foo foo = (Foo)c1.newInstance();需要强制类型转换。注意,Foo类必须有自己的无参构造方法!这是前提条件。
    查看全部
    0 采集 收起 来源:Class类的使用

    2018-03-22

  • JAVA-Reflect专题 * Class类的使用 * 方法的反射 * 成员变量的反射 * 构造函数的反射 * Java类加载机制
    查看全部
    0 采集 收起 来源:Class类的使用

    2017-02-18

  • 通过反射了解泛型的本质: 1、泛型与非反省的区别:ArrayList list=new ArrayList();与ArrayList<String> list2=new ArrayList<String>();list.add(任意类型)可以添加任意类型,而list2.add(String类型)只能添加string类型,java中的泛型是防止错误输入的,只在编译阶段有效。2、通过判断list.getClass()==list2.getClass();返回TRUE,可知反射的作用都是在编译之后操作的,泛型在绕过编译之后就无效了(通过invoke方法反射可知方法反射在编译后无效)。
    查看全部
  • 数据类型的类类型
    查看全部
  • 类的反射,方法的反射,构造函数的反射
    查看全部
  • 方法的反射 - Java获取类的方法信息 /** * 打印类的信息,包括类的成员函数、成员变量(只获取成员函数) * @param obj 该对象所属类的信息 */ public static void printClassMethodMessage(Object obj){ //要获取类的信息 首先要获取类的类类型 Class c = obj.getClass();//传递的是哪个子类的对象 c就是该子类的类类型 //获取类的名称 System.out.println("类的名称是:"+c.getName()); /* * Method类,方法对象 * 一个成员方法就是一个Method对象 * getMethods()方法获取的是所有的public的函数,包括父类继承而来的 * getDeclaredMethods()获取的是所有该类自己声明的方法,不问访问权限 */ Method[] ms = c.getMethods();//c.getDeclaredMethods() for(int i = 0; i < ms.length;i++){ //得到方法的返回值类型的类类型 Class returnType = ms[i].getReturnType(); System.out.print(returnType.getName()+" "); //得到方法的名称 System.out.print(ms[i].getName()+"("); //获取参数类型--->得到的是参数列表的类型的类类型 Class[] paramTypes = ms[i].getParameterTypes(); for (Class class1 : paramTypes) { System.out.print(class1.getName()+","); } System.out.println(")"); } }
    查看全部
  • 基本的数据类型对应的也有类类型,只要是在类中声明的关键字都会有类类型
    查看全部
  • Class c=class.forname(参数);//动态加载类返回该类的类类型 接口 c=(接口)c.newInstance();通过转换为接口的类型。来实现方法
    查看全部
  • Class类的实力对象有三种获取形式;Foo.class;foo1.getClass();Class.forName("com.moc.Foo")
    查看全部
    0 采集 收起 来源:Class类的使用

    2018-03-22

  • 基本数据类型,void关键字都有其类类型
    查看全部

举报

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

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