反射

反射机制

Class类,类类型的概念

在面向对象的世界中,万事万物皆对象。Java语言中,静态的成员,
类是对象,类是Java.lang.class的实例对象

如何表示

三种表示方式

//1.实例在告诉我们任何一个类都有一个隐含的静态成员变量class
Class c1 = new Foo();
//2.已知该类的对象通过getClass方法
Class c2 = Foo.getClass();
//官方 c1,c2表示了Foo类的类类型(Class Type)
//万事万物皆对象,类也是对象,是Class的对象 这个对象我们称为类类型
// 个人理解类类型意思是 类的类型
//c1 or c2 都是Foo的类类型 但一个类只可能是Class类的一个实例对象
System.out.print(c1==c2)
//3.通过类名字实例化
Class c3 = Class.forName("com.xc.Foo");//填全称 会有异常
//通常可以通过类类型创建该类的实例对象
Foo f1 = (Foo)c1.newInstance //需要做强制类型转换 需要有无参构造方法 会有异常

Class动态加载类的方法

通过Class.forName("类的全称")

类的加载方式(2种)

1、静态加载类

编译时,加载的类是静态加载类。 Foo foo = new Foo(); 创建对象是静态加载类,编译时就要加载所有要用到的类,如果其中 1 个类有问题,就无法通过编译。解决该问题,可以使用动态加载类。

class office
{
    pubic static void main(String[] args){
        if("wrod".equals(args[0])){
            Word word = new Word();
            word.start();
        }
        if("Excel".equals(args[0])){
            Excel excel = new Excel();
            excel.start();
        }
    }
}
class word
{
    public void start(){
        System.out.print("word..start..");
    }
}

2、动态加载类

运行时,加载的类是动态加载类 Class.forName("com.reflect.Foo"); 编译时不检查用到的类是否存在,运行时再检查。

class officeBetter
{
    pubic static void main(String[] args){
       try{
        //动态加载
        Class c = Class.forNname(args[0]);
        office o = (office)c.newInstance();
       }catch(Expction e){  
           e.printStackTrace();
       }
    }
}
interface office
{
    void start();
}

class word implements office
{
    public void start(){
        System.out.print("word..start..");
    }
}

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励