JVM学习-javap解析Class文件

解析字节码的作用
  • 通过反编译生成字节码文件,可以深入了解Java工作机制,但自己分析类文件结构太麻烦,除了第三方的jclasslib工具外,官方提供了javap
  • javap是jdk自带的反解析工具,它的作用是根据class字节码文件,反解析出当前类对应的code区(字节码指令)、局部变量表、异常表、代码行偏移量映射表、常量池等信息
  • 通过局部变量表,可以查看局部变量的作用域范围、所在槽位等信息,甚至可以看到槽位复用信息
java -g操作
  • 解析字节码文件得到的信息中,有些信息(如局部变量表、指令和代码行偏移量映射表、常量池中方法的参数名称等)需要在使用javac编译成class文件时,指定参数才能输出
  • 直接使用javac xx.java,不会生成对应局部变量表等信息,使用javac -g xx.java可以生成相关信息,如使用eclipse或IDEA,默认情况下,在编译时会帮你生成局部变量表,指令和代码偏移量映射表等信息
javap
  • 格式 javap
  • classes是要反编译的class文件
  • 在命令行直接输入javap或javap -help可以看到javap的options有如下选项
    在这里插入图片描述
C:\Users\Administrator\IdeaProjects\jvm\target\classes\com\chapter09>javap -version JavapTest.class
1.8.0_131
Compiled from "JavapTest.java"
public class com.chapter09.JavapTest {boolean flag;protected char gender;public java.lang.String info;public static final int COUNTS;public com.chapter09.JavapTest();int getNum(int);protected char showGender();public void showInfo();static {};
}// -public 显示公共信息
C:\Users\Administrator\IdeaProjects\jvm\target\classes\com\chapter09>javap -public JavapTest.class
Compiled from "JavapTest.java"
public class com.chapter09.JavapTest {public java.lang.String info;public static final int COUNTS;public com.chapter09.JavapTest();public void showInfo();
}
// -protected 
C:\Users\Administrator\IdeaProjects\jvm\target\classes\com\chapter09>javap -protected JavapTest.class
Compiled from "JavapTest.java"
public class com.chapter09.JavapTest {protected char gender;public java.lang.String info;public static final int COUNTS;public com.chapter09.JavapTest();protected char showGender();public void showInfo();
}
// -private || -p  大于或等于private权限
C:\Users\Administrator\IdeaProjects\jvm\target\classes\com\chapter09>javap -private JavapTest.class
Compiled from "JavapTest.java"
public class com.chapter09.JavapTest {private int num;boolean flag;protected char gender;public java.lang.String info;public static final int COUNTS;public com.chapter09.JavapTest();private com.chapter09.JavapTest(boolean);private void methodPrivate();int getNum(int);protected char showGender();public void showInfo();static {};
}
// -package     显示非私有的信息
C:\Users\Administrator\IdeaProjects\jvm\target\classes\com\chapter09>javap -package JavapTest.class
Compiled from "JavapTest.java"
public class com.chapter09.JavapTest {boolean flag;protected char gender;public java.lang.String info;public static final int COUNTS;public com.chapter09.JavapTest();int getNum(int);protected char showGender();public void showInfo();static {};
}
// -sysinfo
C:\Users\Administrator\IdeaProjects\jvm\target\classes\com\chapter09>javap -sysinfo JavapTest.class
Classfile /C:/Users/Administrator/IdeaProjects/jvm/target/classes/com/chapter09/JavapTest.class     //字节码文件路径Last modified 2024-5-27; size 1348 bytes             //日期MD5 checksum 85dc41e7e2e7128d8899b5d131d7975f       //MD5散列Compiled from "JavapTest.java" 
public class com.chapter09.JavapTest {boolean flag;protected char gender;public java.lang.String info;public static final int COUNTS;public com.chapter09.JavapTest();int getNum(int);protected char showGender();public void showInfo();static {};
}
// -constants
C:\Users\Administrator\IdeaProjects\jvm\target\classes\com\chapter09>javap -constants JavapTest.class
Compiled from "JavapTest.java"
public class com.chapter09.JavapTest {boolean flag;protected char gender;public java.lang.String info;public static final int COUNTS = 1;public com.chapter09.JavapTest();int getNum(int);protected char showGender();public void showInfo();static {};
}
// -s 输出内部类型签名
C:\Users\Administrator\IdeaProjects\jvm\target\classes\com\chapter09>javap -s JavapTest.class
Compiled from "JavapTest.java"
public class com.chapter09.JavapTest {boolean flag;descriptor: Zprotected char gender;descriptor: Cpublic java.lang.String info;descriptor: Ljava/lang/String;public static final int COUNTS;descriptor: Ipublic com.chapter09.JavapTest();descriptor: ()Vint getNum(int);descriptor: (I)Iprotected char showGender();descriptor: ()Cpublic void showInfo();descriptor: ()Vstatic {};descriptor: ()V
}
// -l 输出行号和本地变量表
C:\Users\Administrator\IdeaProjects\jvm\target\classes\com\chapter09>javap -l JavapTest.class
Compiled from "JavapTest.java"
public class com.chapter09.JavapTest {boolean flag;protected char gender;public java.lang.String info;public static final int COUNTS;public com.chapter09.JavapTest();LineNumberTable:line 20: 0line 18: 4line 20: 10LocalVariableTable:Start  Length  Slot  Name   Signature0      11     0  this   Lcom/chapter09/JavapTest;int getNum(int);LineNumberTable:line 26: 0LocalVariableTable:Start  Length  Slot  Name   Signature0       7     0  this   Lcom/chapter09/JavapTest;0       7     1     i   Iprotected char showGender();LineNumberTable:line 29: 0LocalVariableTable:Start  Length  Slot  Name   Signature0       5     0  this   Lcom/chapter09/JavapTest;public void showInfo();LineNumberTable:line 32: 0line 33: 3line 34: 30LocalVariableTable:Start  Length  Slot  Name   Signature0      31     0  this   Lcom/chapter09/JavapTest;3      28     1     i   Istatic {};LineNumberTable:line 15: 0line 16: 3LocalVariableTable:Start  Length  Slot  Name   Signature
}
// -c 对代码进行反编译
C:\Users\Administrator\IdeaProjects\jvm\target\classes\com\chapter09>javap -l JavapTest.class
Compiled from "JavapTest.java"
public class com.chapter09.JavapTest {boolean flag;protected char gender;public java.lang.String info;public static final int COUNTS;public com.chapter09.JavapTest();LineNumberTable:line 20: 0line 18: 4line 20: 10LocalVariableTable:Start  Length  Slot  Name   Signature0      11     0  this   Lcom/chapter09/JavapTest;int getNum(int);LineNumberTable:line 26: 0LocalVariableTable:Start  Length  Slot  Name   Signature0       7     0  this   Lcom/chapter09/JavapTest;0       7     1     i   Iprotected char showGender();LineNumberTable:line 29: 0LocalVariableTable:Start  Length  Slot  Name   Signature0       5     0  this   Lcom/chapter09/JavapTest;public void showInfo();LineNumberTable:line 32: 0line 33: 3line 34: 30LocalVariableTable:Start  Length  Slot  Name   Signature0      31     0  this   Lcom/chapter09/JavapTest;3      28     1     i   Istatic {};LineNumberTable:line 15: 0line 16: 3LocalVariableTable:Start  Length  Slot  Name   Signature
}C:\Users\Administrator\IdeaProjects\jvm\target\classes\com\chapter09>javap -c JavapTest.class
Compiled from "JavapTest.java"
public class com.chapter09.JavapTest {boolean flag;protected char gender;public java.lang.String info;public static final int COUNTS;public com.chapter09.JavapTest();Code:0: aload_01: invokespecial #1                  // Method java/lang/Object."<init>":()V4: aload_05: ldc           #2                  // String java7: putfield      #3                  // Field info:Ljava/lang/String;10: returnint getNum(int);Code:0: aload_01: getfield      #5                  // Field num:I4: iload_15: iadd6: ireturnprotected char showGender();Code:0: aload_01: getfield      #6                  // Field gender:C4: ireturnpublic void showInfo();Code:0: bipush        102: istore_13: getstatic     #7                  // Field java/lang/System.out:Ljava/io/PrintStream;6: new           #8                  // class java/lang/StringBuilder9: dup10: invokespecial #9                  // Method java/lang/StringBuilder."<init>":()V13: aload_014: getfield      #3                  // Field info:Ljava/lang/String;17: invokevirtual #10                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;20: iload_121: invokevirtual #11                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;24: invokevirtual #12                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;27: invokevirtual #13                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V30: returnstatic {};Code:0: ldc           #14                 // String www.lotus.com2: astore_03: return
}
// -v 显示最全的字节码反编译数据
C:\Users\Administrator\IdeaProjects\jvm\target\classes\com\chapter09>javap -v JavapTest.class
Classfile /C:/Users/Administrator/IdeaProjects/jvm/target/classes/com/chapter09/JavapTest.class         //位置Last modified 2024-5-27; size 1348 bytes             //日期,大小MD5 checksum 85dc41e7e2e7128d8899b5d131d7975f        //MD5散列值Compiled from "JavapTest.java"
public class com.chapter09.JavapTestminor version: 0                     //副版本号major version: 52                   //主版本号flags: ACC_PUBLIC, ACC_SUPER           //访问标识
Constant pool:#1 = Methodref          #16.#46        // java/lang/Object."<init>":()V#2 = String             #47            // java#3 = Fieldref           #15.#48        // com/chapter09/JavapTest.info:Ljava/lang/String;#4 = Fieldref           #15.#49        // com/chapter09/JavapTest.flag:Z#5 = Fieldref           #15.#50        // com/chapter09/JavapTest.num:I#6 = Fieldref           #15.#51        // com/chapter09/JavapTest.gender:C#7 = Fieldref           #52.#53        // java/lang/System.out:Ljava/io/PrintStream;#8 = Class              #54            // java/lang/StringBuilder#9 = Methodref          #8.#46         // java/lang/StringBuilder."<init>":()V#10 = Methodref          #8.#55         // java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;#11 = Methodref          #8.#56         // java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;#12 = Methodref          #8.#57         // java/lang/StringBuilder.toString:()Ljava/lang/String;#13 = Methodref          #58.#59        // java/io/PrintStream.println:(Ljava/lang/String;)V#14 = String             #60            // www.lotus.com#15 = Class              #61            // com/chapter09/JavapTest#16 = Class              #62            // java/lang/Object#17 = Utf8               num#18 = Utf8               I#19 = Utf8               flag#20 = Utf8               Z#21 = Utf8               gender#22 = Utf8               C#23 = Utf8               info#24 = Utf8               Ljava/lang/String;#25 = Utf8               COUNTS#26 = Utf8               ConstantValue#27 = Integer            1#28 = Utf8               <init>#29 = Utf8               ()V#30 = Utf8               Code#31 = Utf8               LineNumberTable#32 = Utf8               LocalVariableTable#33 = Utf8               this#34 = Utf8               Lcom/chapter09/JavapTest;#35 = Utf8               (Z)V#36 = Utf8               methodPrivate#37 = Utf8               getNum#38 = Utf8               (I)I#39 = Utf8               i#40 = Utf8               showGender#41 = Utf8               ()C#42 = Utf8               showInfo#43 = Utf8               <clinit>#44 = Utf8               SourceFile#45 = Utf8               JavapTest.java#46 = NameAndType        #28:#29        // "<init>":()V#47 = Utf8               java#48 = NameAndType        #23:#24        // info:Ljava/lang/String;#49 = NameAndType        #19:#20        // flag:Z#50 = NameAndType        #17:#18        // num:I#51 = NameAndType        #21:#22        // gender:C#52 = Class              #63            // java/lang/System#53 = NameAndType        #64:#65        // out:Ljava/io/PrintStream;#54 = Utf8               java/lang/StringBuilder#55 = NameAndType        #66:#67        // append:(Ljava/lang/String;)Ljava/lang/StringBuilder;#56 = NameAndType        #66:#68        // append:(I)Ljava/lang/StringBuilder;#57 = NameAndType        #69:#70        // toString:()Ljava/lang/String;#58 = Class              #71            // java/io/PrintStream#59 = NameAndType        #72:#73        // println:(Ljava/lang/String;)V#60 = Utf8               www.lotus.com#61 = Utf8               com/chapter09/JavapTest#62 = Utf8               java/lang/Object#63 = Utf8               java/lang/System#64 = Utf8               out#65 = Utf8               Ljava/io/PrintStream;#66 = Utf8               append#67 = Utf8               (Ljava/lang/String;)Ljava/lang/StringBuilder;#68 = Utf8               (I)Ljava/lang/StringBuilder;#69 = Utf8               toString#70 = Utf8               ()Ljava/lang/String;#71 = Utf8               java/io/PrintStream#72 = Utf8               println#73 = Utf8               (Ljava/lang/String;)V
{ //-----------------------------------------------方法
//字段表集合信息boolean flag;          //字段名descriptor: Z        //字段描述符(字段类型)flags:               //字段访问标识protected char gender;descriptor: Cflags: ACC_PROTECTEDpublic java.lang.String info;descriptor: Ljava/lang/String;flags: ACC_PUBLICpublic static final int COUNTS;descriptor: Iflags: ACC_PUBLIC, ACC_STATIC, ACC_FINALConstantValue: int 1                             //常量字段的属性:ConstantValue,保存常量的值
//-----------------------------------------------方法public com.chapter09.JavapTest();descriptor: ()Vflags: ACC_PUBLICCode:stack=2, locals=1, args_size=10: aload_01: invokespecial #1                  // Method java/lang/Object."<init>":()V4: aload_05: ldc           #2                  // String java7: putfield      #3                  // Field info:Ljava/lang/String;10: returnLineNumberTable:line 20: 0line 18: 4line 20: 10LocalVariableTable:Start  Length  Slot  Name   Signature0      11     0  this   Lcom/chapter09/JavapTest;int getNum(int);descriptor: (I)Iflags:Code:stack=2, locals=2, args_size=20: aload_01: getfield      #5                  // Field num:I4: iload_15: iadd6: ireturnLineNumberTable:line 26: 0LocalVariableTable:Start  Length  Slot  Name   Signature0       7     0  this   Lcom/chapter09/JavapTest;0       7     1     i   Iprotected char showGender();descriptor: ()Cflags: ACC_PROTECTEDCode:stack=1, locals=1, args_size=10: aload_01: getfield      #6                  // Field gender:C4: ireturnLineNumberTable:line 29: 0LocalVariableTable:Start  Length  Slot  Name   Signature0       5     0  this   Lcom/chapter09/JavapTest;public void showInfo();descriptor: ()V                                   //方法描述符:方法的形参列表、返回值类型flags: ACC_PUBLIC                                 //方法的访问标识Code:                                             //方法Code属性stack=3, locals=2, args_size=1                  //stack:操作数栈的最大深度,locals:局部变量表的长度,args_size:方法接收参数的个数//偏移量  操作码        操作数0: bipush        102: istore_13: getstatic     #7 //#7常量表索引                  // Field java/lang/System.out:Ljava/io/PrintStream;6: new           #8                  // class java/lang/StringBuilder9: dup10: invokespecial #9                  // Method java/lang/StringBuilder."<init>":()V13: aload_014: getfield      #3                  // Field info:Ljava/lang/String;17: invokevirtual #10                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;20: iload_121: invokevirtual #11                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;24: invokevirtual #12                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;27: invokevirtual #13                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V30: returnLineNumberTable:             //行号表,当前字节码指令偏移量与Java源程序中代码的行号一一对应关系line 32: 0line 33: 3line 34: 30LocalVariableTable:          //局部变量表,描述内部局部变量的相关信息Start  Length  Slot  Name   Signature0      31     0  this   Lcom/chapter09/JavapTest;3      28     1     i   Istatic {};descriptor: ()Vflags: ACC_STATICCode:stack=1, locals=1, args_size=00: ldc           #14                 // String www.lotus.com2: astore_03: returnLineNumberTable:line 15: 0line 16: 3LocalVariableTable:Start  Length  Slot  Name   Signature
}
SourceFile: "JavapTest.java"                         //附加属性:当前字节码对应的源文件的文件名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/842517.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个投稿好方法让你的文章早日发表

作为一名单位信息宣传员,我初入此行时,满腔热情,怀揣着传播单位价值、展示团队风采的理想,一头扎进了稿件撰写的海洋。我的目标很简单,就是通过文字的力量,让外界听到我们的声音,感受到我们的活力。然而,理想很丰满,现实却给我上了生动的一课。 起初,我遵循传统路径,选择了一家…

QT安装和配置[安装注意点][QT找不到python27.dll][缩小空间]

安装注意点 本文摘录于&#xff1a;https://blog.csdn.net/Python_0011/article/details/131699443只是做学习备份之用&#xff0c;绝无抄袭之意&#xff0c;有疑惑请联系本人&#xff01; 双击"qt-online-installer-windows-x64-4.8.0.exe"文件后输入账号选择如下控…

什么是Capto刀柄,一起来认识一下

大家好&#xff0c;今天咱们不聊齿轮&#xff0c;说一说一款刀柄的相关内容。目前&#xff0c;高速加工中心的主轴转速可以达到10,000——50,000r /min &#xff0c;极大地提高了生产率。高速加工工具系统的主要作用是保证刀具在机床主轴中的精确定位&#xff0c;将主轴的运动和…

Python脚本启动应用并输入账号或密码

一、简介 如果每天要启动某个软件还要输入账号密码登录的需求的话&#xff0c;可以参考本文章&#xff1b; 二、Python环境 环境&#xff1a;Python3.11 已经在Windows电脑中配置Python环境变量&#xff0c;且配置了pipd的环境变量&#xff1b; 三、安装模块 安装所需要的…

计算机毕业设计 | SpringBoot招投标系统 任务发布网站(附源码)

1&#xff0c;绪论 在市场范围内&#xff0c;任务发布网站很受欢迎&#xff0c;有很多开发者以及其他领域的牛人&#xff0c;更倾向于选择工作时间、工作场景更自由的零工市场寻求零散单子来补贴家用。 如今市场上&#xff0c;任务发布网站鱼龙混杂&#xff0c;用户需要找一个…

(原创)从右到左排列RecycleView的数据

问题的提出 当我们写一个Recycleview时&#xff0c;默认的效果大概是这样的&#xff1a; 当然&#xff0c;我们也可以用表格布局管理器GridLayoutManager做成这样&#xff1a; 可以看到&#xff0c;默认的绘制方向是&#xff1a; 从左到右&#xff0c;从上到下 那么问题来了…

STM32系列(HAL库)——F103C8T6通过HC-SR04超声波模块实现测距

一、模块资料 &#xff08;1&#xff09;模块简介 超声波是振动频率高于20kHz的机械波。它具有频率高、波长短、绕射现象小、方向性好、能够成为射线而定向传播等特点。HC-SRO4是一款尺寸完全兼容老版本&#xff0c;增加UART和IIC功能的开放式超声波测距模块,默认条件下,软件…

执行普罗米修斯插件mysqld_exporter出现闪退问题如何解决?

运行 mysqld_exporter.exe 文件闪退的问题可能是由于配置文件或环境变量设置不正确导致的。 检查配置文件 my.cnf&#xff1a; 打开 my.cnf 文件&#xff0c;确保其中的配置项正确无误&#xff0c;尤其是 MySQL 数据库的连接信息。配置示例&#xff1a;[client] useryour_mysql…

如何评价 OpenAI 最新发布支持实时语音对话的模型GPT-4o?OpenAI发完GTP-4o,国内大模型行业还有哪些机会?

文章目录 OpenAI发完GTP-4o&#xff0c;国内大模型行业还有哪些机会&#xff1f;详细了解一下OpenAI最新发布的支持实时语音对话的模型GPT-4o国内大模型如何寻找发展机会&#xff1f;想要发展技术必须要创新与追赶或许应用场景拓展也是一种出路产业生态构建 ChatGPT 问世才 17 …

阿里妈妈->创意图片生成

数智商业技术2.0时代的新「三驾马车」,阿里妈妈郑波谈如何把握生成式大模型ACM\x26#39;23 中国图灵大会 SIGAI China 论坛上,阿里妈妈及闲鱼 CTO 郑波分享关于数智商业技术的洞见。他认为在这轮生成式 AI 大模型的驱动下,数智商业技术将进入 2.0 时代,其中知识驱动、逻辑推…

【程序员如何送外卖】

嘿&#xff0c;咱程序员要在美团送外卖&#xff0c;那还真有一番说道呢。 先说说优势哈&#xff0c;咱程序员那逻辑思维可不是盖的&#xff0c;规划送餐路线什么的&#xff0c;简直小菜一碟。就像敲代码找最优解一样&#xff0c;能迅速算出怎么送最省时间最有效率。而且咱平时…

Solana 验证节点搭建教程 SOL节点

搭建验证节点 (成功下载快照) 部署 Solana 验证节点 由于项目需求&#xff0c;需要部署一台solana节点&#xff0c;我们从一开始搭建&#xff0c;遇到许多坑&#xff0c;做个记录。 一定要注意服务器配置&#xff0c;配置不够&#xff0c;rpc启动不起来。 一、简介 官网地址…

AIGC 007-E4T基于编码器的域调优用于文本到图像模型的快速个性化!

AIGC 007-E4T基于编码器的域调优用于文本到图像模型的快速个性化&#xff01; 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 这篇论文提出了一种使用领域特定编码器来快速将文本到图像模型适配到新领域的方案。这种被称为基于编码器的领域微调 (E4T) 的方法&#xff0c;专…

【Linux】使用pip3安装pexpect,解决报错:the ssl module in Python is not available

pip3是python3的包管理工具&#xff0c;安装、卸载、更新等管理python包。 pexpect是其中一个python库&#xff0c;用于自动化与终端交互。 centos7使用pip3安装pexpect&#xff0c;报错&#xff1a; pip3 install pexpect 原因&#xff1a;使用python3解释器导入ssl库检查ss…

分布式事务解决方案(最终一致性【TCC解决方案】)

最终一致性分布式事务概述 强一致性分布式事务解决方案要求参与事务的各个节点的数据时刻保持一致&#xff0c;查询任意节点的数据都能得到最新的数据结果&#xff0c;这就导致在分布式场景&#xff0c;尤其是高并发场景下&#xff0c;系统的性能受到了影响。而最终一致性分布式…

第十七届全国大学生信息安全竞赛创新实践能力赛初赛部分复现

Misc 神秘文件 1.根据提示信息&#xff0c;均需要从ppt中提取信息 2.在ppt的属性中发现一串密文和key&#xff0c;解密之后得到第一部分&#xff0c;根据提示Bifid chipher&#xff0c;为双歧密码解密&#xff0c;使用Bifid Cipher Decode解码 3.在第五张幻灯片&#xff0c;…

【python】python商家会员数据分析可视化(源码+数据集+课程报告论文)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

Midjourney应用场景、特点、生成图片带来影响

Midjourney是一个基于GPT-3.5系列接口开发的免费AI机器人&#xff0c;旨在提供多领域的智能对话服务。本文主要介绍Midjourney的应用场景、功能特点、图片生成后可以做什么&#xff1f; 一、Midjourney应用场景 Midjourney的应用场景相当广泛&#xff0c;以下是一些主要的适用…

单链表OJ题(课堂总结)

1.链表的带环问题 上图就是一个典型的带环链表 1.1如何判读链表是否带环&#xff1f; 最常见的方法就是利用快慢指针&#xff0c;快指针追加慢指针&#xff0c;当二者相等的时候即可判断链表带环 其实现的代码如下&#xff1a; bool hasCycle(struct ListNode*head) { s…

nuxt2:自定义指令 / v-xxx / directives / 理解 / 使用方法 / DEMO

一、理解自定义指令 在 vue 中提供了一些对于页面和数据更为方便的输出&#xff0c;这些操作就叫做指令&#xff0c;以 v-xxx 表示&#xff0c;比如 html 页面中的属性 <div v-xxx ></div>。自定义指令很大程度提高了开发效率&#xff0c;提高了工程化水平&#x…