zoukankan      html  css  js  c++  java
  • Java匿名内部类详解

     一、在使用匿名内部类的过程中,我们需要注意如下几点:

          1、使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。

          2、匿名内部类中是不能定义构造函数的。

          3、匿名内部类中不能存在任何的静态成员变量和静态方法。

          4、匿名内部类为局部内部类(即方法内部类),所以局部内部类的所有限制同样对匿名内部类生效。

          5、匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。

    二、静态内部类详解

     静态内部类是 static 修饰的内部类,这种内部类的特点是:

      1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问。

      2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员。

      3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();

    public class Test {
        private int a = 99 ; //外部类私有变量
        static int b = 77 ;   //外部类的静态变量
    
        //定义静态内部类
        private static class SInner {
            private int c = 66 ; //
            public void test(){
                System.out.println("访问外部类的b: "+Test.b);
                System.out.println("访问外部类的私有变量a : "+new Test().a);
            }
        }
    
        public static void main(String[] args) {
            SInner sInner = new SInner() ;
            System.out.println("访问内部类的私有变量c: "+sInner.c);
            sInner.test();
        }
    }
    

      

    结果:

    访问内部类的私有变量c: 66
    访问外部类的b: 77
    访问外部类的私有变量a : 99
    
    Process finished with exit code 0
    

      

    三、闭包(Java中的闭包):

    闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)


    What
    闭包是指可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。 —《百度百科》

    是引用了自由变量(可以理解为除局部变量以外的变量)的函数。这个函数通常被定义在另一个外部函数中,并且引用了外部函数中的变量。 – <>

    是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域。– <

    简单理解:
    闭包能够将一个方法作为一个变量去存储,这个方法有能力去访问所在类的自由变量。

    深入理解Java闭包概念

    参考:https://blog.csdn.net/yztbydh/article/details/76270708

     参考:https://juejin.cn/post/6844903655510917128

    内部类

    参考: https://www.cnblogs.com/hysum/p/7101974.html

  • 相关阅读:
    MongoDB配置及解答mongodb cmd中安装及连接数据库 mongodb无法安装及连接数据库解答
    类封装版学生管理系统,连接数据库,增删改查,拿去用,不谢。
    python学生管理系统连接数据库版,很详细,这个是用函数版的增删改查,拿去用,不谢。
    京东双十一
    Ubuntu中以root权限运行软件sudo命令不输入密码
    Ubuntu 18.04中sudo运行的程序无法切换输入法中文输入问题
    UVA12558 埃及分数
    NOI1999 生日蛋糕
    Tarjan
    AC自动机
  • 原文地址:https://www.cnblogs.com/-courage/p/14487968.html
Copyright © 2011-2022 走看看