基本介绍

  1. Class也是类,因此也继承Object类
  2. Class类对象不是new出来的,而是系统创建的
  3. 对于某个类的Class类对象,在内存中只有一份,因为类只加载一次
  4. 每个类的实例都会记得自己是由哪个Class 实例所生成
  5. 通过Class可以完整地得到一个类的完整结构,通过一系列API
  6. Class对象是存放在堆的
  7. 类的字节码二进制数据,是放在方法区的,有的地方称为类的元数据(包括方法代码, 变量名,方法名,访问权限等等)https://www.zhihu.com/question/38496907

Class类的常用方法

package top.ltyzqhh.Class;

import top.ltyzqhh.Car;

import java.lang.reflect.Field;

public class Class01 {
    public static void main(String[] args) throws Exception{

        String classAllPath="top.ltyzqhh.Car";
//获取到Car类对应的Class对象,还没有实例化
Class cls = Class.forName(classAllPath);
//得到包名
System.out.println(cls.getPackage().getName());//包名
//得到全类名
System.out.println(cls.getName());
//通过cls创建对象实例
//Car o = (Car) cls.newInstance();jdk9淘汰了
Car o = (Car)cls.getDeclaredConstructor().newInstance();
        System.out.println(o);//o.toString()
        //通过反射获取属性(公有)
Field brand = cls.getField("brand");
        System.out.println(brand.get(o));
//通过反射给属性赋值
brand.set(o,"奔驰");
        System.out.println(brand.get(o));
//遍历得到所有字段属性
Field[] fields = cls.getFields();
        for (Field f:fields) {
            System.out.println(f.getName());
        }

    }
}