Java反射之——Java中Class类的使用

Java语言中,万事万物皆对象,但是静态成员、基本的数据类型(基本的数据类型也有自己的包装类)等并不是对象,因为静态的变量和函数属于类,我们可以通过 类.静态变量 / 类.静态函数等方式调用。

public class Test {

    private static String name = "test";
    
    private static String name() {
        return "这是一个测试类";
    }
    public static void main(String[] args) {
        System.out.println(Test.name());
        System.out.println(Test.name);

    }

}

输出结果:这是一个测试类
                  test

因此,类也是对象,任何一个类都是java.lang.Class的实例对象,我们可以通过三种方式来表达本文中Class的实例对象Test。

1、 每一个类都有一个隐含的静态成员变量class。

Class class1=Test.class;

2、通过Test 类的对象(Test test = new Tset(); )test,调用getClass() 方法,既:

Class class2=test.getClass();

在这里class1和class2是Class的实例对象,Test也是Class的实例对象,因此class1和class2表示了Test类的类类型(类类型指的是:类本身就是Class的一个实例对象)。

3、通过动态加载类Class.forName(""),注:""里为类的全称,包含包名。

class3=Class.forName("xx.xx.Test")

我们可以通过newInstance()方法创建Tset 的实例对象,但是需要做强制转换:

Test test2=(Test)class3.newInstance();

代码如下:

public class Test {

    public static void main(String[] args) {
        //Test的实例对象表示
        Test test = new Test();
        
        //1、通过Test隐藏的静态成员变量class(每一个类都有一个隐藏的静态成员变量class)
        Class class1 = Test.class;
        //2、通过Test类的实例对象test,调用它的getClass()方法
        Class class2 = test.getClass();
        //3、通过动态加载类forName()方法
        Class class3 = null;
        try {
            class3 = Class.forName("test.staticTest.Test");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        
        if (class1 == class2) {
            System.out.println("class1与class2比较结果:"+true);
        }
        if (class2 == class3) {
            System.out.println("class2与class3比较结果:"+true);
        }
    }

}

输出结果:

class1与class2比较结果:true
class2与class3比较结果:true

声明一下此文是本人的第一篇博客,有解释不当的地方希望大神们多多指教。。。

 

猜你喜欢

转载自blog.csdn.net/qq_42296486/article/details/84678804