(Java)认识 Class 类

正确情况下如果已经有一个类,则肯定可以通过类创建对象;那么如果现在要求通过一个对象找到一个类的名称,此时就需要用到反射机制

反射操作的核心概念:一切的操作都将使用 Object完成,类、数组的引用都可以使用Object 进行接收

一、认识 Class 类

正常情况下,需要现有一个类的完整路径引入后才可以按照固定的格式产生实例化对象,但是在 Java 中也允许通过一个实例化对象找到一个类的完整信息,这就是 Class 的功能。

package org.lxh.test;
class X{
}
public class GetClassDemo {
    public static void main(String[] args) {
        X x = new X();//实例化 X 类的对象
        System.out.println(x.getClass().getName());//得到对象所在的类
    }
}

在这里插入图片描述
结果显示通过一个对象得到了对象所在的完整的名称。
这里的 getClass()方法是 Object 类的,因为任何一个类如果没有明确地声明继承自那个父类时,会默认继承 Object 类,方法的定义:

public final Class getClass()

这里也就是通过 Object 类中getClass()方法实例

这里返回值的类型是一个 Class 类,实际上此类是 Java反射的源头。
在这里插入图片描述
所有类的对象实际上都是 Class 类的实例深入理解

在 Java 中 Object 类是一切类的父类,那么所有类的对象实际上也就都是 java.lang.Class 类的实例,所以所有的对象都可以转变为 java.lang.Class 类型表示

二、Class 类的常用方法

Class 本身表示一个类的本身,通过Class可以完整地得到一个类中的完整结构,包括此类中的方法定义、属性定义等。
在这里插入图片描述

package org.lxh.test;
class X{
}
public class GetClassDemo {
    public static void main(String[] args) {
       Class<?> c1 = null;//指定泛型
       Class<?> c2 = null;//指定泛型
       Class<?> c3 = null;//指定泛型
        try{
            c1 = Class.forName("org.lxh.test.X");//最常用的形式
        }catch (ClassNotFoundException e){
            e.printStackTrace();
        }
        c2 = new X().getClass();//通过 Object 类中方法实例
        c3 = X.class;//通过类.class实例化
        System.out.println("类名称:" + c1.getName());//得到类的名称
        System.out.println("类名称:" + c2.getName());
        System.out.println("类名称:" + c3.getName());
    }
}

在这里插入图片描述
使用 forName() 方法更加具备灵活性
在这里插入图片描述

发布了613 篇原创文章 · 获赞 276 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/nanhuaibeian/article/details/104402854
今日推荐