首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java类文件的结构

总览如下: 魔数与Class文件的版本 1.魔数0XCAFEBABE 2.次版本号和主版本号 常量池 1.类和接口的全限定名 2.字段的名称和描述符 3.方法的名称和描述符 访问标志 1.类的访问信息...因为Java不支持多重继承,所以父类索引只有一个,除了java.lang.Object外,所有Java类都有父类,因此除了java.lang.Object,所有java类的父类索引都不为0。...预定义的属性如下: 属性名称 使用位置 含义 Code 方法表 Java代码编译成的字节码指令 ConstantValue 字段表 final关键字定义的常量值 Deprecated 类、方法表、字段表...InnerClasses 类文件 内部类列表 LineNumberTable Code属性 Java源码的行号和字节码指令的对应关系 LocalVariableTable Code属性 方法局部变量描述...SourceFile 类文件 记录源文件名称 SourceDebugExtension 类文件 JDK1.6新增,用于存储额外的调试信息。

68630

Java的String类为什么要设成immutable类型

答案一:         最流行的Java面试题之一就是:什么是不可变对象(immutable object),不可变对象有什么好处,在什么情况下应该用,或者更具体一些,Java的String类为什么要设成...不可变对象,顾名思义就是创建后不可以改变的对象,典型的例子就是Java中的String类。...或者,你可以用 jd-gui 之类的工具查看一下编译后的class文件. 2....安全性         String被许多的Java类(库)用来当做参数,例如 网络连接地址URL,文件路径path,还有反射机制所需要的String参数等, 假若String不是固定不变的,将会引起各种安全隐患...事实上,这也是Java面试中的许多 "为什么" 的答案。 答案三:String类不可变性的好处         String是所有语言中最常用的一个类。

35740
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    java类的class文件字节码解析

    ACC_PUBLIC, ACC_SUPER 2.2.4 类索引、父类索引和接口索引集合 在class文件中,将用这三项来标识类的继承关系。...索引项 长度 说明 this_class 2个字节 类索引,用于确定这个类的全限定名 super_class 2个字节 父类索引,用于确定这个类父类的全限定名(Java语言不允许多重继承,故父类索引只有一个...除了java.lang.Object类之外所有类都有父类,故除了java.lang.Object类之外,所有类该字段值都不为0) interfaces_count 2个字节 接口索引计数器,如果该类没有实现任何接口...,这与类的访问标识类似,只是标识会比类要多: 标识项 标识值 说明 ACC_PUBLIC 0x0001 字段是否为public ACC_PRIVATE 0x0002 字段是否为private ACC_PROTECTED...,本案例中是0x0000001D,则说明code要执行的内容为20字节。

    88920

    小白,你要的Java抽象类,操碎了心!

    当我们要完成的任务是确定的,但具体的方式需要随后开个会投票的话,Java 的抽象类就派上用场了。这句话怎么理解呢?搬个小板凳坐好,听我来给你讲讲。 ?...public abstract class AbstractPlayer { } 关于抽象类的命名,阿里出品的 Java 开发手册上有强调,“抽象类命名要使用 Abstract 或 Base 开头”,记住了哦...假设现在有一个文件,里面的内容非常简单——“Hello World”,现在需要有一个读取器将内容读取出来,最好能按照大写的方式,或者小写的方式。...readFile() 方法用来读取文件,方法体里面调用了抽象方法 mapFileLine()——需要子类扩展实现大小写的方式。...与此同时,子类只需要专注于自己该做的工作,LowercaseFileReader 以小写的方式读取文件内容,UppercaseFileReader 以大写的方式读取文件内容。

    41020

    Java 中 String 类为什么要设计成不可变的?

    String 是 Java 中不可变的类,所以一旦被实例化就无法修改。不可变类的实例一旦创建,其成员变量的值就不能被修改。...本文总结下 String 类设计成不可变的原因及好处,以及 String 类是如何设计成不可变的。 String 类设计成不可变的原因及好处?...1、常量池的需要 这个方面很好理解,Java 中的字符串常量池的存在就是为了性能优化。...字符串常量池(String pool)是 Java 堆内存中一个特殊的存储区域,当创建一个 String 对象时,假如此字符串已经存在于常量池中,则不会创建新的对象,而是直接引用已经存在的对象。...而不可变的 String 可以自由在多个线程之间共享,不需要同步处理。 String 类是如何实现不可变的?

    3.2K50

    获取JVM转储文件的Java工具类

    在上期文章如何获取JVM堆转储文件中,介绍了几种方法获取JVM的转储文件,其中编程方法是里面唯一一个从JVM内部获取的方法。...这里就不演示了其他方法获取正在运行的应用程序的堆转储,重点放在了使用编程来获取转储文件的方法,并演示了如何使用jhat工具浏览/分析生成的二进制堆转储。...com.sun.management.HotSpotDiagnosticMXBean; import org.slf4j.Logger; import javax.management.MBeanServer; import java.lang.management.ManagementFactory...*/ private static volatile HotSpotDiagnosticMXBean hotspotMBean; /** * 下载内存转储文件...下面将生产好的heap.bin文件拉回到本地或者在服务端用jhat -port 8888 heap.bin工具进行处理,然后访问:http://localhost:8888即可查看当时JVM堆内存的使用情况

    81510

    Java中的Properties类详解Properties配置文件

    Properties(Java.util.Properties),该类主要用于读取Java的配置文件,不同的编程语言有自己所支持的配置文件,配置文件中很多变量是经常改变的,为了方便用户的配置,能让用户够脱离程序本身去修改相关的变量设置...就像在Java中,其配置文件常为.properties文件,是以键值对的形式进行参数配置的。...setProperty(String key, String value) 调用 Hashtable 的方法 put 。他通过调用基类的put方法来设置 键值对。...———————————————— ​1.Properties类与Properties配置文件​   Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集...类对象。​

    56510

    修改AAR和Jar中class文件

    怀疑原有的协议格式问题,当H5使用原有协议格式调用线上已经存在的新协议发现native可以端调用成功,此问题排除; 怀疑新协议中的参数问题,H5去掉新协议中的参数发现可以调用到native新协议实现。...我们可以拿到项目中所有的AAR文件,想着是否能通过修改源代码使之提供我们想要的API,然后通过升级 AAR版本解决问题。好了本文的重点已经出来了修改AAR中class文件。...修改AAR中class文件 方案一 先把AAR中的想要修改的class删除,重新打包为新的AAR。项目依赖新版本AAR,然后在项目对应的包下创建一个相同的类。 1....将原有的class文件内容反编译之后拷贝到新建的类中,直接运行。 2. 将原有的class文件内容反编译之后拷贝到新建的类中。最后重新编译生成的class再添加到AAR中重新打包生成新的AAR。...,比如我们添加的方法中涉及到了其他的类需要写全路径android.os.Message,而且这个类相关的jar包也必须添加到运行环境中(也可以将这个类的class文件放着这个工程编译后的class文件目录中

    1.7K00

    修改AAR和Jar中class文件

    怀疑原有的协议格式问题,当H5使用原有协议格式调用线上已经存在的新协议发现native可以端调用成功,此问题排除; 怀疑新协议中的参数问题,H5去掉新协议中的参数发现可以调用到native新协议实现。...我们可以拿到项目中所有的AAR文件,想着是否能通过修改源代码使之提供我们想要的API,然后通过升级 AAR版本解决问题。好了本文的重点已经出来了修改AAR中class文件。...修改AAR中class文件 方案一 先把AAR中的想要修改的class删除,重新打包为新的AAR。项目依赖新版本AAR,然后在项目对应的包下创建一个相同的类。...将原有的class文件内容反编译之后拷贝到新建的类中,直接运行。 将原有的class文件内容反编译之后拷贝到新建的类中。最后重新编译生成的class再添加到AAR中重新打包生成新的AAR。...,比如我们添加的方法中涉及到了其他的类需要写全路径android.os.Message,而且这个类相关的jar包也必须添加到运行环境中(也可以将这个类的class文件放着这个工程编译后的class文件目录中

    1.7K20

    Jadx gui(JAVA反编译工具)

    github:https://github.com/skylot/jadx Jadx gui是一款JAVA反编译工具。...一个简单轻巧的 DEX 到 Java 反编译器,可让您导入 DEX,APK,JAR 或 CLASS 文件并将其快速导出为 DEX 格式。...如果您是 Android 开发人员,您可能会理解,没有适当的软件帮助,就无法构建,测试或调试应用程序。幸运的是,如今有大量的产品可以帮助您实现快速,便捷的结果。...Jadx主要特点 从 apk,dex,aar 和 zip 文件将 Dalvik 字节码反编译为 Java 类 从 resources.arsc 解码 AndroidManifest.xml 和其他资源...注意: 1、反编译出来的 java 代码只能帮分析代码,一般都是没法直接编译通过的。 2、不要指望反编译出的完整目录结构能一模一样导出来。因为反编译的目的就是分析代码,不是运行代码。

    2.6K30

    Gradle依赖管理解析

    小编说:依赖管理是Gradle 最耀眼的特点之一。 最佳情况下,你需要做的仅仅是在构建文件中添加一行代码,Gradle 将会从远程仓库下载依赖,确保你的项目能够使用依赖中的类。...2 原生依赖库 用C 或C++ 编写的依赖库可以被编译为特定平台的原生代码。这些依赖库通常包含几个.so 文件,可用于所有平台。...一种是在项目中当作一个模块,另一种是创建一个可在多个应用中复用的.aar 文件。...②使用.aar 文件 如果你创建了一个依赖库,并且想在不同的Android 应用中复用,那么你可以创建一个.aar 文件,然后将其作为一个依赖添加到你的项目中。...在构建依赖库时,模块目录下的build/output/aar/ 文件夹将会生成.aar 文件。

    2.1K20

    咋设计SDK?看这个基础教程攻略!

    静态库和动态库的区别 如果说要找出静态库与动态库的区别,那可以从文件链接(每个源代码模块独立编译,然后按照需要将他们组装起来,这个组装模块的过程,就是链接)的角度进行解释: 静态库:链接时会被完整的复制到可执行文件中...Android SDK 介绍 Android App 集成第三方 SDK 的文件类型,主要有三种,一种是 JAR 包文件,和 SO 文件 ,另外一种是 AAR 文件, JAR 包是 Java 提供的 SDK...文件类型,里面包含的是纯 Java 编译过后的代码。...不过,Android 库将编译为您可以用作 Android 应用模块依赖项的 Android ARchive (AAR) 文件,而不是编译为在设备上运行的 APK。...与 JAR 文件不同,AAR 文件会为 Android 应用提供以下功能: AAR 文件可以包含多项 Android 资源和一个清单文件,让您除了能够在 Java 类和方法中进行捆绑以外,还能够在布局和可绘制对象等共享资源中进行捆绑

    1K50

    如何设计编写一个 SDK

    静态库和动态库的区别 如果说要找出静态库与动态库的区别,那可以从文件链接(每个源代码模块独立编译,然后按照需要将他们组装起来,这个组装模块的过程,就是链接)的角度进行解释: 静态库:链接时会被完整的复制到可执行文件中...Android SDK 介绍 Android App 集成第三方 SDK 的文件类型,主要有三种,一种是 JAR 包文件,和 SO 文件 ,另外一种是 AAR 文件, JAR 包是 Java 提供的 SDK...文件类型,里面包含的是纯 Java 编译过后的代码。...不过,Android 库将编译为您可以用作 Android 应用模块依赖项的 Android ARchive (AAR) 文件,而不是编译为在设备上运行的 APK。...与 JAR 文件不同,AAR 文件会为 Android 应用提供以下功能: AAR 文件可以包含多项 Android 资源和一个清单文件,让您除了能够在 Java 类和方法中进行捆绑以外,还能够在布局和可绘制对象等共享资源中进行捆绑

    1.3K50
    领券