一篇文章带你搞定 Java 中的 Class 类

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

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

一、认识 Class 类

在这里插入图片描述
从 Source 源代码阶段到 Runtime 运行阶段,需要借助类加载器将其加载进内存

正常情况下,需要先有一个类的完整路径引入后才可以按照固定的格式产生实例化对象,但是在 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();
        }
        X x = new X();//实例化对象
        c2 = x.getClass();//通过 Object 类中方法实例
        c3 = X.class;//通过类.class实例化
        System.out.println("类名称:" + c1.getName());//得到类的名称
        System.out.println("类名称:" + c2.getName());
        System.out.println("类名称:" + c3.getName());
    }
}

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

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南淮北安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值