ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Java基础--Java 内部类

Java基础--Java 内部类

原创 Linux操作系统 作者:百联达 时间:2013-06-22 09:11:41 0 删除 编辑
     嵌套类是定义在另一个类的内部的类。嵌套类存在的目的应该只是为它的外部类提供服务。如果嵌套类可能会用于其它的某个场景中,它就应该是顶层类。嵌套类有四种:静态成员类,非静态成员类,局部类和匿名类,除了第一种外,其它三种都被称为内部类。

一:静态成员类
      静态成员类可以看做是普通的类,只是碰巧被声明在另一个类的内部而已。它的一种常见的用法是作为共有的辅助类,仅当与它的外部类一起使用时才有意义。比如String类中的CaseInsensitiveComparator类,还有Integer类中的IntegerCache类。

二:非静态成员类
      非静态成员类的每个实例都隐含着与外部类的一个实例相关联。非静态成员类实例的方法内部,可以调用外部类实例上的方法,或者利用this构造对外部类实例的引用。非静态成员类的一种常见用法是定义一个适配器,他允许外部类实例被看做是另一个不相关的类的实例。例如Map接口的实现类HaspMap会通过KeySet,EntrySet,Values等内部类来构造它的集合视图。


三:静态成员类与非静态成员类的选择
      如果成员类的实例不需要访问外部类的实例,就该把该成员类声明为静态的。否则,每个实例都将包含一个对外部对象的引用。保存这份引用要消耗时间和空间,并且会导致外围实例在符合垃圾回收时却仍然得以保留。如果在没有外部实例的情况下也需要分配实例,就不能使用非静态成员类,因为它的实例必须要有一个外部实例。

四:局部类
      在任何“可以声明局部变量”的地方,都可以声明局部类,并且局部类也遵守同样的作用域规则。局部类必须非常简短,以便不会影响到可读性。


五:匿名类
      匿名类没有名字。它不是外部类的一个成员。它并不与其它的成员一起被声明,而是在使用的同时被声明和实例化。它不能执行instanceof测试,或做任何需要命名类的其他事情。匿名类必须保持简短,否则会影响程序的可读性。

        匿名内部类不能定义任何静态成员和静态方法;不能是public,protected,private,static;只能创建匿名内部类的一个实例;一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。

      匿名内部类通常可分为继承式的或接口式的。比如我们在进行多线程编程的时候经常会用到:
    new Thread() {
            public void run() {
                //类继承式的
            }
        }.start();
或
    new Thread(new Runnable() {
            public void run() {
                // 接口实现式的
            }
        }).start();

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28624388/viewspace-764578/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
15年以上互联网经验,先后从事过制造业,证券业,物业行业和物流行业信息系统和互联网产品的设计落地实施,8年系统架构经验。最近关注企业数字化转型、财务数字化服务共享、大语言模型、Kubernetes微服务架构和Istio微服务治理框架。

注册时间:2013-02-05

  • 博文量
    332
  • 访问量
    1265618