为了账号安全,请及时绑定邮箱和手机立即绑定

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

难度入门
时长 1小时20分
学习人数
综合评分9.67
759人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.5 逻辑清晰
  • 动态加载类,在运行时刻加载

    Class c = Class.forName(args[0]);

    通过类类型,创建该类对象

    OfficeAble oa = (officeAble)c.newInstance();    //officeAble为一个接口,里面有start方法

    oa.start;

    查看全部
  • Class.forName("类的全称")

    不仅表示了类的类类型,还代表了动态加载类。

    编译时加载类是静态加载类,运行时加载类是动态加载类。

    查看全部
  • 我们完全可以通过类的类类型创建该类的对象实例,即通过c1 or c2 or c3 创建Foo的实例

    Foo foo = (Foo)c1.newInstance();

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

    2020-07-30

  • Foo foo1 = new Foo();

    任何一个类都是Class的实例对象,这个实例对象有三种表示方式

    第一种表示方式:实际在告诉我们任何一个类都有一个隐含的静态成员变量class

    class c1 = Foo.class; //在知道类名时使用

    第二种表示方式:已经知道该类的对象通过getClass方式

    Class c2 = foo1.getClass; //在知道对象时使用

    在官网c1、c2表示了Foo类的类类型(class type)

    万事万物皆对象,类也是对象,是Class类的实例对象,

    这个对象我们成为该类的类类型。

    第三种表达方式:

    Class c3 = null;

    try{

    c3 = Class.forName("com.imooc.reflect.Foo");

    }catch(ClassNotFoundException e){

    e.printfStackTrace();

    }

    注意:c1=c2=c3 一个类只可能是Class类的一个实例对象.


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

    2020-07-30

  • Class aClass = Class.forName("完整的类名");

    //调用类类型进行实例化时,类中必须有无参的构造函数

    aClass.newInstace();

    查看全部
  • 静态类似一次性?

    动态则可回收?

    (暂时还不知道该如何理解,等以后理解更深了再回头看看这个问题,如果有大佬看到这个笔记也可以私聊告诉我一声,麻烦了。

    查看全部
  • 任何一个类都是Class的实例对象,有三种方法表示这个实例对象

    1. class属性(隐含的静态成员变量class),如Class c1 = Foo.class

    2. getClass()方法,如Class c2 = foo1.getClass()

    3. Class.forName()方法,会抛出异常

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

    2020-06-03

  • 编译时刻加载类是静态加载类.

    运行时刻加载类是动态加载类.

    查看全部
  • 类 也是一个对象.

    这个对象我们把它称之为"类类型"

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

    2020-06-02

  • 每个对象所属的类就是java.lang.Class的实例

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

    2020-06-02

  • 泛型,编译阶段有效

    查看全部
  • 返回值类型的类类型

    返回值类型

    查看全部
  • 我们创建的每一个类(如a),都是Class的实例变量,通过new方式创建类对象

    a的实例变量,套了两层

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

    2020-05-17

    1. new 创建对象是静态加载类:

      编译时需将其中所有的类加载进来,如共有100个类,其中出现1个类有问题,其他99个类均不能正常加载。例如:

            /*如需求去掉Excel类功能,但保留Word功能,代码中Word在前,则此时Word功能也无法执行*/

            if("Word".equals(arg[0])){

            Word w = new Word();

            }

            if("Excel".equals(args.[0])){

            Excel e = new Excel();

            }    

    2.动态加载:用哪个就加载哪个,不用不加载

    Class OfficeBetter{

        publice void static main(String[] args){

            //动态加载类,在运行时刻加载

            Class c = Class.forName(args[0]);

            //通过返回类类型,创建该类对象

            类名 待建类名 = (类名) c.newInstance(); 

            待建类名.start();

        }

    }

    【注意】

    //下面一行可用Interface编写标准,防不同类做强制转换时报错

    *********类名 待建类名 = (类名) c.newInstance();*************

    //例如:

    OfficeAble oa = (OfficeAble) c.newInstance();


    //新建一个接口文件:

    interface OfficeAble{

        public void start();

    }


    //让接口在待强制转换类型的类中生效

    class Word implements OfficeAble{

        public static void start(){

        System.out.println("This is Word");

        }

    }


    //不被转换类型的类不生效OfficeAble接口

    class Excel{

        publice static start(){

            System.Out.println("This is Excel");

        }

    }

    //则    OfficeAble oa = (OfficeAble) c.newInstance();    就会自动创建Word类的对象,而不创建Excel类的对象


    查看全部
  • 1.创建一个类:

    知道类名:直接.class

    Class Name1 = Name.class

    知道类的对象:使用getClass()方法

    Name name = new Name();

    Class name1 = name.getClass();

    全称创建类:

    Class name = null;

    name = Class.forName("com.packagename.classname.classname_toCreate");

    类的对象创建:N类类型的对象创建N类的对象

    //需要有无参的构造方法

    Name name = new Name();

    Name na =(Name) name.newInstance();


     

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

    2020-03-30

举报

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

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

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