最近遇到的一个问题,记录一下。
静态内部类可以被实例化!
1.首先在外部类中的static方法中不能使用普通内部类,因为内部类必须要与外部类建立关联才能使用,可以说是同生共死。
2.我在编码过程中,需要2个类共同完成一个功能,其中一个工具类只会被用来完成这个功能,所以我选择将这个类作为内部类,但是这个内部类与外部类又没有直接的关联(使用普通内部类,我需要new一个外部类,通过外部类才能new一个内部类,这样显然不合适),所以我选择使用静态内部类。
3.关于静态内部类的对象:首先多次new是在堆中创建了不同的对象,和普通类的对象一样。我在使用的时候,主要怕多个静态内部类的对象在程序运行过程中像静态成员变量一样一直占据内存空间导致OOM,经过验证,静态内部类的对象虽然每次new都生成一个对象,但是会被及时的回收,不会因为一直占据内存空间导致OOM。

// 静态内部类

private static class AA
{
int a;
}
btn1.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
for(int i = 0 ; i < 1000; i++)
{
// 静态内部类可以被实例化
AA a = new AA();
a.a = i;
list.add(a);
}
}
});
btn3.setOnClickListener(new OnClickListener()
{ @Override
public void onClick(View v)
{
for(int i = 0 ; i < list.size(); i++)
{
// 不为同一个对象
Log.i("aaaa", list.get(i)+"");
}
}
});

通过btn3打印的Log我们可以看到静态内部类的对象不是同一个

另外为了验证能不能及时回收,查看内存使用情况的方法:

data object后面的Total Size就是程序中对象占用的内存,检测内存是否合理使用,你可以打开应该,来回的操作,看看TotalSize又没有明显的增长,正常情况下,如果没有垃圾数据,内存会及时的被回收,TotalSize也就维持在相对稳定的数值,如果,一直在上涨说明你的程序就有OOM的风险了。

转自:https://blog.csdn.net/u013318615/article/details/50316657

其他文章:https://blog.csdn.net/unique_wz/article/details/48029867

(转)Java静态内部类的实例化问题的更多相关文章

  1. 创建java类并实例化类对象

    创建java类并实例化类对象例一1.面向对象的编程关注于类的设计2.设计类实际上就是设计类的成员3.基本的类的成员,属性(成员变量)&方法 面向对象思想的落地法则一:1.设计类,并设计类的成员 ...

  2. Java中创建实例化对象的几种方式

    Java中创建实例化对象有哪些方式? ①最常见的创建对象方法,使用new语句创建一个对象.②通过工厂方法返回对象,例:String s =String.valueOf().(工厂方法涉及到框架)③动用 ...

  3. java 静态内部类小总结

    内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权 ...

  4. java静态内部类理解

    在Java世界里,经常被提到静态这个概念,static作为静态成员变量和成员函数的修饰符,意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见. ...

  5. Java 静态内部类的加载时机

    参考文章:[https://www.cnblogs.com/maohuidong/p/7843807.html] 前言: 在看单例模式的时候,在网上找帖子看见其中有一种(IoDH) 实现单例的方式,其 ...

  6. Java 静态内部类与非静态内部类 学习记录.

    目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...

  7. 创建Java类并实例化深入理解

    package com.sanguosha.java; import java.util.Scanner;//导入包 public class TestPerson { public static v ...

  8. 创建Java类并实例化的基本过程

    package com.sanguosha.java; /* * 面向对象实现的过程 * 1.创建类并设计类的成员(成员变量即属性and成员方法即方法) * 2.通过类来创建类的对象,也称类的实例化 ...

  9. java 静态内部类特点

    1.静态内部类可以在外部类的静态成员中访问或者实例化(非静态内部类不可以)---优势 2.静态内部类可以访问外部类的静态成员不可以访问非静态成员(非静态内部类可以访问类的静态和非静态成员)---限制 ...

随机推荐

  1. day_11 py 名片管理系统

    '' 2018-4-23 11:42:29 名片管理系统 字典与列表的结合 ''' #1.打印功能提示 print("="*50) print(" 1.添加一个新的名片& ...

  2. 局域网里别人如何访问我本地电脑里的nginx网站

    1.修改nginx.conf配置文件(我这里配了二级域名,所以我在二级域名配置文件修改) 把deny all全部改成autoindex on 2.关闭防火墙 3.重启nginx

  3. 爬虫----爬虫请求库requests

    一 介绍 介绍:---------------------------------------------使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的a ...

  4. The Salt Master has cached the public key报错解决办法

    参考:http://www.52devops.com/chuck/814.html 查看salt-minion的运行状态,显示salt-master已经缓存了这个minion,但是minion在重新认 ...

  5. SQL Server 2016 共享功能目录 不可修改

    x 个人电脑上没有安装MSSQL,以前需要链接数据库写SQL,都是在{VS ->>视图->>SQL Server对象资源管理器}直接链接数据库进行访问操作的... 但是确实有些 ...

  6. Django url配置 正则表达式详解 分组命名匹配 命名URL 别名 和URL反向解析 命名空间模式

    Django基础二之URL路由系统 本节目录 一 URL配置 二 正则表达式详解 三 分组命名匹配 四 命名URL(别名)和URL反向解析 五 命名空间模式 一 URL配置 Django 1.11版本 ...

  7. SPOJ - TSUM 母函数+FFT+容斥

    题意:n个数,任取三个加起来,问每个可能的结果的方案数. 题解:构造母函数ABC,比如现在有 1 2 3 三个数.则 其中B表示同一个数加两次,C表示用三次.然后考虑去重. A^3表示可重复地拿三个. ...

  8. Java的四种内部类(含代码实例)

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

  9. Ubuntu16.04LTS卸载软件的命令

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

  10. Xcode编译警告Assigning to 'id<XXXDelegat> ——Nullable' from incompatible type 'XXXView *const_strong'

    编译报警告 可能是 自定义分类使用协议时出现与父类协议的冲突 解决方法如下: