美文网首页Android知识Android开发
Android开发必知的java嵌套类

Android开发必知的java嵌套类

作者: 人失格 | 来源:发表于2016-12-19 18:00 被阅读172次

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

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

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

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

      代码如下

    
    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持有导致的内存泄露
            }
        };
      }
    

相关文章

  • Android开发必知的java嵌套类

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

  • android的api学习翻译一manifest

    1、先看类继承机构 java.lang.Object ---->android.Manifest 2、嵌套类 ...

  • 校招复习概要

    应聘职位:Android开发工程师 复习概要 1.Java 类(class) 在Java中,类文件是以.java为...

  • Android_开发_Day8_类和对象

    Android_开发Day8类和对象 目的: 了解Java的类和对象,学会Java类和对象的新建与使用。 技术: ...

  • 优秀参考文章--性能优化

    Android 性能优化必知必会Android 性能优化必知必会

  • kotlin 嵌套和内部类

    Kotlin 嵌套类 与Java类似,Kotlin允许您在另一个称为嵌套类的类中定义一个类 由于嵌套类是其封闭类的...

  • java中级开发必知

    (一)Java 1.接口和抽象类的区别 ①抽象类里可以有构造方法,而接口内不能有构造方法。 ②抽象类中可以有普通成...

  • java abstract

    参考java抽象类和抽象方法Android开发:抽象类(abstract class)和接口(Interface)...

  • 必知android开发库

    过去的 2016 年,开源社区异常活跃,很多个人与公司争相开源自己的项目,让人眼花缭乱,然而有些项目只是昙花一现,...

  • [IT干货]开发android,我们需要哪些技能基础

    开发android,我们需要哪些技能基础。(android大牛请绕开此段) ①Java基础知识 ②Linux基础知...

网友评论

    本文标题:Android开发必知的java嵌套类

    本文链接:https://www.haomeiwen.com/subject/skmtvttx.html