`

查看class文件信息

    博客分类:
  • jdk
阅读更多
看了第6章的java class文件这一部分,我觉得对class文件有进一步的了解。于是想作一点笔记,以备以后查时方便。
      这章的一个例子虽然简单,但是我觉的很有一定代表性。例子如下:

class Act {
   public static void doMathForever(int m) {
      int i = 0;
     int n=4>3?1:0;
        for (;;) {
           i += 1;
            i *= 2;
       }
    }
}



我用javap -verbose Act查看,代码如下:(红色为自己加上的注解)
Compiled from "Act.java"    
因为编译原文件不一定必须与java语言相关,可以使用其他语言来编写程序,然后将其编译为class文件,所以这里要写上Act.java而不是Act. 呵呵,想来以前为什么javac 来编译源文件时一定要加.java,而java 执行时就不需要加.java了,当时就是搞不懂,现在明白了。
class Act extends java.lang.Object
  SourceFile: "Act.java"
SourceFile属性,它提供了产生class文件的源文件的名称,它是一个可选的项,为什么说它是可选项的,因为class可以自己用UE等工具写。
  minor version: 0
  major version: 49
版本号:我用的是5.0的,出来的major version 是49,书上说1.0或1.2是45,1.4我想可能是48 吧。呵呵,还没有试过。
  Constant pool:
这个是常量池,刚看书的时候我还以为常量池放的一定是常量。错。
常量池就是该类型所用常量的一个有序集合,包括直接常量(String,integer,floating  point常量)和对其他类型、字段和方法的符号引用。
const #1 = Method #3.#12; //  java/lang/Object."<init>":()V
因为Constant pool#0是不用的,所以只能从#1开始,但不知为什么第一个是Method而不是class,我现在还不明白。
const #2 = class #13; //  Act
CONSTANT_Class是对一个类或接口的符号引用。这个是指向#13
const #3 = class #14; //  java/lang/Object
const #4 = Asciz <init>;
这个Asciz应该表示是CONSTANT_Utf8吧,因为C ONSTANT_Utf8可以是存储四种基本信息类型:文字字符串、被定义的类和接口描述、对其他类或接口的符号引用以及属性相关的字符串。
<init>是实例的初始化方法,是实例调用方法前必须要<init>的,
<clinit>是类的初始化方法。
const #5 = Asciz ()V;
此<init>的描述符,()V表示<init>没有带参数,返回的是void型的。
书上介绍:
()I  int getSize() 
() Ljava/lang/String      String toString()
const #6 = Asciz Code;
Code在所有不是抽象或者本地方法的method_info信息中,都存在一个Code_attribute表。
但是我试一下在抽象的方法中同样也有code的啊,不懂中。
const #7 = Asciz LineNumberTable;
LineNumberTable属性建立了方法字节码流偏移量和源代码行号之间的映射关系。关于这一点,我在下面详细谈到。
const #8 = Asciz doMathForever;
#8 字段名和方法名以简单名称出现在常量池的入口中,存的时候存简单名字,调用的时候要加 上全限定名
const #9 = Asciz (I)V;
doMathForover的描述符,参数是int类型,返回值是void类型
const #10 = Asciz SourceFile;
const #11 = Asciz Act.java;
const #12 = NameAndType #4:#5;//  "<init>":()V
NameAndType指向字段或者方法的符号引用的一部分。为什么没有指向#8,#9呢?不懂中。
const #13 = Asciz Act;
const #14 = Asciz java/lang/Object;
#13,#14 CONSTANT_Utf8_info 表的入口,容纳了 类/接口全限定名等信息。用“/”代替“.”。在class文件的this_class字段是对常量池的一个引用,指向了常量池中CONSTANT_ClASS_info表,该表由两项组成,即标签和name_index。在这个例子里,this_class的值为2,也就是常量池里的第二项,这项标签是class,name_index是13,即指向常量池的第13项。第13项里就有当前类的全限定名。
{
Act();
  Code:
   Stack=1, Locals=1, Args_size=1
需要的栈为1个,只是this的存取;本地变量为1个,也是this,方法的参数是1个,也是this传入。
   0: aload_0
从局部变量0中装载引用类型。
   1: invokespecial #1; //Method java/lang/Object."<init>":()V
调用Object的<init>方法,因为每个类都是继承Object,所以实例时都要调用Object的<init>方法。
   4: return
  LineNumberTable:
   line 1: 0

public static void doMathForever(int);
  Code:
   Stack=2, Locals=3, Args_size=1
   0: iconst_0  将i 压入栈
   1: istore_1  放i
   2: iconst_1 同上
   3: istore_2
   4: iinc 1, 1  i++
  7   iload_1 从局部变量1中装载int类型值。
   8: iconst_2
   9: imul
   10: istore_1
   11: goto 4
  LineNumberTable:
   line 3: 0  源代码第3行对应Code中的0偏移量。
   line 4: 2
   line 6: 4
   line 7: 7
   line 8: 11

}
http://www.blogjava.net/baogenfly/articles/78557.html
分享到:
评论

相关推荐

    class文件查看器

    class文件查看器,可以查看class文件,转译出代码.方便大家使用.(java工具类)简单的工具没这么多说明,说这些只是为了凑字数啦啦啦啦

    java class文件查看工具

    - **常量池查看**:查看和解析Class文件中的字符串、类名、方法名等常量信息。 - **类和方法信息**:展示类的访问权限、继承关系、实现的接口,以及方法的参数、返回类型等详细信息。 - **属性信息**:如方法的...

    如何在eclipse中查看.class文件的步骤

    在Java开发过程中,有时我们需要查看已编译的`.class`文件来理解代码的执行逻辑,尤其是在遇到异常或问题时,查看字节码有助于排查问题。Eclipse作为一个强大的Java集成开发环境,本身并不直接支持查看`.class`文件...

    Eclipse查看class文件

    在IT行业中,开发人员经常需要对编译后的Java类文件(class文件)进行反编译和查看,以理解代码的内部工作原理或者调试问题。Eclipse作为一款强大的Java集成开发环境,提供了这样的功能,但默认情况下并不直接支持...

    class 文件查看工具 jdgui

    这款工具对于Java开发人员来说尤其有用,因为它能够帮助他们快速地查看和理解已编译的`.class`文件中的源代码,这对于调试、学习和优化代码非常有帮助。 **一、Java字节码基础知识** 在深入探讨JDGUI之前,我们...

    class文件查看工具jd-gui纯绿色小工具

    《JD-GUI:便捷的Class文件查看神器》 在Java编程世界中,了解和调试类文件(.class)是开发者日常工作中不可或缺的一部分。JD-GUI,这个小巧却强大的工具,正是为了解决这一需求而生。它是一款纯绿色的软件,无需...

    查看CLass文件的一个小工具

    标题中的“查看Class文件的一个小工具”指的是一个专门用于查看Java字节码文件(.class文件)的应用程序。这类工具通常被Java开发者用来理解和调试已编译的Java类。.class文件是Java源代码经过Java编译器编译后的...

    eclipse查看jar包class文件源码插件,jar包反编译查看工具

    Eclipse作为一款强大的Java集成开发环境,提供了多种方式来帮助开发者查看.jar文件中的.class文件源码。本文将详细介绍如何在Eclipse中使用插件实现这一功能,以及一种名为JD的jar包反编译查看工具。 首先,我们来...

    class文件查看器.rar

    例如,当我们遇到异常或者错误,但日志信息不足以定位问题时,可以通过查看对应class文件的字节码来查找原因。在进行代码优化时,它可以展示方法的执行流程,帮助我们找出瓶颈。对于学习Java虚拟机原理和Java字节码...

    class文件查看工具

    在Java编程领域,我们常常会遇到需要查看或分析已编译的.class文件的情况。这些文件是Java源代码经过编译器处理后的产物,包含了程序的字节码和元数据。对于开发者来说,了解.class文件的内部结构有助于调试、优化和...

    java class文件查看器

    Java Class文件查看器是一款专为Java开发者设计的实用工具,它允许用户查看和分析.class文件,这是Java编译器将源代码编译后的二进制形式。了解如何使用这类工具对于理解和调试Java应用程序至关重要,尤其是在处理已...

    在myeclipse中查看class文件 插件 jadnt158

    查看java的class文件,在网络上搜索了一下资料,这样就很方便的去查看别人的代码 在myeclipse中查看class文件,就像查看普通的java源文件一样,通过以下步骤可以做到: 安装设置步骤:1. 下载jadnt158.zip 。 2. ...

    查看class文件工具

    "查看class文件工具"就是为了解决这一需求而存在的。 `jd-gui`是一款开源的Java反编译工具,它允许开发者直观地查看并分析`.class`文件的内容。这个工具由JetBrains公司开发,以其高效和易用性著称。通过`jd-gui`,...

    class文件编译器.zip

    这个压缩包`class文件编译器.zip`很可能包含了关于如何将Java源代码编译成`.class`文件的相关工具和信息。`ReadMe.txt`可能是提供编译过程的说明或者编译器使用的指南。 1. **Java源代码与Class文件**: Java源...

    修改jar包中的class文件

    2. **找到并修改class文件**:在解压后的目录中找到需要修改的class文件,使用反编译工具(如jd-gui或jd-core-java)查看其源代码,理解并进行必要的修改。修改完成后,需要使用Java编译器(javac)重新编译修改过的...

    java class文件反编译

    2、可处理多个*.class文件,可以处理文件夹内的所有文件,甚至可以处理*.jar文件; 3、带有多页面文本编辑器,也可集成在资源管理器中,随时点击右键都可进行操作; 4、支持java语法的高亮显示; 使用说明: ======...

    电脑java class文件查看与修改工具

    本篇文章将详细讲解如何使用指定的"电脑java class文件查看与修改工具"来查看和修改这些文件。 首先,我们要了解的是`jd-gui查看.exe`。这是一个名为JD-GUI的开源工具,它允许开发者直观地查看Java字节码(.class...

    eclipse中查看class文件

    在Java开发过程中,Eclipse作为一款强大的集成开发环境(IDE),不仅支持源代码编写,还提供了查看和理解已编译的Class文件的功能。这对于开发者调试、学习和理解已部署的二进制代码非常有帮助。以下将详细介绍如何在...

    Class文件转JAVA

    轻松方便的把class文件转化为java文件

Global site tag (gtag.js) - Google Analytics