反射基础Class类

来源:互联网 发布:类似字体管家的软件 编辑:程序博客网 时间:2024/05/05 01:04

Class 类的实例表示正在运行的 Java 应用程序中的类和接口。Class是程序中各个java类和接口的统称。
众多的人-->Person,众多的java对象-->Class

 

每个类被加载后, 系统就会为该类生成一个对应的 Class 对象, 通过该 Class 对象就可以访问到 JVM 中的这个类。


Java 程序中获得Class 对象通常有如下三种方式:
1.使用 Class 的 forName() 静态方法
2.调用某个类的 class 属性 (无须调用方法, 性能更好)
3.调用某个对象的 getClass() 方法

 

 

一旦获取了某个类的 Class 对象之后, 程序就可以调用 Class 对象的方法来获得该对象和该类的真实信息了


Class类常见的方法

newInstance() :创建此 Class 对象所表示的类的一个新实例。
isPrimitive() :判定指定的 Class 对象是否表示一个基本类型。
isArray() :判定此 Class 对象是否表示一个数组类。
getPackage() :获取此类的包。
getName() :以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。

getInterfaces() :确定此对象所表示的类或接口实现的接口。
forName(String className) :返回与带有给定字符串名的类或接口相关联的 Class 对象

java中9个预定义的Class实例对象
基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)

和关键字 void 也表示为 Class 对象。

 

public class Test {
 public static void main(String[] args) throws Exception{
  /**
   * Class代表一份字节码,一个对象是该类字节码产生的一个实例
   * 使用new关键字:类的装载,连接,初始化一次性完成了。
   * 使用Class.forName:默认的情况下是类装载、链接和初始化的,
   * 相当于Class.forName(className, true, currentLoader)(其中的true和false是管是否初始化的)。
   * 如果是true的,那么装载、连接、并初始化;如果false,仅仅装载和连接。
   */
  String s = "";
  Class cls1 = s.getClass();//方式1
  Class cls2 = String.class;//方式2
  Class cls3 = Class.forName("java.lang.String");//方式3
  System.out.println(cls1==cls2);//true
  System.out.println(cls2==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(Integer.TYPE==int.class);//true
  System.out.println(int[].class.isPrimitive());//false
  System.out.println(int[].class.isArray());//true
 }
}

原创粉丝点击