Android开发必知的java嵌套类

原创 2017年01月03日 13:11:35

Android开发必知的java嵌套类

嵌套类指定义在另一个类的内部的类,嵌套类的存在只是为了他的外围类。嵌套类有四种:静态成员类,非静态成员类,匿名类,局部类。

静态成员类是最简单的一种嵌套类。最好把它看做是一个普通的类,只是恰好定义在另一个类的内部。静态成员类可以访问外围类的所有成员,包括那些私有的变量。静态成员类同样遵守可访问性规则,如果将它定位私有,它就指在外围类的内部才能访问到。

在Android中 最为熟悉listview的ViewHolder我们通常使用的就是静态成员类,通常作为一个公有的辅助类。作为Listview的缓存变量缓存view中布局。

私有静态成员类,用来代表外围类所代表的对象的组件。

代码如下

public class PhotoListAdapter extends RecyclerView.Adapter<PhotoListAdapter.ImageVH> {

static class ImageVH extends RecyclerView.ViewHolder {

//代码省略

}

}

非静态成员类与静态成员类的语法区别在于是否有修饰符static 。尽管它们的语法很像,但是两者的区别很大。非静态成员类的每个实例都隐含这与外部类的一个外围实例相关联,非静态成员类实例方法内部,可以调用外围实例上的方法,只有静态成员类的实例可以在外围类独立存在,没有外围实例的情况下,无法创建非静态成员类的实例。

当非静态成员类的实例创建,它与外围实例之间的关联也随之被建立,而且这种关联关系以后不能被修改。 这个关联通常发生在外围类的某个实例方法调用了非静态成员类的构造器时。 这种关联关系需要消耗非静态成员类实例的空间,并增加了构造的时间开销。 如果成员类不需要访问外围类实例 请加上static修饰词 。

public class PhotoListAdapter extends RecyclerView.Adapter<PhotoListAdapter.ImageVH> {

class ImageVH extends RecyclerView.ViewHolder {

// 真是对外部类的实例持有,在Android开发中很大部分activity中的context的内存泄露因为这个原因。

}

}

匿名类不同与JAVA的其他语法单元,匿名类没有名字,它不是外围类的一个成员,它不与其他的成员一起被申明,而是在使用的同时被声明实例化。匿名类可以出现在代码任何存在表达式的地方。只有匿名类出现在非静态的环境中,他才有外围实例,即使它声明在静态的环境中,也不可能拥有任何静态成员。

imageView.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// 代码省略

}

});

局部类在任何"可以声明局部变量"的地方声明。同样遵守作用域规则,1. 局部类拥有名字,可以被重复使用。2. 与匿名类,只有当局部类是在

非静态环境定义的时候,才有外围实例,不能包含静态成员。

public class mainActivity extends Activity{

private Handler handler = new Handler(){

@Override

public void handleMessage(Message msg) {

// 此处同样可能引起context持有导致的内存泄露

}

};

}

学习java和学习其他知识一样,都会遇到困难与瓶颈期,关键在于不放弃。学习的动力在于,你为什么学,是跟风?还是自己心里真的喜欢?如果轻言放弃,那么就根本不是喜欢。真正从心里认可的事情,是无论如何都会想办法去做的。一起学习java的伙伴加java思维交流群:175161984(←长按可复制)获取学习资料可

相关文章推荐

Android开发者必知的Java知识(三) 结合注解分析ActiveAndroid的实现

关于Android开发者必知的Java知识系列,我们开头刚刚讲过了java中的反射机制和注解的用法,下面我们结合一个实际的例子来深入这方面的理解。相信大家对ActiveAndroid这个github上...

Android开发者必知的java知识(二)Annotation

转载请注明出处: 西木的博客注解是众多引入Java SE5中的重要语言变化之一。它们可以提供用来完整地描述程序所需的信息,而这些信息是无法用Java来表达的。因此,注解使得我们可以将由编译器来测试和验...

Android开发者必知的Java知识(一):Java反射机制

Java反射机制最近重新温习了一下java的反射机制,终结了一些东西,供大家参考1. 获取函数getMethod获取所有继承的方法,以及自己声明的public方法,getDclaredMethod获取...

Android开发者必知的Java知识(四):Java并发编程

android编程中,并发编程是不可或缺的一部分,几乎所有应用程序的开发中都会用到并发编程,今天我们就来聊聊并发编程的一些事儿,我们先从java对并发编程的基本支持说起。Runnable与Thread...

15个必知的Android开发者选项

原链接:http://news.cnblogs.com/n/534626/ Android 开发者选项,看起来很简单的事情,其实很多同学对它了解得不够,Google 用心良苦得为我们设计了这么多小...

《android开发必知的50个诀窍》笔记Hack-2

使用延迟加载以及避免代码重复创建复杂布局时,过多的控件将导致View树的层次越来越深,应用程序会越来越慢。优化布局是创建运行速度快,响应灵敏的应用程序的基础。1:使用标签避免代码重复假设需要一个显示应...
  • z__love
  • z__love
  • 2016年04月21日 12:06
  • 281

1、Android开发者必知的5个开源库

过去的时间里,Android开发逐步走向成熟,一个个与Android相关的开发工具也层出不穷。不过,在面对各种新鲜事物时,不要忘了那些我们每天使用的大量开源库。在这里,向大家介绍的就是,在这个任劳任怨...
  • zwcshy
  • zwcshy
  • 2014年06月20日 20:20
  • 334

Android开发必知:6.0权限,官方分析

1.这个新的运行时权限仅当我们设置targetSdkVersion 23(这意味着你已经在23上测试通过了)才起作用,当然还要是M系统的手机。app在6.0之前的设备依然使用旧的权限系统。如果app的...

Android开发者必知的5个开源库

过去的时间里,Android开发逐步走向成熟,一个个与Android相关的开发工具也层出不穷。不过,在面对各种新鲜事物时,不要忘了那些我们每天使用的大量开源库。在这里,向大家介绍的就是,在这个任劳任怨...

转:Android开发者必知的开发资源

评论:看到这个,确实是新兵和老兵都需要的东西,对推荐的busy coder那本书,不一定适合初学者,700多页,可能太多。但真正开发的过程中,或许不算多。    转自:本文出自:http://www....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android开发必知的java嵌套类
举报原因:
原因补充:

(最多只允许输入30个字)