Class 类

                      Class 类

在java中,每个class都有一个相应的Class对象。也就是说,当我们编写一个类,编译完成之后,在生成的.class文件中,就会产生一个Class对象,用于表示这个类的类型信息。
获取Class实例的三种方式:
  1.利用对象调用getClass()方法获取该对象的Class实例;这是知道对象名。
  2.使用Class类的静态方法forName(),用类的名字获取一个Class实例;这是知道字符串。
  3.运用.class的方式来获取Class实例,对于基本数据类型的封装类,还可以采用.TYPE来获取相应的基本数据类型的Class实例。这是知道类名。

 

 

Class代表一类事物

Java程序中的各个java类属于同一类事物,描述这类事物的java类名就是Class。

对比提问:众多的人一个什么类来表示?众多的java类用什么类来表示?

人--> Person,属性是:年龄,身高,体重等

java 类--> Class,属性是:类名,包,构造函数,方法,字段,修饰符等

对比提问:Person类代表人,它的实例对象就是具体的某一个人,例如张山,里司这样一个个具体的人,Class类代表Java类,它的各个实例对象又分别对应什么呢?

1.        对应各个类在内存中的字节码,例如:Person类的字节码,ArrayList类的字节等等。

2.        一个类被加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,不同的类的字节码是不一样的,所以它们在内存中的内容是不同的。这一个个的空间可以分别用一个个的对象来表示,这些对象显然具有相同类型,这个类型是什么呢?

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

1.        类名.class 例如:System.class。每一个类都有一个静态的字段class。

2.        对象.getClasss() 例如:new Date().getClass()每一个类都有一个静态方法getClass()

3.        Class.forName(“类名”) 例如:Class.forName(“java.util.Date”)//做反射的时候通常用这个

九个预定义的基本实例对象。

Boolean.TYPE,Character.TYPE…Void.TYPE。

数组类型的Class实例对象:Class.isArray();

总之,只要在源程序中出现的类型,都有各自的Class实例对象,例如:int[],void…

代码
public class ClassTest {
public static void main(String[] args) {
String str1
= "abc";
Class cls1
= str1.getClass();// 知道对象名
Class cls2 = String.class;// 知道类名
Class cls3 = null;
try {
cls3
= Class.forName("java.lang.String");// 知道字符串
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println(cls1
== cls2);// true
System.out.println(cls1 == cls3);// true

System.out.println(cls1.isPrimitive());
// 判断是否是数据类型的字节码(原始类型)false
System.out.println(int.class.isPrimitive());// true
System.out.println(int.class == Integer.class);// false
System.out.println(int.class == Integer.TYPE);// Integer中的常量TYPE代表包装类型所包装的基本数据类型的字节码// true
System.out.println(int[].class.isPrimitive());// false
System.out.println(int[].class.isArray());// true
}
}

 

 

 

 

 

 

posted @ 2010-12-22 14:11  meng72ndsc  阅读(244)  评论(0编辑  收藏  举报