相关疑难解决方法(0)

为什么匿名内部类不包含从此代码生成的任何内容?

package com.test;

public class OuterClass {
    public class InnerClass {
        public class InnerInnerClass {

        }
    }

    public class InnerClass2 {

    }

    //this class should not exist in OuterClass after dummifying
    private class PrivateInnerClass {
        private String getString() {
            return "hello PrivateInnerClass";
        }
    }

    public String getStringFromPrivateInner() {
        return new PrivateInnerClass().getString();
    }
}
Run Code Online (Sandbox Code Playgroud)

javac在命令行上运行时Sun JVM 1.6.0_20,此代码生成6个.class文件:

OuterClass.class
在OuterClass $ 1.class
在OuterClass $ InnerClass.class
在OuterClass $ InnerClass2.class
在OuterClass $ $将InnerClass InnerInnerClass.class
在OuterClass $ PrivateInnerClass.class

在eclipse中运行JDT时,它只生成5个类.

OuterClass.class
$在OuterClass 1.class …

java anonymous-class inner-classes

33
推荐指数
3
解决办法
4877
查看次数

为类生成多个.class文件?

出于好奇,为什么有时在编译后为类生成多个Java .class文件?例如,我的应用程序有六个类.对于一个类,总共生成了10个.class文件,从MyClass#1开始到MyClass#10.

java class javac

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

有没有任何构造函数的JVM字节码类是否有效?

AFAIK,Java中的隐式构造函数总是为没有构造函数的类生成[1],[2].

但在字节码中,我无法在JVMS上找到这样的限制.

所以:

  • 根据JVMS来定义一个没有构造函数的类只有在下面的jasmin hello世界中使用它的静态方法是有效的吗?

  • 除了无法创建它的实例之外还有其他任何后果吗?我将无法使用invokespecial初始化实例,new根据https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.10.2.4,这些实例无效(可以不使用未初始化的对象.

Jasmin代码:

.class public Main
.super java/lang/Object
.method public static main([Ljava/lang/String;)V
    .limit stack 2
    getstatic java/lang/System/out Ljava/io/PrintStream;
    ldc "Hello World!"
    invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
    return
.end method
Run Code Online (Sandbox Code Playgroud)

也就是说,没有构造函数:

.method public <init>()V
    aload_0
    invokenonvirtual java/lang/Object/<init>()V
    return
.end method
Run Code Online (Sandbox Code Playgroud)

运行与java Main给出预期的输出Hello World!.

我检查了javap -v输出,与Java不同,jasmin没有生成默认构造函数.

我还试着打电话new Main();来看看会发生什么:

public class TestMain {
    public static void main(String[] …
Run Code Online (Sandbox Code Playgroud)

java constructor jvm bytecode

14
推荐指数
2
解决办法
1545
查看次数

在Eclipse MAT中,一个类末尾的美元符号是什么意思?

我使用的Eclipse MAT,试图在Android的跟踪资源泄漏(如果你改变屏幕方向很多),当我去柱状图来看,我看到我的活动与以$连连列出的相同活动一起上市在它之后.

所以喜欢:

com.test.TestActivity
com.test.TestActivity$1
com.test.TestActivity$2
com.test.TestActivity$3
Run Code Online (Sandbox Code Playgroud)

只是想知道$ 1,$ 2和$ 3意味着什么...

TIA.

eclipse android memory-leaks

9
推荐指数
1
解决办法
1898
查看次数

为什么我的Java类在编译时会创建多个.class文件?

我正在使用Mac 上的Sublime Text创建一个简单的文本编辑器程序,当我通过命令行编译时,它会生成6个.class文件.

我在终端中使用以下命令来编译我的类.

javac Notepad.java

控制台日志如下图所示......

控制台日志

有谁知道它为什么会产生多个.class文件?奇怪的是我可以删除它们然后使用java Notepad它仍然可以完美运行...为什么Java甚至会创建它们?我确定我做的事情很愚蠢.

这里是我的git存储库,而不是发布完整的代码.

java compiler-construction command-line class

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