Java的类文件

作者: Arvin Chen 分类: Java 来源: Break易站(www.breakyizhan.com)
  •   Java 基础语法

    Java的类文件是包含Java字节码和具有文件.class扩展,可以通过执行JVM。作为编译成功的结果,Java类文件由来自.java文件的Java编译器创建。我们知道一个Java编程语言源文件(或者我们可以说.java文件)可能包含一个类或多个类。所以如果一个.java文件有多个类,那么每个类将编译成一个单独的类文件。

    例如:在系统上将 下面的代码保存为Test.java。

    // Compiling this Java program would
    // result in multiple class files.
     
    class Sample
    {
     
    }
     
    // Class Declaration
    class Student
    {
     
    }
    // Class Declaration
    class Test
    {
           public static void main(String[] args)  
           {
               System.out.println("Class File Structure");
           }
    }
    

    编译:

    javac Test.java

    编译完成后,相应文件夹中将会有3个类文件,名为:

    • Sample.class
    • Student.class
    • Test.class

    一个单一的类文件结构包含了描述一个类文件属性。

    类文件结构的表示

    ClassFile 
    {
         magic_number;
         minor_version;
         major_version;
         constant_pool_count;
         constant_pool[];
         access_flags;
         this_class;
         super_class;
         interfaces_count;
         interfaces[];
         fields_count;
         fields[];
         methods_count;
         methods[];
         attributes_count;
         attributes[];
    }

    类文件的元素如下所示:

    magic_number:类文件的前4个字节被称为magic_number。这是JVM用来识别.class文件是否由有效编译器生成的预定义值。预定义值将采用十六进制形式,即0xCAFEBABE。
    现在让我们看看当JVM找不到有效的幻数时会发生什么。假设我们有一个名为Sample.java的.java文件,如下所示,然后按照系统上的分步过程进行操作。

    //类声明
    class Sample
    {
       public static void main(String [] args)
       {
           System.out.println(“Magic Number”);           
       }
    }
    

    第1步: 使用javac Sample.java编译
    第2步:现在打开Sample.class文件。它看起来像下面。

    Java的类文件

    第3步:现在从文件开始擦除此Sample.class文件中的至少一个符号并保存。
    第4步:现在尝试使用java示例命令运行此命令,并看到魔术,即您将得到运行时异常(请参阅下图中突出显示的文本):
    Java的类文件

    注意:这可能会有所不同,具体取决于您删除.class文件数据的多少。
    minor_version&major_version:这两者一起表示.class文件版本。JVM将使用这些版本来确定哪个版本的编译器生成当前的.class文件。我们将类文件的版本表示为Mm,其中M代表major_version,m代表minor_version
    注意:较低版本的编译器生成的.class文件可以由高版本的JVM执行,但较高版本的编译器生成的.class文件不能由较低版本的JVM执行。如果我们尝试执行,我们将得到运行时异常。

    此演示适用于Windows操作系统,如下所示:

    步骤1:打开命令提示符窗口,尝试使用以下命令分别检查Java编译器版本和JVM版本(图像中突出显示的文本是命令)
    1.8版本的输出将为:
    Java的类文件

    Java的类文件

    步骤2:现在检查另一个可能比已安装的版本更高或更低的版本。下载链接。
    并将其安装到您的PC或便携式计算机上并记下安装地址。
    步骤3:打开第二个命令提示符窗口,并设置第二步中安装的已安装jdk的bin文件夹路径。并检查Java编译器版本的广告JVM版本。
    Java的类文件
    第4步:现在在第1个命令提示符下编译任何有效的.java文件。例如:见上面的Sample.java文件。编译为:
    Java的类文件
    步骤5:现在在第二个命令提示符窗口中尝试运行上面编译的代码类文件,看看会发生什么。有一个运行时异常,我已经在下图中突出显示。

    Java的类文件

    注意:内部jdk 1.5版本意味着49.0和1.6意味着50.0和1.7意味着51.0等等类文件版本,其中小数点前的数字代表major_version,小数点后的数字代表minor_version。

    1. constant_pool_count:它表示常量池中常量的数量(编译Java文件时,所有对变量和方法的引用都作为符号引用存储在类的常量池中)。
    2. constant_pool []:它表示关于常量池文件中存在的常量的信息。
    3. access_flags:它提供了关于声明给类文件的修饰符的信息。
    4. this_class:它表示类文件的完全限定名称。
    5. super_class:它表示当前类的直接超类的完全限定名。考虑上面的Sample.java文件。当我们编译它时,我们可以说this_class是Sample类,super_class是Object类。
    6. interface_count:它返回当前类文件实现的接口数量。
    7. interface []:它返回由当前类文件实现的接口信息。
    8. fields_count:它表示当前类文件中存在的字段数量(静态变量)。
    9. fields[]:表示当前类文件中存在的字段(静态变量)信息。
    10. method_count:它表示当前类文件中存在的方法的数量。
    11. method[]:它返回当前类文件中存在的所有方法的信息。
    12. attributes_count:它返回当前类文件中存在的属性数量(实例变量)。
    13. attributes []:它提供有关当前类文件中存在的所有属性的信息。
  •   Java 基础语法
  •   本文标题:Java的类文件 - Break易站
    转载请保留页面地址:https://www.breakyizhan.com/java/3711.html
      微信返利机器人
      免费:淘宝,京东,拼多多优惠券
      腾讯,爱奇艺,优酷的VIP视频免费解析,免费看
      即刻扫描二维码,添加微信机器人!

    发表笔记

    电子邮件地址不会被公开。 必填项已用*标注