您的位置:首页 > 编程语言 > Java开发

Class类的简单介绍

2017-05-10 21:44 169 查看
(虽说转载,但我(linbichengdeps)读完下面文章后个人理解:

1、Class是一个类,且每一个class(类)都有一个Class类,简单的叫法是“class的类”。

2、每个接口或类其实都是Class对象,也就是说Class是类,它的对象(实例)就是每个接口和类。

3、xxx.class 拿到的就是 class xxx这个类。通过getClassLoader()类构造器加载进虚拟机以及通过调用类加载器中的defineClass 方法自动构造出Class对象,即又是xxx这个类,又称Class实例。

4、class对应的Class对象用于表示这个类的信息。

简单理解总结:有class  xxx(){}的.java--->生成xxx.class文件--->编译的时候,在虚拟机里,由虚拟机生成一个对应的Class对象(暂且理解为虚拟机里相当于有一个xxx类),来管理对应这个类的信息,所以说Class类是每一个接口或类的类,Class的对象(实例)就是接口和类。

理解不到位之处请大侠指出,万分感谢



在java的帮助文档中,java.lang包中有一个Class类,注意这里的"C“是大写,所以这个不是表示类的声明,而是一个真正的类。在java的帮助文档中,这样定义的Class类:

public final class Class<T>extends Objectimplements Serializable, GenericDeclaration, Type, AnnotatedElement

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

  在Java中,每个class都有一个相应的Class对象。也就是说,当我们编写一个类,编译完成后,在生成的.class文件中,就会产生一个Class对象,用于表示这个类的类型信息。Class类不是我们认为创建的,是由java虚拟机,在我们生成.class文件的时候创建的,我们可以通过几种方法,获得这个Class类实例。下面介绍一下这几种方法:

(1)利用对象调用getClass()方法获取该对象的Class实例;  

(2)使用Class类的静态方法forName(),用类的名字获取一个Class实例;

(3)运用.class的方式来获取Class实例,对于基本数据类型的封装类,还可以采用.TYPE来获取相对应的基本数据类型的Class实例。下面的是一个实例

class Point{}

Point pt=new Point();

  Class c1=pt.getClass();

  System.out.println(c1.getName());

  try {//forName会抛出一个异常所以需要捕获

  Class c2=Class.forName("Point");

  System.out.println(c2.getName());

  }

  catch(Exception e){

  e.printStackTrace();

  }

  Class c3=Point.class;

  System.out.println(c3.getName());

  Class c4=int.class;

  System.out.println(c4.getName());

 Class c5=Integer.TYPE;

  System.out.println(c5.getName());

  Class c6=Integer.class;

  System.out.println(c6.getName());

//Point

//Point

//Point

//int

//int

在运行期间,如果我们要产生某个类的对象,Java虚拟机(JVM)会检查该类型的Class对象是否已被加载。如果没有被加载,JVM会根据类的名称找到.class文件并加载它。一旦某个类型的Class对象已被加载到内存,就可以用它来产生该类型的所有对象。换句话说java中的.class文件并不是所有的都会被加载到内存,只有在需要的时候才会进行加载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java class 虚拟机 对象