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嵌套类

Android开发必知的java嵌套类

Java嵌套类

Java 嵌套类 Java 允许你在一个类的内部定义一个新的类,这个新的类就被称为嵌套类。下面给出一个例子 class EnclosingClass{ //被嵌套类 class Neste...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

Java嵌套类

Java的嵌套类分为 静态成员类(静态嵌套类)、内部类(非静态嵌套类)、嵌套接口。内部类还可以分为内部成员类、本地内部类、匿名内部类。 一、静态成员类习惯上将它成为静态嵌套类。标记为在类中使用 sta...

C++ 类的嵌套

在一个类中定义的类称为嵌套类,定义嵌套类的类称为外围类。 定义嵌套类的目的在于隐藏类名,减少全局的标识符,从而限制用户能否使用该类建立对象。这样可以提高类的抽象能力,并且强调了两个类(外围类和嵌套类...

TIJ学习笔记-嵌套类

package com.zhiru; /* * 嵌套类示例 */ public class Parcel11 { // 嵌套类定义 /* * 1.嵌套类是在class关键字前加 sta...

java内部类(三,嵌套类)

主要与普通内部类作比较: 1.嵌套类是内部类的一种,只不过它是static类型的,语法上。 2.前面两篇所提到的内部类,它们内部的字段和方法和外部类都是一个层次的,所以普通的内部类不能有static...

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

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

java中的嵌套类

java中的嵌套类 成员内部类 方法内部类 匿名内部类 静态嵌套类 java中的嵌套类 在一个类的内部定义另外一个类,这种类称为嵌套类(nested classes),从JDK1.1开始引入。 嵌套类...

【java开发系列】—— 嵌套类与内部类

嵌套类与内部类在java中使用的很广泛,为了避免难以理解,这里用了几个小例子,说明它的用法。   嵌套类与内部类的结构如下图   静态嵌套类     静态嵌套类,是一种在类之外声...

android开发必备知识

UI方面的知识 一、在编写layout的xml文件时,一定要仔细!如果在报错的时候,如何解决? 解决:将xml仔细检查并保存后再运行。 二、在运行程序时,还未运行onCreate()方法之前就报...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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