zoukankan      html  css  js  c++  java
  • java.lang.Class

         刚接触反射机制的时候,记得有这么句话,叫做所有的类都是Class的实例,这个Class是Java.lang.Class。当时很不理解,我能明白    Student student=new Student( ), student是Student类的实例,怎么会Student类是Class类的实例呢?
         今天看书的时候,读到了JVM的内容,我才恍然大悟。
         首先,从JDK官方文档找到了Class的一些介绍:
         

    Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本的 Java 类型(booleanbytecharshortintlongfloat 和 double)和关键字 void也表示为 Class 对象。

    Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。

    以下示例使用 Class 对象来显示对象的类名:

         void printClassName(Object obj) {
             System.out.println("The class of " + obj +
                                " is " + obj.getClass().getName());
         }
     
    

    还可以使用一个类字面值(JLS Section 15.8.2)来获取指定类型(或 void)的 Class 对象。例如:

         System.out.println("The name of class Foo is: "+Foo.class.getName());
              这些内容明确了那句话,所有类都是Class类的实例,当然,要加上正在运行这句话。
     
         接下来,讲讲我的学习心得:
         1:JVM
         JVM就是java虚拟机,实现了Java跨平台的功能。我们能体会到的实现过程是 :  .java -> .class -> JVM 。 我们写好的Java程序会保存在一个.java结尾的文件中,然后经过编译器编译成字节码文件,也就是以.class结尾的文件,接下来会有classLoader 类加载器 把这个字节码文件加载到JVM上。
         不多解释JVM是怎么和实体机进行工作的,在这里就把JVM看成实体机,上面的过程就是我们的java语言转到JVM能够理解的字节码语言的过程。那么 在JVM上存的当然不是我们的.java文件 java 类 了,存的是.class  好多.class。
         2:Java类
         假设有Student类,面向对象编程嘛,就说有学生这个群体,好多学生,我们可以把他们写成一个类,Student。然后有个学生,比如说叫ZhangSan,ZhangSan是具体的对象,所以我们可以这样做 
              Student ZhangSan=new Student( ); 
         这个很好理解吧,ZhangSan是Student类的实例。
         3:
         把上面二者结合来看,学生很多,我们可以抽象成Student类,但是在JVM中,.class也很多,我们怎么办?当然 我们什么都不用干,因为已经有了java.lang.Class,我个人理解,这个Class类就是.class的抽象。从Java文件的角度考虑,你写的每一个类 不外乎就是方法 属性等这些东西,既然有共性,就是可以抽象的。
         ZhangSan是Student类的实例,是广义的Student的具体实现。那JVM有了好多的class,Student就是广义的Class的具体实现。
         
         从其他博文中我看到了这两句话
          反射机制的作用:
                       1,反编译:.class-->.java
                       2,通过反射机制访问java对象的属性,方法,构造方法等;
         我觉得理解了Class 类的实例表示正在运行的 Java 应用程序中的类和接口( Instances of the class Class represent classes and interfaces in a running Java application)这句话,反射机制就不是那么难理解了。
      
     
         
  • 相关阅读:
    【Demo 0035】获取窗体状态
    【Demo 0030】获取其他进程窗体信息(防SPY++)
    【Demo 0034】窗体支持文件拖拽
    【Demo 0036】Window层窗体
    【Demo 0032】遍历子窗体
    二维数组定义以及动态分配空间 (转)
    Visual Studio 2008 环境变量的配置(dll加载方式) [转]
    修改MFC标题栏上的图标
    VC环境下的头文件包含(转)
    VC++单选按钮控件(Ridio Button)的使用(转载)
  • 原文地址:https://www.cnblogs.com/zhao307/p/5405491.html
Copyright © 2011-2022 走看看