内部类和Lambda表达式

java 匿名内部类 和 Lambda 表达式 说明:将匿名内部类定义在接口中的 static 方法中,通过接口名.静态方法.匿名内部类的方法来使用接口//定义接口//服务方法//定义静态方法用来放置匿名内部类{ //匿名内部类@OverrideSystem.out.println(name + "连接成功......");//别忘了这个分号//通过 接口名.静态方法.匿名内部类的方法 来使用接口USB02.ttt().service("键盘");Lambda 表达式:应用在含一个抽象方法的接口环境下的一种简化定义形式。 阅读详情

1.内部类

1.1 内部类的基本使用(理解)

  • 内部类概念
- 在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类
  • 内部类定义格式
    • 格式&举例:
      /*
      格式:
 class 外部类名{
        	修饰符 class 内部类名{
        	
        	}
        }
    */
    
    class Outer {
        public class Inner {
            
        }
    }
  • 内部类的访问特点
- 内部类可以直接访问外部类的成员,包括私有
- 外部类要访问内部类的成员,必须创建对象
  • 示例代码:
 /*
      内部类访问特点:
          内部类可以直接访问外部类的成员,包括私有
          外部类要访问内部类的成员,必须创建对象
   */
  public class Outer {
      private int num = 10;
      public class Inner {
          public void show() {
              System.out.println(num);
          }
      }
      public void method() {
          Inner i = new Inner();
          i.show();
      }
  }

1.2 成员内部类(理解)

  • 成员内部类的定义位置
- 在类中方法,跟成员变量是一个位置
  • 外界创建成员内部类格式
 - 格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
  - 举例:Outer.Inner oi = new Outer().new Inner();
  • 私有成员内部类
  - 将一个类,设计为内部类的目的,大多数都是不想让外界去访问,所以内部类的定义应该私有化,
  - 私有化之后,再提供一个可以让外界调用的方法,方法内部创建内部类对象并调用。
  • 示例代码:
class Outer {
    private int num = 10;
    private class Inner {
        public void show() {
            System.out.println(num);
        }
    }
    public void method() {
        Inner i = new Inner();
        i.show();
    }
}
public class InnerDemo {
    public static void main(String[] args) {
		//Outer.Inner oi = new Outer().new Inner();
		//oi.show();
        Outer o = new Outer();
        o.method();
    }
}
  • 静态成员内部类
  - 静态成员内部类访问格式:外部类名.内部类名 对象名 = new 外部类名.内部类名();
  - 静态成员内部类中的静态方法:外部类名.内部类名.方法名();
  • 示例代码
 class Outer {
        static class Inner {
            public void show(){
                System.out.println("inner..show");
            }
    
            public static void method(){
                System.out.println("inner..method");
            }
        }
    }
    
    public class Test3Innerclass {
        /*
            静态成员内部类演示
         */
        public static void main(String[] args) {
            // 外部类名.内部类名 对象名 = new 外部类名.内部类名();
            Outer.Inner oi = new Outer.Inner();
            oi.show();
    
            Outer.Inner.method();
        }
    }

1.3 局部内部类(理解)

  • 局部内部类定义位置
 - 局部内部类是在方法中定义的类
  • 局部内部类方式方式
 - 局部内部类,外界是无法直接使用,需要在方法内部创建对象并使用
  - 该类可以直接访问外部类的成员,也可以访问方法内的局部变量
  • 示例代码
  class Outer {
      private int num = 10;
      public void method() {
          int num2 = 20;
          class Inner {
              public void show() {
                  System.out.println(num);
                  System.out.println(num2);
              }
          }
          Inner i = new Inner();
          i.show();
      }
  }
  public class OuterDemo {
      public static void main(String[] args) {
          Outer o = new Outer();
          o.method();
      }
  }
  

1.4 匿名内部类(应用)

匿名内部类的前提

  - 存在一个类或者接口,这里的类可以是具体类也可以是抽象类
  - 匿名内部类的格式
  • 格式:new 类名 ( ) { 重写方法 } new 接口名 ( ) { 重写方法 }
  - 举例: 
        new Inter(){
            @Override
            public void method(){}
        } 
  • 匿名内部类的本质
 - 本质:是一个继承了该类或者实现了该接口的子类匿名对象
  • 匿名内部类的细节
    • 匿名内部类可以通过多态的形式接受
Inter i = new Inter(){
      @Override
        public void method(){
            
        }
    }
  • 匿名内部类直接调用方法
interface Inter{
      void method();
  }
  
  class Test{
      public static void main(String[] args){
          new Inter(){
              @Override
              public void method(){
                  System.out.println("我是匿名内部类");
              }
          }.method();	// 直接调用方法
      }
  }

1.5 匿名内部类在开发中的使用(应用)

  • 匿名内部类在开发中的使用
  - 当发现某个方法需要,接口或抽象类的子类对象,我们就可以传递一个匿名内部类过去,来简化传统的代码
  • 示例代码:
  /*
      游泳接口
   */
  interface Swimming {
      void swim();
  }
  
  public class TestSwimming {
      public static void main(String[] args) {
          goSwimming(new Swimming() {
              @Override
              public void swim() {
                  System.out.println("铁汁, 我们去游泳吧");
              }
          });
      }
  
      /**
       * 使用接口的方法
       */
      public static void goSwimming(Swimming swimming){
          /*
              Swimming swim = new Swimming() {
                  @Override
                  public void swim() {
                      System.out.println("铁汁, 我们去游泳吧");
                  }
              }
           */
          swimming.swim();
      }
  }

2.Lambda表达式

2.1体验Lambda表达式【理解】

- 代码演示
      /*
          游泳接口
       */
      interface Swimming {
          void swim();
      }
      
      public class TestSwimming {
          public static void main(String[] args) {
              // 通过匿名内部类实现
              goSwimming(new Swimming() {
                  @Override
                  public void swim() {
                      System.out.println("铁汁, 我们去游泳吧");
                  }
              });
      
              /*  通过Lambda表达式实现
                  理解: 对于Lambda表达式, 对匿名内部类进行了优化
               */
              goSwimming(() -> System.out.println("铁汁, 我们去游泳吧"));
          }
      
          /**
           * 使用接口的方法
           */
          public static void goSwimming(Swimming swimming) {
              swimming.swim();
          }
      }
  • 函数式编程思想概述
  在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿数据做操作”
  面向对象思想强调“必须通过对象的形式来做事情”
  函数式思想则尽量忽略面向对象的复杂语法:“强调做什么,而不是以什么形式去做”
  而我们要学习的Lambda表达式就是函数式思想的体现

2.2Lambda表达式的标准格式【理解】

  • 格式:
	(形式参数) -> {代码块}
  - 形式参数:如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可
  - ->:由英文中画线和大于符号组成,固定写法。代表指向动作
  - 代码块:是我们具体要做的事情,也就是以前我们写的方法体内容
- 组成Lambda表达式的三要素:
  - 形式参数,箭头,代码块

2.3Lambda表达式练习1【应用】

  • Lambda表达式的使用前提
  - 有一个接口
  - 接口中有且仅有一个抽象方法
  • 练习描述
无参无返回值抽象方法的练习
  • 操作步骤
- 定义一个接口(Eatable),里面定义一个抽象方法:void eat();
  - 定义一个测试类(EatableDemo),在测试类中提供两个方法
    - 一个方法是:useEatable(Eatable e)
    - 一个方法是主方法,在主方法中调用useEatable方法
  • 示例代码
  //接口
  public interface Eatable {
      void eat();
  }
  //实现类
  public class EatableImpl implements Eatable {
      @Override
      public void eat() {
          System.out.println("一天一苹果,医生远离我");
      }
  }
  //测试类
  public class EatableDemo {
      public static void main(String[] args) {
          //在主方法中调用useEatable方法
          Eatable e = new EatableImpl();
          useEatable(e);
  
          //匿名内部类
          useEatable(new Eatable() {
              @Override
              public void eat() {
                  System.out.println("一天一苹果,医生远离我");
              }
          });
  
          //Lambda表达式
          useEatable(() -> {
              System.out.println("一天一苹果,医生远离我");
          });
      }
  
      private static void useEatable(Eatable e) {
          e.eat();
      }
  }

2.4Lambda表达式练习2【应用】

  • 练习描述
  有参无返回值抽象方法的练习
  • 操作步骤
- 定义一个接口(Flyable),里面定义一个抽象方法:void fly(String s);
  - 定义一个测试类(FlyableDemo),在测试类中提供两个方法
    - 一个方法是:useFlyable(Flyable f)
    - 一个方法是主方法,在主方法中调用useFlyable方法
  • 示例代码
public interface Flyable {
      void fly(String s);
  }
  
  public class FlyableDemo {
      public static void main(String[] args) {
          //在主方法中调用useFlyable方法
          //匿名内部类
          useFlyable(new Flyable() {
              @Override
              public void fly(String s) {
                  System.out.println(s);
                  System.out.println("飞机自驾游");
              }
          });
          System.out.println("--------");
  
          //Lambda
          useFlyable((String s) -> {
              System.out.println(s);
              System.out.println("飞机自驾游");
          });
  
      }
  
      private static void useFlyable(Flyable f) {
          f.fly("风和日丽,晴空万里");
      }
  }

2.5Lambda表达式练习3【应用】

  • 练习描述
有参有返回值抽象方法的练习
  • 操作步骤
 - 定义一个接口(Addable),里面定义一个抽象方法:int add(int x,int y);
  - 定义一个测试类(AddableDemo),在测试类中提供两个方法
    - 一个方法是:useAddable(Addable a)
    - 一个方法是主方法,在主方法中调用useAddable方法
  • 示例代码
public interface Addable {
      int add(int x,int y);
  }
  
  public class AddableDemo {
      public static void main(String[] args) {
          //在主方法中调用useAddable方法
          useAddable((int x,int y) -> {
              return x + y;
          });
  
      }
  
      private static void useAddable(Addable a) {
          int sum = a.add(10, 20);
          System.out.println(sum);
      }
  }

2.6Lambda表达式的省略模式【应用】

  • 省略的规则
 - 参数类型可以省略。但是有多个参数的情况下,不能只省略一个
  - 如果参数有且仅有一个,那么小括号可以省略
  - 如果代码块的语句只有一条,可以省略大括号和分号,和return关键字
  • 代码演示
 public interface Addable {
      int add(int x, int y);
  }
  
  public interface Flyable {
      void fly(String s);
  }
  
  public class LambdaDemo {
      public static void main(String[] args) {
  //        useAddable((int x,int y) -> {
  //            return x + y;
  //        });
          //参数的类型可以省略
          useAddable((x, y) -> {
              return x + y;
          });
  
  //        useFlyable((String s) -> {
  //            System.out.println(s);
  //        });
          //如果参数有且仅有一个,那么小括号可以省略
  //        useFlyable(s -> {
  //            System.out.println(s);
  //        });
  
          //如果代码块的语句只有一条,可以省略大括号和分号
          useFlyable(s -> System.out.println(s));
  
          //如果代码块的语句只有一条,可以省略大括号和分号,如果有return,return也要省略掉
          useAddable((x, y) -> x + y);
      }
  
      private static void useFlyable(Flyable f) {
          f.fly("风和日丽,晴空万里");
      }
  
      private static void useAddable(Addable a) {
          int sum = a.add(10, 20);
          System.out.println(sum);
      }
  }

2.7Lambda表达式的使用前提【理解】

- 使用Lambda必须要有接口
- 并且要求接口中有且仅有一个抽象方法

2.8Lambda表达式和匿名内部类的区别【理解】

  • 所需类型不同
  - 匿名内部类:可以是接口,也可以是抽象类,还可以是具体类
  - Lambda表达式:只能是接口
  • 使用限制不同
  - 如果接口中有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类
  - 如果接口中多于一个抽象方法,只能使用匿名内部类,而不能使用Lambda表达式
  • 实现原理不同
  - 匿名内部类:编译之后,产生一个单独的.class字节码文件
  - Lambda表达式:编译之后,没有一个单独的.class字节码文件。对应的字节码会在运行的时候动态生成
芯片设计新手必看:5分钟搞懂工艺角(Process Corner)到底是什么,为啥仿真总要用它? 本文详细解析了芯片设计中的工艺角(Process Corner)概念及其在仿真中的重要性。通过类比马拉松运动员的性能差异,解释了晶体管制造过程中的天然波动,并介绍了TT/FF/SS等工艺角代码的含义。文章还探讨了为何需要跑全工艺角仿真,以及现代芯片验证的完整流程,包括PVT矩阵和多模式分析(MMMC),帮助芯片设计新手快速掌握这一关键概念。 阅读详情

相关推荐

LVGL仪表盘实战:5分钟用lv_meter打造汽车仪表UI(附完整代码)

本文详细介绍了如何使用LVGL的lv_meter组件在5分钟内构建专业汽车仪表盘UI。从环境配置、刻度定制到指针动画和性能优化,提供完整代码示例和实战技巧,帮助开发者快速实现嵌入式设备上的高效仪表盘设计。

k5l6m的博客 421

Lambda表达式 详解

5.Lambda表达式 5.1体验Lambda表达式【理解】 代码演示 /* 游泳接口 */ interface Swimming { void swim(); } public class TestSwimming { public static void main(String[] args) { // 通过匿名内部类实现 goSwimming(new Swimming() { @Override

JAVA开发者@邢先生 182

你的OLED屏和MPU6050为啥通信失败?从IIC的7位地址冲突讲起

本文深入解析OLED屏与MPU6050传感器在I2C总线上的通信故障,重点探讨7位地址冲突问题。通过分析I2C协议中的地址分配机制,提供硬件调整和软件调试的完整解决方案,帮助开发者有效排查和解决设备无响应问题。

weixin_26876073的博客 151

匿名内部类、Lambda表达式、方法引用对比分析

一、匿名内部类 1. 语法格式 2. 使用方法 ① 传统方式 ② 匿名内部类方式 二、Lambda表达式 1. 语法格式 2. 使用方法 ① 匿名内部类方式 ② Lambda表达式方式 三、方法引用 1. 语法格式 2. 使用方法 ① 类型的静态方法引用 ② 类型的构造方法引用 ③ 类型的实例方法引用 ④ 对象的实例方法引用 四、匿名内部类、Lambda表达式、方法引用对比分析总结

骑个小蜗牛的博客 6521

21、汽车喷漆目标区域识别:机器学习与深度学习的应用

本文探讨了机器学习与深度学习在汽车喷漆目标区域识别中的应用,重点利用卷积神经网络(CNN)提高喷漆效率并减少油漆浪费。通过构建和预处理包含多种汽车类型的数据集,采用ResNet-18、ResNet-50和MobileNet-v2等模型进行训练与评估,结果表明ResNet-50在准确率和鲁棒性方面表现最佳。研究还分析了数据裁剪、标签处理、网络架构差异以及光照和遮挡对识别效果的影响,并提出了系统实现流程。最后,文章展望了多传感器融合、模型优化和场景适应性等未来研究方向,为智能化喷漆工艺提供了技术参考。

5b6n7m8的博客 102

【C#程序员入门AI】AI应用的操作系统:Semantic Kernel 2026实战

用户ID用户信息

人工智能AI技术 1248

lambda表达式和匿名内部类

Lambda表达式是一种匿名函数,它可以作为一个值来传递。Lambda表达式通常包含一个或多个参数,一个表达式或一个语句块,并且它们可以立即执行。在技术上,Lambda表达式是一个闭包,因为它可以访问其定义范围之外的变量(只要这些变量是最终的或实际上不可修改的)。Lambda表达式适合于简单、短小的功能实现,能够显著提升代码的可读性和简洁性。匿名内部类则更适合于实现复杂的逻辑或者需要覆盖多个方法的情况。在选择使用哪种方式时,应根据实际需求和上下文来决定。

m0_68319667的博客 1369

数字孪生教程大全之 我们如何构建数字孪生?数字孪生的五个级别都是什么

文章摘要 什么是数字孪生? 我们如何构建数字孪生? 开发智能数字孪生系统的框架 什么是数字孪生? 数字孪生是一个不言自明的术语,用于识别物理系统的数字化版本。数字孪生的最早参考来自大卫·格伦特(David Gelernter )的小说作品。在他 1995 年的书中,Gelernter 博士为读者提供了未来有趣的可能性——万维网。前网络书籍谈到了计算机系统上的镜像数字世界。有些人可能会争辩说,我们的 Meta-verse 是新的数字世界——现实世界的数字孪生。但是,还有其他可能性,时间可能会讲述一个更好的

iCloudEnd的博客 3630

lambda表达式和 内部类

1.为什么引入lambda表达式 lambda表达式是一个可传递的代码块,可以在以后执行一次或多次。能够让代码稍简洁一些。 2.lambda表达式的语法 lambda表达式形式: 参数,箭头(->) 一个表达式。如果代码要完成的计算无法放在一个表达式中,可以把代码放在{}中,并包含显式的return语句。 即使lambda表达式没有参数,仍然要提供空括号,就像无参方法一样: ()->{for (int i=100;i>=0;i--)System.out.println(i);.

Carol__a的博客 732

【专栏必读】王道考研408操作系统+Linux系统编程万字笔记使用说明及章节导航

王道408考研操作系统)第一章计算机系统概述-第一节1、2:操作系统概念、概念和特征1:理解fork的作用prinf("还没有执行fork函数的本进程为:%d\n" , getpid());//其返回值是pid类型的 sleep(1);if(ret > 0) //父进程返回的是子进程ID {printf("我是父进程,我的id是:%d,我的孩子id是%d\n" , getpid() , ret);sleep(1);} } else if(ret == 0) //子进程fork返回值是0 {.........

快乐江湖的博客 3万+

Codex 接入国产大模型指南:客户端与 CLI 双端实战

CC Switch是目前最流行的 Codex / Claude Code 模型切换工具,内置了协议转换功能,支持几乎所有主流国产模型。核心原理Codex → 本地 8317 端口(CC Switch)→ 协议转换 → 国产模型 API整个过程对 Codex 完全透明,Codex 以为自己在跟标准的 Responses API 对话。用户类型推荐方案理由新手 / 不想折腾配置简单,免费额度够用追求稳定体验通义千问(原生接入)官方兼容,功能最完整企业用户自建 AI 网关可控性强,支持多用户管理预算有限。

篮球界最会写bug的人;程序猿中打球最菜的人。 575

循循渐进详解内部类和Lambda表达式

文章目录内部类 与 Lambda表达式一、内部类2、实例化内部类3、内部类私有化4、内部接口5、静态内部类6、局部内部类7、匿名内部类二、Lambda表达式1、函数式编程思想概述2、Lambda表达式初体验3、Lambda表达式的标准格式4、Lambda表达式的使用前提5、Lambda表达式的练习5.1、无参无返回值的抽象方法5.2、有参无返回值的抽象方法5.3、有参有返回值的抽象方法6、Lambda表达式的省略模式7、Lambda表达式和匿名内部类的区别 内部类 与 Lambda表达式 一、内部类 程序在

Window_mouse的博客 1万+

42、Windows Server Update Services(WSUS)全面指南

本文全面介绍了Windows Server Update Services(WSUS)的安装、配置、管理与优化策略。内容涵盖WSUS基础认知、客户端更新问题解决、多服务器架构设计、计算机分组策略、更新审批与报告查看,并深入探讨了SSL加密配置、性能优化、与其他系统(如AD和SCCM)集成以及常见故障排查方法。通过本指南,IT管理员可高效部署和管理企业级软件更新,提升安全性和运维效率。

cicd6pipeline的博客 98

java中的内部类和Lambda表达式

一、使用内部类 1.在外部类使用内部类。不要在外部类的静态成员中使用非静态内部类,因为静态成员不能访问非静态成员。 2.在外部类使用非静态内部类。如果希望在外部类以外的地方访问内部类,则内部类不能使用private访问控制权限,private修饰的内部类只能在

奔跑的小车车博客专栏 1559

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

匿名内部类和Lambda表达式

匿名内部类 前提 存在一个类或者接口,这里的类可以是具体类也可以是抽象类; 格式 格式:new 类名 ( ) { 重写方法 } new 接口名 ( ) { 重写方法 } new Inter(){ @Override public void method(){} } 本质 本质:是一个继承了该类或者实现了该接口的子类匿名对象。 使用场景 发现某个方法需要,接口或抽象类的子类对象,我们就可以传递一个匿名内部类过去,来简化传统的代码。 Lambda表达式 前提 使用Lambd

qq_42541819的博客 1110

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java匿名内部类和Lambda表达式

Java匿名内部类和Lambda表达式一、Java匿名内部类二、JavaLambda表达式全部代码:代码运行结果: 一、Java匿名内部类 我们在使用匿名内部类时,需要记住以下几个重要的知识点:  ①匿名内部类不能有构造方法。 (因为匿名内部类是没有类名的)  ②匿名内部类不能定义任何静态成员、方法和类。  ③匿名内部类不能是抽象类。(因为在创建匿名内部类的时候,会立即创建匿名内部类的对象。从而也可知匿名内部类必须实现它的抽象父类或者接口里包含的所有抽象方法)  ④匿名内部类不能是public,prote

faramita_of_mine的博客 2104

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java内部类和 Lambda 表达式的命名规则

内部类和 Lambda 表达式的命名规则 1) 成员内部类,包括普通成员内部类、静态成员内部类,外部类名$内部类名 2) 局部内部类,外部类名$n内部类名,n 从 1 开始,每个函数都有不同的 n 值 3) 匿名内部类,外部类名$n,n 从 1 开始 4) Lambda 表达式类,外部类名$$Lambda$n,n 从 1 开始。 (注:控制台输出后面还会加上斜杠+数字,比如:Main$$Lamb...

a3192048的博客 2321

内部类和lambda表达式

内部类和lambda表达式

longhuu的博客 511

java内部类和lambda表达式

java内部类,lambda表达式

qq_36827283的博客 450

Java匿名内部类和lambda表达式

在定义一个抽象类或接口以后,我们无法将其直接实例化。那么怎么将其实例化呢?最容易想到的是再定义一个类,并继承这个抽象类(或实现这个接口),然后把抽象方法补全,就可以对这个子类进行实例化了。那么实际应用中,定义如此多个class是比较繁琐的,因此这里引入了匿名内部类和Lambda表达式的概念。 匿名内部类 首先看一段简单的代码: interface Behavior { void eat(S...

jackzhang11的博客 817
上一篇: 继承、抽象类、代码块
下一篇: 常用API
MemoryHer
博客等级 码龄5年 4粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值