java - 'this'在应用程序子类的onCreate方法中意味着什么

标签 java android

在下面的示例中,“this”用于初始化实例

public class MyApplication extends Application
{
    public static MyApplication sinstance;

    @Override
    public void onCreate()
    {
        super.onCreate();
        sinstance=this;  
    }

据我所知,“this”指的是对对象当前实例的引用。如果我错了,请纠正我。现在考虑下面的程序

public static MyApplication sinstance;

@Override
public void onCreate()
{
    super.onCreate();
    sinstance=new MyApplication();
}

new MyApplication 用于实例化实例。那么为什么第二个程序在运行时崩溃,而第一个程序没有产生任何错误。它给出了以下错误:

12-16 17:56:09.559 2156-2156/compdom.sad E/art: Throwing OutOfMemoryError "Failed to allocate a 10439248 byte allocation with 5527284 free bytes and 5MB until OOM"
12-16 17:56:09.559 2156-2156/compdom.sad E/AndroidRuntime: Error reporting crash
java.lang.OutOfMemoryError: Failed to allocate a 10439248 byte allocation with 5527284 free bytes and 5MB until OOM
   at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:95)
   at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:125)
   at java.lang.StringBuffer.append(StringBuffer.java:278)
   at java.io.StringWriter.write(StringWriter.java:123)
   at com.android.internal.util.FastPrintWriter.flushLocked(FastPrintWriter.java:358)
   at com.android.internal.util.FastPrintWriter.appendLocked(FastPrintWriter.java:303)
   at com.android.internal.util.FastPrintWriter.write(FastPrintWriter.java:625)
   at com.android.internal.util.FastPrintWriter.append(FastPrintWriter.java:658)
   at java.io.PrintWriter.append(PrintWriter.java:691)
   at java.io.PrintWriter.append(PrintWriter.java:31)
   at java.lang.Throwable.printStackTrace(Throwable.java:324)
   at java.lang.Throwable.printStackTrace(Throwable.java:300)
   at android.util.Log.getStackTraceString(Log.java:335)
   at com.android.internal.os.RuntimeInit.Clog_e(RuntimeInit.java:59)
   at com.android.internal.os.RuntimeInit.access$200(RuntimeInit.java:43)
   at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:85)
   at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
   at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)

最佳答案

第二个例子是创建一个永无止境的循环。每次实例化一个新的 MyApplication 时,它的 onCreate 方法都会运行,并且会递归地创建另一个版本。

第一个中的this您的 MyApplication 类的实例化版本,您不需要创建一个新的。

关于java - 'this'在应用程序子类的onCreate方法中意味着什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34312510/

相关文章:

java - 使用 While 循环搜索二叉树

java - 启用 Proguard 无法在设备中运行发布应用程序

java - java方法中for循环内返回和for循环外返回的区别

java - 在 Java 代码中将 PythonInterpreter 与 Jython 结合使用

android - android studio 1.2.2 中的 Gradle 项目同步失败

android - 在 Android 之前停止之前播放的音频后播放音轨

java - Maven -Dtest=* test,似乎没有运行所有测试

java - 将大数据存储在字符串中并将其分配给 TextView ?

Android AppWidget 木材不记录

android - 组装生产版本时在Gradle中设置常量值buildConfigField