前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java中获取class对象

Java中获取class对象

作者头像
头发还在
发布2023-10-16 11:00:30
1050
发布2023-10-16 11:00:30
举报
文章被收录于专栏:桃花源桃花源

1 为什么要获取class对象

当我们要获取类的信息及方法,利用Java中的反射机制,便于我们更加灵活的编写代码,可以在程序运行时装配代码,还可以实现动态代理。

反射机制允许程序在运行期间,获取任何一个已知名称的class内部信息。

那么获取class对象及内容信息的获取,主要有三种方式。

2 使用 getClass() 方法

2.1 创建 Person 类

代码语言:javascript
复制
package com.clazz;

public class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

2.2 创建测试类

代码语言:javascript
复制
package com.clazz;

public class Test {
    public static void main(String[] args) {
        Person person = new Person();
        Class clazz = person.getClass();
        System.out.println(clazz.getName());
    }
}

输出的结果为该class完整的包路径名及类名:

com.clazz.Person

需要注意的是: 当对同一个类,同时创建多个对象实例时,class对象实际只有一份。

代码语言:javascript
复制
Person person1 = new Person();
Person person2 = new Person();
System.out.println(person1.getClass() == person2.getClass());

运行的结果为 true。

3 使用 class 静态属性

这种方式不需要对类进行实例化,直接使用类的 class 静态属性即可获取到该类的 class 对象。

代码语言:javascript
复制
package com.clazz;

public class Test {
    public static void main(String[] args) {
        Class<Person> personClass = Person.class;
        System.out.println(personClass.getName());
    }
}

输出的结果为该class完整的包路径名及类名:

com.clazz.Person

4 使用 Class 类中的静态方法 forName()

使用这种方式获取 class 对象,需要在 forName() 方法中指定要获取 Class 对象类的全路径,即包名+类名。

代码语言:javascript
复制
package com.clazz;

public class Test {
    public static void main(String[] args) {
        try {
            Class<?> aClass = Class.forName("com.clazz.Person");
            System.out.println(aClass.getName());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

输出的结果为该class完整的包路径名及类名:

com.clazz.Person

这里有个问题需要注意,因为是我们手工指定该类的全路径信息,有可能该包未被我们引入,或者是手滑将包名、路径信息输入错误,有可能报错,所以这种方式需要向外抛出异常。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 为什么要获取class对象
  • 2 使用 getClass() 方法
    • 2.1 创建 Person 类
      • 2.2 创建测试类
      • 3 使用 class 静态属性
      • 4 使用 Class 类中的静态方法 forName()
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档