Java反射机制(一)—— Class类

Java反射机制

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
通俗地说,反射机制就是可以把一个类,类的成员(函数,属性),当成一个对象来操作。
反射需要Java高级应用,同时,也是Java框架的基础。了解反射机制有助于理解框架底层的运行规则。

Class类

先了解几个概念。

  • 在面向对象的世界里,万事万物皆对象。
    在Javau世界中,有两样东西不是对象,其一是普通数据类型(但是有包装类作为弥补),其二就是Java中以静态标识的东西。
    所以,在面向对象的世界里,万事万物皆对象。而是也对象,类是Java.lang.class类的实例对象

  • 那么,该怎么表示呢?我们用一段代码来演示。

    public class ClassDemo{
        public static void main(String[] args) {
            //Foo的实例对象如何表示
            Foo foo1 = new Foo(); 
            //foo1就表示出来了,它是Foo类的实例对象。
            //那么Class类的实例对象,如何表示呢?
            //任何一个类都是Class 的实例对象,Clss类的实例对象有三种表示方式:
            
            //第一种表示方式 · 实际在告诉我们任何一个类都有一个隐含的静态成员变量Class
            Class c1 = Foo.class;
    
            //第二种表达方式,已经知道了该类的对象通过getClass方法
            Class c2 = foo1.getClass();
    
            /*c1、c2 表示了Foo类的类类型(class type)
            * 万事万物皆对象
            * 类也是对象,是Class类的实例对象
            * 这个对象我们称之为该类的类类型
            */
    
            //第三种表达方式
            Class c3 = null; 
            c3 = Class.ForName("包名类名");
    
            //我们完全可以通过类的类类型,创建该类的对象实例
            //但是前提是需要无参的构造方法
            Foo foo = (Foo)c1.newInstance();
        }
    }
    
    class Foo{}

     

发表评论

电子邮件地址不会被公开。 必填项已用*标注