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 Adapter嵌套Adapter(文档类app,说明书类app)

相信很多人都用过Adapter,但是Adapter嵌套Adapter确很少使用,主要是这样的需求也不多,最近要做一个说明书类的应用,左边实现目录的嵌套,点击一级目录弹出二级目录,一级目录为一个Adap...
  • yuxuehandong
  • yuxuehandong
  • 2016年06月09日 21:05
  • 2001

Java中 外部类如何对嵌套类进行实例化

问题: 1.B类被A类嵌套,那么在C类中如何调用B类的成员呢? 2.外部类如何对嵌套类进行实例化? 带着这2个问题,我举例说明如下,如果您对嵌套类有更深入的理解和心得,别忘了与大家分享. /* 远外...
  • StellaAh
  • StellaAh
  • 2011年08月24日 15:19
  • 2713

java嵌套类的四大类型

因为欣赏所以转载:先声明转摘地址吧 http://www.cnblogs.com/o-andy-o/archive/2012/04/07/2435825.html 内部类分为成员内部类、静态...
  • just3do
  • just3do
  • 2017年03月11日 20:25
  • 770

《打造高质量Android应用:Android开发必知的50个诀窍》勘误支持

《打造高质量Android应用:Android开发必知的50个诀窍》 翻译自 《50 android h》
  • allongriver
  • allongriver
  • 2014年05月13日 19:46
  • 795

java四种嵌套类的使用环境

嵌套类有四种:静态成员类、非静态成员类、匿名类、局部类。除了第一种之外,其他三种被称为内部类。   四种不同的嵌套类,每一种都有自己的用途。如果一个嵌套类需要在单个方法之外可见,或者它太长了,不适...
  • zfy1355
  • zfy1355
  • 2016年08月16日 14:25
  • 680

java嵌套类和内部类、匿名类

java嵌套类和内部类、匿名类 1、嵌套类和内部类定义 可以在一个类的内部定义另一个类,这种类称为嵌套类(nested classes),它有两种类型:静态嵌套类和非静态嵌套类。静态嵌套类使用很少,最...
  • andychen314
  • andychen314
  • 2016年03月10日 16:08
  • 572

从头认识java-8.9 嵌套类(使用static的内部类)

这一章节我们来讨论一下嵌套类。1.概念内部类使用static的时候就是嵌套类。package com.ray.ch07; public class Test { private static cl...
  • raylee2007
  • raylee2007
  • 2015年11月13日 11:36
  • 1497

Java中的嵌套类总结

一直对内部类、静态内部类这些名词的认识不太清晰,做一些小小的总结。 总结内容:Java的嵌套类...
  • ll530304349
  • ll530304349
  • 2016年10月25日 20:30
  • 275

Java嵌套类(内部类)总结

Java嵌套类的深入理解
  • sunxianghuang
  • sunxianghuang
  • 2016年07月21日 14:48
  • 1714

JAVA中,嵌套类的介绍

1,java中,允许在类中介绍类。这种声明在类的内部的类称为嵌套类,也可以叫内部类。 2,嵌套类对象可以访问创建它的外部类的所有属性和方法、 3,嵌套类通过在其外部类环境内的嵌套声明,不为同一包的...
  • wodedipang_
  • wodedipang_
  • 2015年10月20日 21:19
  • 678
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android开发必知的java嵌套类
举报原因:
原因补充:

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