博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
常量的本质含义与反编译及助记符详解
阅读量:3708 次
发布时间:2019-05-21

本文共 3230 字,大约阅读时间需要 10 分钟。

类加载器并不需要等到某个类被首次使用

/* * Copyright (c) 2019 maoyan.com * All rights reserved. * *//** * JVM 初始化 * * -XX:+TraceClassLoading,用于追踪类的加载信息并打印出来 * -XX:+
[Loaded MyParent from file:/Users/wangkai/IdeaProjects/JvmTest/out/production/JvmTest/][Loaded MyChild from file:/Users/wangkai/IdeaProjects/JvmTest/out/production/JvmTest/]my parent static blockwangkai

常量在编译阶段会存入调用这个常量的方法所在的类的常量池中

/* * Copyright (c) 2019 maoyan.com * All rights reserved. * *//** * 常量在编译阶段会存入到调用这个常量的方法所在的类的常量池中 * 本质上,调用类并没有直接引用到定义常量的类,因此不会触发 * 定义常量池类的初始化 * 注意:这里指的是将常量放到MyTest1的常量池中 * * @author wangkai * @created 2019/12/27 */public class MyTest1 {
public static void main(String[] args) {
// 助记符:ldc表示将int,float或者是String类型的常量值从常量池中推送至栈顶 System.out.println(MyParent1.str); // 助记符:bipush表示将单字节(-128~127)常量值从常量池中推送至栈顶 System.out.println(MyParent1.s); // 助记符:sipush表示将短整型常量值(-32768~32767)常量值从常量池中推送至栈顶 System.out.println(MyParent1.i); // 助记符:iconst_1表示将int类型1推送至栈顶(iconst_m1-iconst_5) System.out.println(MyParent1.m); }}class MyParent1{
public static final String str="hello world"; public static final short s=127; public static final int i=129; public static final int m=2; static {
System.out.println("static my parent1"); }}

注:编译之后,可以把MyParent1的class文件删除,也不会对结果有影响

反编译Javap -c 看具体结果

助记符:ldc表示将int,float或者是String类型的常量值从常量池中推送至栈顶

助记符:bipush表示将单字节(-128~127)常量值从常量池中推送至栈顶
助记符:sipush表示将短整型常量值(-32768~32767)常量值从常量池中推送至栈顶
助记符:iconst_1表示将int类型1推送至栈顶(iconst_m1-iconst_5)

Compiled from "MyTest1.java"public class MyTest1 {
public MyTest1(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."
":()V 4: return public static void main(java.lang.String[]); Code: 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc #4 // String hello world 5: invokevirtual #5 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 8: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 11: bipush 127 13: invokevirtual #6 // Method java/io/PrintStream.println:(I)V 16: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 19: sipush 129 22: invokevirtual #6 // Method java/io/PrintStream.println:(I)V 25: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 28: iconst_2 29: invokevirtual #6 // Method java/io/PrintStream.println:(I)V 32: return}

转载地址:http://pobjn.baihongyu.com/

你可能感兴趣的文章
推荐几个单机游戏下载网、高质量图片下载网
查看>>
数据库查询
查看>>
单臂路由配置
查看>>
静态路由及动态路由 RIP配置
查看>>
现代密码学:密码协议
查看>>
现代密码学:密钥管理
查看>>
数据库增删改
查看>>
RSA公钥
查看>>
【总】现代密码学复习要点总结(谷利泽)
查看>>
【sql-server 数据库 命令大全】
查看>>
数据结构与算法
查看>>
C/C++总结
查看>>
计算机组成原理总结
查看>>
1.3 QT界面美化
查看>>
2 QT数据传输(MVC)
查看>>
3.QT逻辑交互(信号槽)
查看>>
4 QT功能模块
查看>>
(4)功能模块(文件)
查看>>
@Component 和 @Bean 的区别
查看>>
jmeter模拟不同ip对接口进行请求访问
查看>>