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
}
}