小编Qou*_*roy的帖子

为什么同一个静态字段在 dalvik 中有两个不同的 id?

我正在编写自己的玩具 Dalvik VM,但我似乎无法弄清楚 dalvik 如何处理继承的静态字段。

考虑下面的java代码:

class Parent { static int parent_int = 10; }
class MyCode extends Parent {
    public static void main(String[] args){
        System.out.println(parent_int + 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

当用 javac 和 java 编译并运行时,它会打印11到控制台,正如人们所期望的那样。然而,当它被编译成 dalvik 时,该parent_int值被转化为sgetget 的语句field@0000,而在is的字段 id<clinit>的方法中。Parentparent_intfield@0001

在我的 Dalvik VM 实现中,这成为一个问题,因为即使类 和已经field@0000初始化,也没有初始化。Parentfield@0001

Dalvik VM 如何处理这个问题?它如何知道它们是相关的并且应该被视为相同?为什么它们一开始就变成了两个不同的领域,而它们本可以是一个领域呢?

java android jvm dalvik

5
推荐指数
1
解决办法
200
查看次数

Go fmt会自动缩进吗?

当我这样做fmt.Printf("...\n")时不会将光标移动到第0列,因此下一行是缩进的:

13
  13
    13
      13
        13
          13
            113 ('q')
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

package main

import (
    "bufio"
    "fmt"
    "os"
    "unicode"

    "golang.org/x/crypto/ssh/terminal"
)

func main() {
    oldState, err := terminal.MakeRaw(0)
    if err != nil {
        panic(err)
    }
    defer terminal.Restore(0, oldState)

    reader := bufio.NewReader(os.Stdin)

    var c rune
    for err == nil {
        if c == 'q' {
            break
        }

        c, _, err = reader.ReadRune()

        if unicode.IsControl(c) {
            fmt.Printf("%d\n", c)
        } else {
            fmt.Printf("%d ('%c')\n", c, c)
        }
    }

    if err != nil …
Run Code Online (Sandbox Code Playgroud)

unix terminal go

2
推荐指数
1
解决办法
217
查看次数

从外部网站/应用程序连接到谷歌教室?

我需要从学生的角度以某种方式连接谷歌教室,并列出即将推出的所有作业.我在文档中找不到任何相关内容,但使用google身份验证我应该能够做到吗?

google-classroom

0
推荐指数
1
解决办法
158
查看次数

标签 统计

android ×1

dalvik ×1

go ×1

google-classroom ×1

java ×1

jvm ×1

terminal ×1

unix ×1