36、java.lang.Class类

一、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(){}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值