当前位置: 首页 > news >正文

Java10:内部类

  • 7 内部类(了解)
    • 7.1 成员内部类
    • 7.2 静态内部类
    • 7.3 局部内部类
    • 7.4 匿名内部类
  • 2.3. 静态内部类
  • 2.4. Lambda表达式,

7 内部类(了解)

内部类:就是在一个类的内部再定义一个类。

分类:
成员内部类
静态内部类
局部内部类
匿名内部类

7.1 成员内部类

package com.i.innerClass;
//inner Class 内部类
public class Outer {private int id= 10;/** 局部内部类:方法内部*/public void method(){class Inner2{public void in(){}}}/** 成员内部类:类内部*/public class Inner{//获取外部类私有属性public int getId() {System.out.println("内-部类");return id;}}
}
/** class内部类可以有多个,但是只能有一个是public修饰*/
class OuterClass{public static void main(String[] args) {}
}
package com;import com.i.innerClass.Outer;
public class Application {public static void main(String[] args) {Outer outer = new Outer();//要使用内部类,要通过这个外部类来实例化内部类Outer.Inner inner = outer.new Inner();//调用内部类方法int id = inner.getId();System.out.println(id);}
}

7.2 静态内部类

package com.i.innerClass;
//inner Class 内部类
public class Outer {private static int id= 10;/**成员内部类:类内部*/public static class Inner{//获取外部类私有属性public int getId() {System.out.println("内-部类");return id;}}
}

7.3 局部内部类

package com.i.innerClass;
//inner Class 内部类
public class Outer {/** 局部内部类:方法内部*/public void method(){class Inner2{public void in(){}}}
}

7.4 匿名内部类

package com.i.innerClass;public class Outer1 {public static void main(String[] args) {//没有名字初始化类,不用将实例保存到变量中new Apple().eat();/** 匿名内部类,(接口实现类)*/UserService userService= new UserService() {@Overridepublic void hello() {}};}
}class Apple{public void eat(){System.out.println("吃了一个苹果");}
}
// 接口
interface UserService{void hello();
}

  • 7 内部类(了解)
    • 7.1 成员内部类
    • 7.2 静态内部类
    • 7.3 局部内部类
    • 7.4 匿名内部类
  • 2.3. 静态内部类
  • 2.4. Lambda表达式,

2.3. 静态内部类

静态代理模式总结:

  • 1.真实对象和代理对象都要实现同一个接口;
  • 2.代理对象要代理真实角色

这样做的好处:

  • 1.代理对象可以做很多真实对象做不了的事情
  • 2.真实对象可以专注做自己喜欢的事情

举例:(Tom 结婚的案例)

  1. 定义一个 Marry的接口
//Marry 接口
interface Marry{void HappyMarry();
}
  1. 被代理对象
// 真实角色-Tom,Tom去结婚
class Tom implements Marry {@Overridepublic void HappyMarry() {System.out.println("Tom 结婚了了,他很开心");}
}
  1. 代理对象-婚庆公司
// 代理角色-婚庆公司。帮助 Tom结婚
class WeddingCompany implements Marry {//被代理对象,真实角色private Marry target;// 构造方法public WeddingCompany(Marry target) {this.target = target;}@Overridepublic void HappyMarry() {before();this.target.HappyMarry();//真实角色after();}private void after() {System.out.println("婚礼后,结尾款");}private void before() {System.out.println("婚礼前,准备婚礼现场");}
}
  1. 主方法
public class StaticProxy {public static void main(String[] args) {Tom tom = new Tom();//Tom 要结婚/*WeddingCompany weddingCompany = new WeddingCompany(you);weddingCompany.HappyMarry();*///用 lambda表达式对比new Thread(()-> System.out.println("I Love You")).start();new WeddingCompany(tom).HappyMarry();}
}

2.4. Lambda表达式,

Lambda表达式的实质是函数式编程
函数式接口的定义:

  • 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。比如 Runable接口:
public interface Runnable {public abstract void run();
}
  • 对于函数式接口,我们可以通过 lambda表达式来创建该接口的对象。
(params) -> expression [ 表达式 ](params) -> statement [ 单个语句 ](params) -> { statements }

为什么要使用 lambda表达式

  • 1.避免匿名内部类定义过多
  • 2.可以让代码看起来很简洁
  • 3.去掉了一些没有意义的代码,只保留核心逻辑

推导 Lambda表达式

  1. 普通方法

使用一个类去实现他的接口,重写它的方法
再 创建它的对象,调用它的方法

public class TestLambda9_1 {public static void main(String[] args) {MyAddress address = new MyHome();address.lambdaAddress();}
}
//1.定义一个函数式接口
interface MyAddress {void lambdaAddress();
}//2.实现类
class MyHome implements MyAddress {@Overridepublic void lambdaAddress() {System.out.println("我的老家 就是那个屯");}
}
  1. 使用 静态内部类 来简化

把实现类放到方法外面

public class TestLambda9_1 {//3.使用静态内部类代替static class MyHome2 implements MyAddress {@Overridepublic void lambdaAddress() {System.out.println("我的老家 就是那个屯 那个屯");}}public static void main(String[] args) {MyAddress address = new MyHome2();address.lambdaAddress();}
}
//1.定义一个函数式接口
interface MyAddress {void lambdaAddress();
}
  1. 使用 局部内部类 来代替

把实现类放到方法中,

public class TestLambda9_1 {public static void main(String[] args) {//4.局部内部类class MyHome3 implements MyAddress {@Overridepublic void lambdaAddress() {System.out.println("我的老家 就是那个屯 那个屯里 有土生土长的人");}}//局部内部类MyAddress address = new MyHome3();address.lambdaAddress();}
}
//1.定义一个函数式接口
interface MyAddress {void lambdaAddress();
}
  1. 使用 匿名内部类 来代替
public class TestLambda9_1 {public static void main(String[] args) {//5.匿名内部类,没有类的名称,必须借助接口或父类address = new MyAddress() {@Overridepublic void lambdaAddress() {System.out.println("匿名内部类");    }};address.lambdaAddress();}
}
//1.定义一个函数式接口
interface MyAddress {void lambdaAddress();
}
  1. 使用 Lambda表达式 来简化,(JDK1.8)

因为这个接口只有一个方法,所以可以进一步简化
简化后可以只关注于 业务的实现

public class TestLambda9_1 {public static void main(String[] args) {//6.用 lambda表达式简化address = ()-> {System.out.println("用 lambda表达式简化");};address.lambdaAddress();}
}
//1.定义一个函数式接口
interface MyAddress {void lambdaAddress();
}
  1. 最后再来一个示例
public class TestLambda9_2 {public static void main(String[] args) {ILove lo = null;/*4.局部内部类class Love implements ILove {@Overridepublic void loveYou(int year) {System.out.println("Tom, I Love you "+ year +" year");}}ILove lo = new Love();lo.loveYou(1);*//*5.匿名内部类lo = new ILove() {@Overridepublic void loveYou(int year) {System.out.println("Tom, I Love you "+ year +" year");}};lo.loveYou(2);*//*6.lambda表达式简化*/lo = (int year) -> {System.out.println("Tom, I Love you " + year + " year");};lo.loveYou(4);/*简化1:去掉参数类型。如果去掉参数类型,就全部去掉lo = (year) -> {System.out.println("Tom, I Love you " + year + " year");};lo.loveYou(8);*//*简化2:去掉括号。只有一个参数时,才可以使用lo = year -> {System.out.println("Tom, I Love you " + year + " year");};lo.loveYou(16);*//*简化2:去掉花括号。只有一行代码时,才可以使用lo = year -> System.out.println("Tom, I Love you " + year + " year");lo.loveYou(32);*//* 总结:*   1.前提:接口为函数式接口。*   2.lambda表达式,只有一行代码时,才可以简化成一行; 如果有多行,那么就用代码块包裹;*   3.多个参数也可以去掉参数类型,如果去掉参数类型,就全部去掉,并且必须加上括号;* */}
}interface ILove {void loveYou(int year);
}

相关文章:

Java10:内部类

7 内部类(了解)7.1 成员内部类7.2 静态内部类7.3 局部内部类7.4 匿名内部类 2.3. 静态内部类2.4. Lambda表达式, 7 内部类(了解) 内部类:就是在一个类的内部再定义一个类。 分类: 成员内部类 静…...

PostgreSQL 支持的字段类型

PostgreSQL 支持多种字段类型,以下是 PostgreSQL 13 版本中支持的所有字段类型: 数值类型: smallint:小整数类型。integer:整数类型。bigint:大整数类型。decimal:精确小数类型。numeric&#x…...

npm报错error:03000086:digital envelope routines::initialization error

可能是因为node版本过高,与现在的项目不符合 这是降低node版本的命令,然后重新运行 npm install npm8.1.2 -g...

el-table 展开行表格,展开的内容高度可以变化时,导致的固定列错位的问题

问题描述 一个可展开的表格(列设置了type“expand”),并且展开后的内容高度可以变化,会导致后面所有行的固定列错位,图如下,展示行中是一个树形表格,默认不展示子级,点击树形表格的…...

python插入排序

插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常使用in-place排序&#xff0…...

怎么将营业执照图片转为excel表格?(批量合并识别技巧)

一、为何要将营业执照转为excel表格? 1、方便管理:将营业执照转为excel格式,可以方便地进行管理和整理,快速查找需要的信息。 2、数据处理:Excel可以提供丰富的计算和数据分析功能,转化为excel后方便数据…...

关于java数组Arrays类

关于java数组Arrays类 前面的文章中,我们了解了数组创建方法等,我们本篇文章来了解一下数组的方法类Arrays,有了这个类,我们在日常写代码的时候就不不用自己去手动创建方法了😀。 Arrays类 数组的工具类java.util.A…...

LeetCode-58/709

1.最后一个单词的长度(58) 题目描述: 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 思路&…...

linux 流量监控

linux 流量监控 Linux 网络流量监控利器 iftop命令详解及实战 https://blog.csdn.net/qq_50247813/article/details/134164093 iftop命令详解 https://www.cnblogs.com/gaoyuechen/p/17300017.html 1 ubuntu如何查看流量监控 Ubuntu是一种非常流行的Linux发行版&#xff0c…...

AUTOSAR从入门到精通-漫谈autosar软件架构(八)

目录 前言 原理 AUTOSAR的方法论 AUTOSAR架构的优点 AUTOSAR 软件架构 1.应用层...

C#设计模式之单例模式

介绍 单例模式(Singleton)保证一个类仅有一个实例,并提供一个访问它的全局访问点。 单例模式的结构图如下所示: 使用单例模式的原因 对一些类来说,只有一个实例是很重要的。如何才能保证一个类只有一个实例并且这个…...

【源码预备】Calcite基础知识与概念:关系代数概念、查询优化、sql关键字执行顺序以及calcite基础概念

文章目录 一. 关系代数的基本知识二. 查询优化三. SQL语句的解析顺序1. FROM2. WHERE3. GROUP BY4. HAVING5. SELECT 四. Apache Calcite中的基本概念1. Adapter2. Calcite中的关系表达式2.1. 关系表达式例子2.2. 源码底层结构 3. Calcite的优化规则4. Calcite的Trait--算子物理…...

【Java 设计模式】23 种设计模式

文章目录 设计模式是什么计算机行业里的设计模式创建型模式(共 5 种)结构型模式(共 7 种)行为型模式(共 11 种) 总结 设计模式是什么 “每一个模式描述了一个在我们周围不断重复发生的问题,以及…...

ElasticSearch深度分页解决方案

一、前言 ElasticSearch是一个基于Lucene的搜索引擎,它支持复杂的全文搜索和实时数据分析。在实际应用中,我们经常需要对大量数据进行分页查询,但是传统的分页方式在处理大量数据时会遇到性能瓶颈。本文将介绍ElasticSearch分页工作原理、深…...

nginx下upstream模块详解

目录 一:介绍 二:特性介绍 一:介绍 Nginx的upstream模块用于定义后端服务器组,以及与这些服务器进行通信的方式。它是Nginx负载均衡功能的核心部分,允许将请求转发到多个后端服务器,并平衡负载。 在upst…...

基于ssm的双减后初小教育课外学习生活活动平台的设计与实现论文

双减后初小教育课外学习生活活动平台的设计与实现 摘 要 当下,正处于信息化的时代,许多行业顺应时代的变化,结合使用计算机技术向数字化、信息化建设迈进。以前学校对于课外学习活动信息的管理和控制,采用人工登记的方式保存相关…...

wblogic中间件配置数据源

配置数据源 1.服务-数据源-配置-新建 2.单机选一般数据源 3.选择源名称、jndi名称、数据库类型 4.选择驱动 5.下一步 6.输入连接串信息 参考&#xff1a; 格式二&#xff1a;jdbc:oracle:thin:<host>:<port>:<SID> 数据库名称配置的sid 7.测试配置&#xff…...

Java数据结构之装箱拆箱

装箱和拆箱 也叫装包拆包&#xff0c;装包是把那八种基本数据类型转换为它的包装类&#xff0c;拆包则相反 上面这俩种方式都是装包&#xff0c;下面是它的字节码文件 用到了Integer的ValueOf方法&#xff1a; 就是返回了一个Integer类的对象&#xff0c;把它的value属性设置成…...

各版本 操作系统 对 .NET Framework 与 .NET Core 支持

有两种类型的受支持版本&#xff1a;长期支持 (LTS) 版本和标准期限支持 (STS) 版本。 所有版本的质量都是一样的。 唯一的区别是支持的时间长短。 LTS 版本可获得为期三年的免费支持和补丁。 STS 版本可获得 18 个月的免费支持和修补程序。 有关详细信息&#xff0c;请参阅 .N…...

Golang 线程安全与 sync.Map

前言 线程安全通常是指在并发环境下&#xff0c;共享资源的访问被适当地管理&#xff0c;以防止竞争条件&#xff08;race conditions&#xff09;导致的数据不一致 Go语言中的线程安全可以通过多种方式实现 实现方式 互斥锁&#xff08;Mutexes&#xff09; Go的sync包提供…...

半导体设备投资热潮:千亿美元流向、产业逻辑与工程师应对策略

1. 从百亿投资狂潮看半导体制造的底层逻辑最近和几个在晶圆厂和Fab设备商工作的老朋友聊天&#xff0c;话题总绕不开一个词&#xff1a;投资。无论是台积电、三星的先进制程军备竞赛&#xff0c;还是中芯国际、联电的成熟制程扩产&#xff0c;背后都是一台台价值数千万甚至上亿…...

【研报 A110】物理AI时代的具身数据采集需求研究:国家级训练场落地,开源生态加速建设

摘要&#xff1a;物理AI时代&#xff0c;具身智能与世界模型的发展&#xff0c;推动具身数据采集成为下一代数据基建的核心浪潮。具身大模型对数据有着EB级的海量需求&#xff0c;同时对多模态、异构性与质量要求极高&#xff0c;当前数据缺口成为制约具身智能发展的核心瓶颈&a…...

别再写面条代码了!用C语言状态机重构你的单片机项目(附51单片机HSM可移植框架)

从面条代码到优雅架构&#xff1a;用HSM状态机重构嵌入式系统的实战指南 当你面对一个智能家居设备的嵌入式项目&#xff0c;代码里充斥着数百行的if-else嵌套和switch-case分支&#xff0c;每次添加新功能都像是在一碗已经坨掉的面条上再浇一勺酱料——这样的开发体验&#xf…...

60 秒应急窗口下 AI 钓鱼攻击防御体系构建与工程实践

摘要 2026 年网络钓鱼攻击呈现秒级入侵、全域渗透、AI 驱动的显著特征&#xff0c;钓鱼邮件抵达至用户输入敏感信息的中位时间仅 60 秒&#xff0c;勒索软件攻击频率约每 2 秒一起&#xff0c;AI 自动化鱼叉式钓鱼点击率高达 54%&#xff0c;传统防御机制已无法适配当前威胁节奏…...

Tarjan算法:从DFS序到强连通分量的寻路指南(附C++实战与缩点技巧)

1. 从迷宫探索到强连通王国&#xff1a;Tarjan算法的生活隐喻 想象你正在探索一座巨大的迷宫&#xff0c;手里拿着粉笔和记事本。每走到一个新的岔路口&#xff0c;你就在墙上标记数字&#xff08;第一个到的路口标1&#xff0c;第二个标2...&#xff09;&#xff0c;这就是DFS…...

别再只用VGG19做分类了!手把手教你用PyTorch提取4096维图像特征向量(实战教程)

突破分类局限&#xff1a;用PyTorch解锁VGG19的深度特征提取实战 当你第一次接触VGG19时&#xff0c;可能被它的ImageNet分类能力所震撼。但如果你只把它当作一个分类器&#xff0c;那就如同用瑞士军刀只开瓶盖——大材小用。在计算机视觉领域&#xff0c;预训练模型真正的价值…...

3步解锁联想刃7000k BIOS隐藏功能:安全提升硬件性能的完整指南

3步解锁联想刃7000k BIOS隐藏功能&#xff1a;安全提升硬件性能的完整指南 【免费下载链接】Lenovo-7000k-Unlock-BIOS Lenovo联想刃7000k2021-3060版解锁BIOS隐藏选项并提升为Admin权限 项目地址: https://gitcode.com/gh_mirrors/le/Lenovo-7000k-Unlock-BIOS 联想刃7…...

大模型API响应延迟飙升470%,却查不到根因?SITS2026可观测性四象限诊断法,今天就落地

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;SITS2026可观测性框架的起源与核心范式 SITS2026&#xff08;System Intelligence Telemetry Standard 2026&#xff09;并非凭空诞生&#xff0c;而是源于云原生系统在超大规模微服务编排、边缘-中心协…...

AI建站多语言怎么做?先懂业务,再谈翻译

AI建站多语言怎么做&#xff1f;先懂业务&#xff0c;再谈翻译当同行还在卷“建站速度”时&#xff0c;聪明的出海商家已经开始卷“AI可见度”了。据近期行业数据显示&#xff0c;超过60%的海外采购商开始习惯使用ChatGPT、Perplexity等AI工具寻找供应商&#xff0c;而非传统的…...

【Midjourney水墨风创作终极指南】:20年AI视觉专家亲授7大不可外传的Ink Wash参数配方与避坑清单

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;水墨风AI创作的认知革命与历史语境 水墨艺术承载着东方哲学中“虚实相生”“气韵生动”的深层认知范式&#xff0c;而当生成式AI介入水墨风格建模时&#xff0c;其本质并非简单纹理迁移&#xff0c;而是…...