创建Class对象的几种方式

准备工作

  • 创建Student类及其父类Person
package com.xinay.annotation.reflex;

/**
 * @Author xin
 * @date 2021/5/30 16:39
 * @Description  得到class类对象的几种方式
 */
public class ReflectionTest {
    public static void main(String[] args) throws Exception{
    }
}
class Student extends Person{
    public Student() {
    }
    public Student(String name) {
        this.setName(name);
    }
}
class Person{
    private String name;
    public Person() {
    }
    public Person(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                '}';
    }
}

1. 通过对象获取 对象.class

        Person person = new Student("张三");
        System.out.println("这个人是==>"+person.getName());
        Class c1 = person.getClass();
        System.out.println(c1.hashCode());
  • 输出结果
这个人是==>张三
548308290

2. 类全路径方式获得 Class.forName("类全路径");

        Class c2 = Class.forName("com.xinay.annotation.reflex.Student");
        System.out.println(c2.hashCode());
  • 输出结果
这个人是==>张三
1475668637
1475668637

3. 通过类名获取

        Class<Student> c3 = Student.class;
        System.out.println(c3.hashCode());
  • 输出结果
这个人是==>张三
1166557977
1166557977
1166557977

4. 基本内置类型的包装类都有一个Type属性

        Class<Integer> type = Integer.TYPE;
        System.out.println(type);
  • 输出结果
int
  • TYPE属性值也是通过反射CLass.forName()方式获取到的
    /**
     * The {@code Class} instance representing the primitive type
     * {@code int}.
     *
     * @since   JDK1.1
     */
    public static final Class<Integer>  TYPE = (Class<Integer>) Class.getPrimitiveClass("int");

5. 通过类加载器直接加载类,获取class

        Class c4 = ReflectionTest.class.getClassLoader().loadClass("com.xinay.annotation.reflex.Student");

6. 获取父类Class对象

        Class c5 = c1.getSuperclass();
        System.out.println(c5);
  • 输出结果
  class com.xinay.annotation.reflex.Person
posted @   -Lucas  阅读(614)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示