一、Class
- Class 类的实例表示正在运行的 Java 应用程序中的类和接口。
- 枚举是一种类,注释是一种接口。
- 每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。
- 基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。
- Class 没有公共构造方法。
- Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。
二、理解
- Java程序中的各个Java类属于同一类事物,描述这类事物的java类名就是Class
- 对比:Person类代表人,它的实例对象就是张三李四这样一个个具体的人,
- Class类代表java类,它的各个实例对象又分别对应什么呢?
- 对应各个类在内存中的字节码,例如,Person类的字节码,ArrayList类的字节码,等等
- 一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,
- 不同的类的字节码是不同的,所以他们在内存中的内容是不同的,
- 这一个个空间可分别用一个个的对象来表示,这些对象显然具有相同的类型,这个类型就是Class
三、如何得到各个字节码对应的实例对象(Class类型)
- 类名.class,例如,System.class
- 对象.getClass(),例如,new Date().getClass()
- Class.forName(“类名”),例如,Class.forName(“java.util.Date”);
- 九个预定义Class实例对象,表示八个基本类型和 void。这些类对象由 Java 虚拟机创建,与其表示的基本类型同名
- 总之,只要是在源程序中出现的类型,都有各自的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(){} }
相关推荐
commons-lang3.3.1.jar、Apache Commons包中的一个,包含了一些数据类型工具类,是java.lang.*的扩展。必须使用的jar包。为JRE5.0+的更好的版本所提供 Jar文件包含的类: META-INF/MANIFEST.MFMETA-INF/LICENSE....
当应用程序加载大量类或者使用了大量的静态变量和常量时,PermGen space可能会耗尽,从而引发`java.lang.OutOfMemoryError: PermGen space`错误。对于频繁部署或重载JSP的Web应用,如Tomcat,这个问题尤为常见。 ...
java.lang.OutOfMemoryError处理错误 java.lang.OutOfMemoryError是Java虚拟机(JVM)中的一种常见错误,发生这种错误时,JVM将无法继续运行,程序将崩溃。这种错误的出现通常是由于Jvm的内存不足或内存泄露导致的...
解决 java.lang.NoSuchFieldError: STRING at org.jbpm.identity.hibernate.PermissionUserType. 不用jbpm的jbpm-identity.jar 用这个就好
### java.lang.UnsupportedClassVersionError: Bad version number in .class file 异常的解决办法 #### 一、问题概述 在使用MyEclipse进行Java开发的过程中,可能会遇到`java.lang.UnsupportedClassVersionError:...
commons-lang3.3.1.jar、Apache Commons包中的一个,包含了一些数据类型工具类,是java.lang.*的扩展。必须使用的jar包。为JRE5.0+的更好的版本所提供 Jar文件包含的类: META-INF/MANIFEST.MFMETA-INF/LICENSE....
在Java编程中,`java.lang.IllegalArgumentException` 是一个运行时异常,通常会在方法接收到非法或不合适的参数时抛出。这个错误信息 "Class not found: org.apache.struts2.validator" 指示程序在尝试加载名为 `...
在Java编程中,`java.lang.NoSuchMethodError`异常是一个运行时异常,通常发生在程序试图执行一个不存在的方法时。这个异常的出现通常意味着编译时和运行时的类版本不匹配,或者是在编译期间存在而运行时不存在的...
每个类在内存中都有一个唯一的`Class`实例,可以通过`Class.forName()`方法获取,或者通过`Object.getClass()`方法从对象中获取。 - `getConstructors()`:返回类的所有公共构造函数。 - `getDeclaredConstructors...
`java.lang`包中最基本的类是`Object`,它是所有类层次结构的根,而`Class`类的实例则代表运行时的类。 `java.lang`包包括以下关键类: 1. **Boolean**: 表示布尔值`true`和`false`。 2. **Long, Short, Byte, ...
总的来说,解决 "java.lang.ClassNotFoundException" 的关键在于正确管理和配置项目的依赖,确保所有必要的类都能在运行时被正确加载。通过仔细检查和调整上述步骤,你应该能成功地解决这个问题并继续进行JSON转换...
Java.lang.Class类 Java.lang.Class类是Java语言中一个非常重要的类,它封装了对象和接口的运行时状态。当Java程序在运行时,Java虚拟机(JVM)会对所有对象进行类型标识,这项信息记录了每个对象所属的类。Class类...
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 ...
在Java编程中,遇到“Exception in thread 'main' java.lang.NoClassDefFoundError”是一种常见的异常情况,这通常意味着JVM在运行时未能找到指定的类定义。此错误不同于ClassNotFoundException,后者发生在尝试加载...
`Class.forName()`方法可以动态加载类。 `Object`类是所有Java类的最终超类,包含所有对象共有的属性和方法,如`equals()`比较两个对象是否相等,`hashCode()`返回对象的哈希码,`toString()`返回对象的字符串表示...
总的来说,理解并解决"java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource"这一异常,不仅需要对Struts框架有一定了解,还需要掌握Java类加载机制以及数据库连接池的基本原理。通过正确...
在jsp运行过程中,报错 java.lang.NoClassDefFoundError org.apache.xml.serializer.TreeWalker时的处理方法。
在Java编程中,`java.lang.ClassNotFoundException`是一个常见的运行时异常,它表示JVM尝试加载一个类时,找不到对应的.class文件。在这个特定的错误中,我们看到的是`org.apache.commons.dbcp.BasicDataSource`,这...
- 虽然默认情况下JVM不会自动卸载类,但在某些场景下可以通过手动实现`Class.unload()`方法来清理不再使用的类。 5. **通过IDE调整**: - **MyEclipse操作步骤**: - 打开`Window`菜单,选择`Preferences`。 - ...