smali语言详解之字段的声明(变量、常量)


一、smali语言的字段声明格式

1.1、非静态变量

.field 权限修饰关键字 变量名:变量类型的全包名路径或与java对应的数据类型关键字

1.2、静态变量

.field 权限修饰关键字 静态修饰关键字 变量名:变量类型的全包名路径或与java对应的数据类型关键字

注意关于静态变量初始化赋值问题,详见博客:smali语言详解之static静态代码块的声明与静态变量初始化赋值位置https://yinglongwu.blog.csdn.net/article/details/129230987

1.3、常量

注意当常量值为数字时需用16进制表示

.field 权限修饰关键字 静态修饰关键字 final 常量名:常量类型的全包名路径或与java对应的数据类型关键字 = 常量的值

1.4、smali与java之间基本数据类型的对应关系

smali java
B byte
S short
I int
J long
F float
D double
C char
Z boolean
V void
[ 数组
L+全类名路径用/分隔,以分号结尾 object(对象和类)

二、示例

java完整代码如下

package com.ylw.helloworld;public class Test {private static final String STR = "hello"; //常量private static final int TAKE_PHOTO = 1; //常量private static int a;private int b;private int[] c;private String d;private String[] e;
}

对应的smali完整代码如下

.class public Lcom/ylw/helloworld/Test;#(此行不可删)Lcom/ylw/helloworld/Test;为类的全包名路径,根据实际情况有所不同
.super Ljava/lang/Object;#(此行不可删)声明父类,当没有使用extends写明继承时,默认继承Object类
.source "Test.java"#(此行可删)#表示此smali代码对应的java源码文件# static fields#自动生成的注释,表明以下为静态字段,可以看出final常量需要额外用等于号赋值
.field private static final STR:Ljava/lang/String; = "hello".field private static final TAKE_PHOTO:I = 0x1.field private static a:I# instance fields#自动生成的注释,表明以下为实例字段
.field private b:I.field private c:[I.field private d:Ljava/lang/String;.field private e:[Ljava/lang/String;#以下内容为无参构造,与本文章内容无关,不做解释
# direct methods
.method public constructor <init>()V.registers 1.prologue.line 3invoke-direct {p0}, Ljava/lang/Object;-><init>()Vreturn-void
.end method

smali语言详解之字段的声明(变量、常量)相关推荐

  1. smali语言详解之static静态代码块的声明与静态变量初始化赋值位置

    smali语言详解之static静态代码块的声明与静态变量初始化赋值位置 一.smali语言的静态代码块声明格式 .method static constructor <clinit>() ...

  2. smali语言详解之一般/构造方法(函数)的声明与返回值关键字

    smali语言详解之一般/构造方法(函数)的声明与返回值关键字 一. smali语言的方法声明格式 .method与.end method成对出现,类似于java中的花括号 1.1.非静态的一般方法 ...

  3. smali语言详解之类的声明

    smali语言详解之类的声明 一.smali语言的类声明格式 .class 权限修饰关键字 类的全包名路径 二.示例 2.1.一般类(无继承和接口实现) java代码如下 public class T ...

  4. smali语言详解之创建对象

    smali语言详解之创建对象 一.smali语言创建对象分两步进行 第一步,声明对象实例,格式如下 new-instance 变量名,该对象对应类的全包名路径 第二步,调用构造方法(如果构造方法内还定 ...

  5. smali语言详解之方法的调用

    smali语言详解之方法的调用 一.方法调用关键字介绍 smali语言方法调用关键字主要有以下五种 invoke-virtual主要用于非私有实例方法的调用.实例方法指不是构造方法.父类方法等的属于这 ...

  6. Drools 规则语言详解(上)

    http://www.blogjava.net/guangnian0412/archive/2006/06/09/51574.html http://www.blogjava.net/guangnia ...

  7. c++指针详解_c语言详解sizeof

    一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等. 它并不是函数. sizeof操作符以字节形式给出了其操作数的存储大小. 操作数可以是一个表达式或括在括 ...

  8. 如何用c语言编写stm32的程序吗,STM32入门C语言详解

    <STM32入门C语言详解>由会员分享,可在线阅读,更多相关<STM32入门C语言详解(6页珍藏版)>请在人人文库网上搜索. 1.最新 料推荐阅读 flash : 芯片内部存储 ...

  9. 克鲁斯卡尔算法c语言,Kruskal算法(一)之 C语言详解

    最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树. 例如,对于如上图G4所示的连通网可以有多棵权值总和 ...

最新文章

  1. 如何完整卸载wxpython_TextCtrl的WXPython C++部分被删除
  2. BZOJ4060 : [Cerc2012]Word equations
  3. Linux下的HDFS命令
  4. python多行注释出错_python 有多行注释运行报错
  5. mysql rrd_时间序列数据库rrd启动
  6. 哪有什么太迟,世界多的是大器晚成
  7. 木瓜移动创始人沈思专访——从平台到孵化器
  8. 狼来了 【dfs】【树】
  9. python脚本批量更改图片大小
  10. java实现花呗分3、6、12期计算用户每期手续费及每期总费用
  11. 目标检测的Tricks | 【Trick13】使用kmeans与遗传算法聚类anchor
  12. 阿里云、蚂蚁区块链医疗解决方案首次应用于未来医院电子处方
  13. hp服务器下的虚拟机安装系统安装,hp 服务器安装linux系统安装
  14. 说唱 -- 再见大四
  15. 敏涵国际品牌:定义高端美妆新力量
  16. 财路网每日原创推送:科普:分片技术
  17. 将字符串中的字母全部替换成字母的下一个字母,要是最后一位是z或Z则替换为a或A
  18. 电力电子器件篇之电容
  19. 尼日利亚4g频段_尼日利亚初创公司Tizeti在全国范围内推出4G LTE网络
  20. 华东交通大学计算机专业导师,华东交通大学计算机专业2017考研调剂信息

热门文章

  1. od机考题目-免单统计-第10讲:高频真题解析 III(上)
  2. mybatis中关于example类详解mybatis的Example[Criteria]的使用
  3. 因子分析——建立载荷矩阵
  4. sql中带有like时如何使用预编译。
  5. SQL Server 不存在或拒绝访问 (SQL Server 2005)
  6. linux arm更新内核,Linux内核升级方法
  7. 无字天书之Python第七页(基础数据结构—上)
  8. edge运行js文件,控制台查看结果
  9. 待就业六人组——团队博客汇总
  10. 网页中怎么插入qq php,在网页中嵌入QQ视频的步骤和代码