`

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

 

分享到:
评论

相关推荐

    org.apache.commons.lang jar包下载(commons-lang3-3.1.jar)

    commons-lang3.3.1.jar、Apache Commons包中的一个,包含了一些数据类型工具类,是java.lang.*的扩展。必须使用的jar包。为JRE5.0+的更好的版本所提供 Jar文件包含的类: META-INF/MANIFEST.MFMETA-INF/LICENSE....

    java.lang.OutOfMemoryError解决办法

    当应用程序加载大量类或者使用了大量的静态变量和常量时,PermGen space可能会耗尽,从而引发`java.lang.OutOfMemoryError: PermGen space`错误。对于频繁部署或重载JSP的Web应用,如Tomcat,这个问题尤为常见。 ...

    java.lang.OutOfMemoryError处理错误

    java.lang.OutOfMemoryError处理错误 java.lang.OutOfMemoryError是Java虚拟机(JVM)中的一种常见错误,发生这种错误时,JVM将无法继续运行,程序将崩溃。这种错误的出现通常是由于Jvm的内存不足或内存泄露导致的...

    java.lang.NoSuchFieldError: STRING

    解决 java.lang.NoSuchFieldError: STRING at org.jbpm.identity.hibernate.PermissionUserType. 不用jbpm的jbpm-identity.jar 用这个就好

    java.lang.UnsupportedClassVersionError Bad version number in .class file异常的解决办法

    ### java.lang.UnsupportedClassVersionError: Bad version number in .class file 异常的解决办法 #### 一、问题概述 在使用MyEclipse进行Java开发的过程中,可能会遇到`java.lang.UnsupportedClassVersionError:...

    org.apache.commons.lang jar包下载

    commons-lang3.3.1.jar、Apache Commons包中的一个,包含了一些数据类型工具类,是java.lang.*的扩展。必须使用的jar包。为JRE5.0+的更好的版本所提供 Jar文件包含的类: META-INF/MANIFEST.MFMETA-INF/LICENSE....

    java.lang.IllegalArgumentException: Class not found: org.apache.Struts2.validato

    在Java编程中,`java.lang.IllegalArgumentException` 是一个运行时异常,通常会在方法接收到非法或不合适的参数时抛出。这个错误信息 "Class not found: org.apache.struts2.validator" 指示程序在尝试加载名为 `...

    java.lang.NoSuchMethodError异常处理要点.doc

    在Java编程中,`java.lang.NoSuchMethodError`异常是一个运行时异常,通常发生在程序试图执行一个不存在的方法时。这个异常的出现通常意味着编译时和运行时的类版本不匹配,或者是在编译期间存在而运行时不存在的...

    Java.lang.reflect 包下常用的类及方法简介

    每个类在内存中都有一个唯一的`Class`实例,可以通过`Class.forName()`方法获取,或者通过`Object.getClass()`方法从对象中获取。 - `getConstructors()`:返回类的所有公共构造函数。 - `getDeclaredConstructors...

    java.lang包介绍

    `java.lang`包中最基本的类是`Object`,它是所有类层次结构的根,而`Class`类的实例则代表运行时的类。 `java.lang`包包括以下关键类: 1. **Boolean**: 表示布尔值`true`和`false`。 2. **Long, Short, Byte, ...

    java.lang.ClassNotFoundException: net.sf.ezmorph.MorpherRegistry

    总的来说,解决 "java.lang.ClassNotFoundException" 的关键在于正确管理和配置项目的依赖,确保所有必要的类都能在运行时被正确加载。通过仔细检查和调整上述步骤,你应该能成功地解决这个问题并继续进行JSON转换...

    java.lang.Class类

    Java.lang.Class类 Java.lang.Class类是Java语言中一个非常重要的类,它封装了对象和接口的运行时状态。当Java程序在运行时,Java虚拟机(JVM)会对所有对象进行类型标识,这项信息记录了每个对象所属的类。Class类...

    resolver_java_wsdl.jar

    at java.lang.ClassLoader.loadClass(ClassLoader.java:667) at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:119) at java.lang.ClassLoader.loadClass(ClassLoader.java:650) at ...

    出现Exception in threadmain java.lang.NoClassDefFoundError的各种可能情况.doc

    在Java编程中,遇到“Exception in thread 'main' java.lang.NoClassDefFoundError”是一种常见的异常情况,这通常意味着JVM在运行时未能找到指定的类定义。此错误不同于ClassNotFoundException,后者发生在尝试加载...

    java.lang包

    `Class.forName()`方法可以动态加载类。 `Object`类是所有Java类的最终超类,包含所有对象共有的属性和方法,如`equals()`比较两个对象是否相等,`hashCode()`返回对象的哈希码,`toString()`返回对象的字符串表示...

    Struts的java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource异常的解决方法

    总的来说,理解并解决"java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource"这一异常,不仅需要对Struts框架有一定了解,还需要掌握Java类加载机制以及数据库连接池的基本原理。通过正确...

    java.lang.NoClassDefFoundError org.apache.xml.serializer.TreeWalker.doc

    在jsp运行过程中,报错 java.lang.NoClassDefFoundError org.apache.xml.serializer.TreeWalker时的处理方法。

    java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource

    在Java编程中,`java.lang.ClassNotFoundException`是一个常见的运行时异常,它表示JVM尝试加载一个类时,找不到对应的.class文件。在这个特定的错误中,我们看到的是`org.apache.commons.dbcp.BasicDataSource`,这...

    java.lang.OutOfMemoryError: PermGen space及其解决方法

    - 虽然默认情况下JVM不会自动卸载类,但在某些场景下可以通过手动实现`Class.unload()`方法来清理不再使用的类。 5. **通过IDE调整**: - **MyEclipse操作步骤**: - 打开`Window`菜单,选择`Preferences`。 - ...

Global site tag (gtag.js) - Google Analytics