Java Android日志中活动类名称后的美元($)符号(非匿名内部类)
我正在查看我的应用程序的一些崩溃日志,堆栈跟踪显示如下内容:Java Android日志中活动类名称后的美元($)符号(非匿名内部类),java,android,debugging,Java,Android,Debugging,我正在查看我的应用程序的一些崩溃日志,堆栈跟踪显示如下内容: at MyActivity.formatDouble(MyActivity.java:182) at MyActivity.access$47(MyActivity.java:196) at MyActivity$28.onCameraChange(MyActivity.java:167) “MyActivity”是一个活动,因此不是匿名内部类。我不能确定第3行上的美元符号(第2行中的也是美元符号)我怀疑第167行在MyAc
at MyActivity.formatDouble(MyActivity.java:182)
at MyActivity.access$47(MyActivity.java:196)
at MyActivity$28.onCameraChange(MyActivity.java:167)
“MyActivity”是一个活动,因此不是匿名内部类。我不能确定第3行上的美元符号(第2行中的也是美元符号)我怀疑第167行在
MyActivity
中的匿名类中,而access$47
只是一个蹦床方法,允许onCameraChange
调用MyActivity
中的私有方法。(JVM不允许这样做,所以Java编译器会创建一个方法来允许它。)
您可以通过一个简单的Java类(甚至不在Android上)轻松看到这一点:
public class Test {
private static void privateMethod() {
throw new RuntimeException();
}
public static void main(String[] args) throws Exception {
Runnable runnable = new Runnable() {
@Override public void run() {
privateMethod();
}
};
runnable.run();
}
}
这将提供一个类似于您所示的堆栈跟踪:
Exception in thread "main" java.lang.RuntimeException
at Test.privateMethod(Test.java:4)
at Test.access$000(Test.java:1)
at Test$1.run(Test.java:10)
at Test.main(Test.java:13)
Test$1.run
位于main
中的匿名内部类中,access$000
方法提供对privateMethod
的访问,谢谢!只是好奇,1美元(在你的例子中)和28美元(在我的例子中)代表什么?当前内存中该类的实例数@EasyAndSlow:不,它们不能这样做,因为它们是编译时数据的一部分。我相信它们是特定于实现的。。。可能是该类中匿名类的数量(在这种情况下,您有很多匿名类…)