欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

36、java.lang.Class类

程序员文章站 2022-03-08 22:18:22
...

一、Class

 

  1. Class 类的实例表示正在运行的 Java 应用程序中的类和接口。
  2. 枚举是一种类,注释是一种接口。
  3. 每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。
  4. 基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。 
  5. Class 没有公共构造方法。
  6. Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。

二、理解

 

  1. Java程序中的各个Java类属于同一类事物,描述这类事物的java类名就是Class
  2. 对比:Person类代表人,它的实例对象就是张三李四这样一个个具体的人,
  3. Class类代表java类,它的各个实例对象又分别对应什么呢?
  4. 对应各个类在内存中的字节码,例如,Person类的字节码,ArrayList类的字节码,等等
  5. 一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,
  6. 不同的类的字节码是不同的,所以他们在内存中的内容是不同的,
  7. 这一个个空间可分别用一个个的对象来表示,这些对象显然具有相同的类型,这个类型就是Class

三、如何得到各个字节码对应的实例对象(Class类型)

 

  1. 类名.class,例如,System.class
  2. 对象.getClass(),例如,new Date().getClass()
  3. Class.forName(“类名”),例如,Class.forName(“java.util.Date”);
  4. 九个预定义Class实例对象,表示八个基本类型和 void。这些类对象由 Java 虚拟机创建,与其表示的基本类型同名
  5. 总之,只要是在源程序中出现的类型,都有各自的Class实例对象,例如,int[]  , void

 

class ClassDemo 
{
	public static void main(String[] args) throws Exception
	{
		String str = "abc";
		Class cls1 = str.getClass();
		Class cls2 = String.class;
		Class cls3 = Class.forName("java.lang.String");
		System.out.println(cls1 == cls2);//true
		System.out.println(cls2 == cls3);//true

		System.out.println(cls1.isPrimitive());//false
		System.out.println(int.class);//int
		System.out.println(String.class);//class java.lang.String

		System.out.println(int.class == Integer.class);//false
		System.out.println(Integer.class);//class java.lang.Integer
		System.out.println(int.class == Integer.TYPE);//true

		System.out.println(int.class.isPrimitive());//true
		System.out.println(int[].class);//class [I
		System.out.println(String[].class);//class [Ljava.lang.String;

		System.out.println(Float[].class);//class [Ljava.lang.Float;
		System.out.println(float[].class);//class [F
		System.out.println(long[].class);//class [J
		System.out.println(void.class);//void
	}
}

 

四、Class类常用方法

 

 

public final class Class<T> implements Serializable, GenericDeclaration, Type, AnnotatedElement
{
	//返回与带有给定字符串名的类或接口相关联的 Class 对象,className - 所需类的完全限定名。
	public static Class<?> forName(String className)
                        throws ClassNotFoundException{}

	//如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null
	public <A extends Annotation> A getAnnotation(Class<A> annotationClass){}

	//返回此元素上存在的所有注释
	public Annotation[] getAnnotations(){}

	//返回一个包含某些 Class 对象的数组,这些对象表示属于此 Class 对象所表示的类的成员的所有公共类和接口
	public Class<?>[] getClasses(){}

	//返回该类的类加载器
	public ClassLoader getClassLoader(){}

	//返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。parameterTypes 参数是 Class 对象的一个数组
	public Constructor<T> getConstructor(Class<?>... parameterTypes)
                              throws NoSuchMethodException,
                                     SecurityException{}

	//返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有公共构造方法
	public Constructor<?>[] getConstructors()
                                 throws SecurityException{}

	//返回此元素上存在的所有注释
	public Annotation[] getDeclaredAnnotations(){}

	//返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。name 参数是一个 String,用于指定所需字段的简称
	public Field getField(String name)
               throws NoSuchFieldException,
                      SecurityException{}

	//确定此对象所表示的类或接口实现的接口。
	public Class<?>[] getInterfaces(){}

	//返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法
	public Method getMethod(String name,
                        Class<?>... parameterTypes)
                 throws NoSuchMethodException,
                        SecurityException{}

	//返回一个包含某些 Method 对象的数组
	public Method[] getMethods()
                    throws SecurityException{}

	//以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
	public String getName(){}

	//获取此类的包
	public Package getPackage(){}

	//查找具有给定名称的资源
	public InputStream getResourceAsStream(String name){}

	//返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class
	public Class<? super T> getSuperclass(){}

	//如果此 Class 对象表示一个注释类型则返回 true
	public boolean isAnnotation(){}

	//当且仅当该类声明为源代码中的枚举时返回 true
	public boolean isEnum(){}

	//判定指定的 Object 是否与此 Class 所表示的对象赋值兼容。此方法是 Java 语言 instanceof 运算符的动态等效方法。
	public boolean isInstance(Object obj){}

	public boolean isInterface(){}

	public boolean isArray(){}

	//判定指定的 Class 对象是否表示一个基本类型
	public boolean isPrimitive(){}

	//创建此 Class 对象所表示的类的一个新实例。如同用一个带有一个空参数列表的 new 表达式实例化该类
	public T newInstance()
              throws InstantiationException,
                     IllegalAccessException{}

	//将对象转换为字符串。字符串的表示形式为字符串 "class" 或 "interface" 后面紧跟一个空格,然后是该类的完全限定名,它具有 getName 返回的那种格式
	public String toString(){}
}

 

相关标签: Class