Smail语法基本知识(三)

来源:互联网 发布:超市会员管理系统源码 编辑:程序博客网 时间:2024/05/29 09:55

------------------------------------------------分割线-------------------------------------------------------------------------------------

虽然关于指令集现在还没有讲,但是可以先看一个例子,加深一下理解。

HelloWorldAppActivity.smail 示例:

斜体灰色为对应Java代码

.classpublicLcom/cn/daming/activity/HelloWorldAppActivity;

public class HelloWorldAppActivity extends Activity

.superLandroid/app/Activity;

public class HelloWorldAppActivity extends Activity

.source "HelloWorldAppActivity.java"
# instance fields 实例变量

.field privatemTextView:Landroid/widget/TextView;

privateTextView mTextView;

# direct methods 静态方法?
.method public constructor <init>()V 无参构造函数
.locals0 局部变量0个
.prologue ??
.line7
invoke-direct {p0}, Landroid/app/Activity;-><init>()V
return-void
.end method
# virtual methods 非静态方法

.method public onCreate(Landroid/os/Bundle;)V

public void onCreate(Bundle savedInstanceState) 

.locals2

.parameter"savedInstanceState"

public void onCreate(Bundle savedInstanceState

.prologue
.line12

invoke-super{p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

super.onCreate(savedInstanceState);

.line13

const/high16 v0,0x7f03 将0x7f03放入v0中

R.layout.main

invoke-virtual {p0, v0},

Lcom/cn/daming/activity/HelloWorldAppActivity;->setContentView(I)V

p0代表this,而v0则传递参数R.layout.main的值。

this.setContentView(R.layout.main);

.line14

const/high16 v0,0x7f05

R.id.text_view

invoke-virtual {p0, v0},

Lcom/cn/daming/activity/HelloWorldAppActivity;->findViewById(I)Landroid/view/View;

mTextView =(TextView)findViewById(R.id.text_view);

p0代表this,而v0则传递参数R.layout.main的值。

move-result-object v0

将值放入v0

check-cast v0, Landroid/widget/TextView;

类型检查

iput-object v0, p0, Lcom/cn/daming/activity/HelloWorldAppActivity;->mTextView:Landroid/widget/TextView;


.line15
iget-object v0, p0, Lcom/cn/daming/activity/HelloWorldAppActivity;->mTextView:Landroid/widget/TextView;
const/high16 v1,0x7f04

invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(I)V

.line16
return-void

.end method


HelloWorldAppActivity.java 完整示例:

package com.cn.daming.activity;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class HelloWorldAppActivity extends Activity {    private TextView mTextView;    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        mTextView = (TextView)findViewById(R.id.text_view);        mTextView.setText(R.string.hello);    }}


通过对比发现基本的方法名称没有改变,多了一个

.method public constructor <init>()V 表示该类的不带参数缺省的构造方法,

onCreate()方法是以.method public
onCreate(Landroid/os/Bundle;)V 开始,.end method 结束
0 0
原创粉丝点击