接口
Comparable接口
- compareTo(T other)要与equels()方法一致
- Arrays.sort()可以传入实现了comparable接口的对象数组,也可以一个数组,加上自定义的比较器comparator
接口方法、超类方法冲突
- 类优先
- 接口方法与超类方法冲突,优先超类方法
- 两个接口的方法冲突,只要有一个有默认实现,则实现类需要自行选择
cloneable接口
- cloneable接口是一个标记接口,没有定义方法,只是标记为可以提供clone方法
- Object类提供的clone方法权限是受保护的,不能在其他类中调用,必须重写clone方法再将权限改为public
- clone要注意浅拷贝和深拷贝
lambda表达式
lambda表达式定义
- 没有方法参数时用 ()
- 参数类型可以通过上下文推导出时可以省略,单个参数时可以省略()
- 不需要写返回类型,根据上下文自动推导
- 单行表达式可以省略 {}和 return
- 参数与方法体之间用 -> 连接
函数式接口
- 只有一个抽象方法的接口
- 可以用lambda表达式来传入函数式接口参数
- 将一个lambda表达式赋值给函数时接口实例时,就是自动创建一个实现接口的实例,并用lambda表达式来覆盖抽象方法
方法引用
- 对象/类::方法名
- object::instanceMethod ,等价于向方法传递参数的lambda表达式。 类似与 System.out::println 对应表达式为 x -> System.out.println(x)
- Class::instanceMethod ,第一个参数会成为方法的隐式参数。类似于 String::compareToIgnoreCase 对应表达式为 (x,y) -> x.compareToIgnoreCase(y)
- class::staticMethod , 所有参数传递到静态方法, Math::pow 对应表达式 (x,y) -> Math.pow(x,y)

构造器引用
- 类名::new
- 一个类有多个构造方法,会根据上下文参数选择对应的构造器
- java无法创建泛型类型数组,数组构造器引用可以解决这个问题,配合stream的toArray方法来实现:例 Person[] people = stream.toArray(Person[]::new)
lambda表达式变量作用域
- lambda表达式分为三个部分
- 一个代码块
- 参数
- 自由变量的值,这是指非参数而且不在代码中定义的变量
- lambda表达式的代码块和自由变量值就像其他语言的闭包
- lambda捕获外围作用域变量值的限制
- 只能引用值不会改变的变量
- 不能在代码块中对变量值进行更改(如果可以更改,并发执行多个动作时就会不安全)
- 引用的变量在外部不能改变,必须是事实最终变量(初始化之后不会再赋新值)
- lambda表达式的代码块与外围嵌套快有相同的作用域。参数名和局部变量名不能与外部冲突
- lambda表达式中this关键之指代的是创建这个表达式的方法的this参数
处理lambda表达式
- lambda的重点是延迟执行。如:
- 在一个单独的线程中运行代码
- 多次运行代码
- 在算法的适当位置运行代码(例如排序中的比较操作)
- 发生某种情况时执行代码
- 只在必要时运行代码
- 常用函数时接口

- 基本类型的特殊函数式接口

内部类
内部类好处
- 可以对同一个包中的其他类隐藏
- 内部类方法可以访问外部类的数据,包括私有数据
内部类特殊语法
- 内部类引用外部类语法:OuterClass.this
- 外部类之外访问内部类:OuterClass.InnerClass
- 内部类中声明的所有静态字段必须是final,并初始化为一个编译时常量
- 内部类不能有static方法
方法内部类
- 声明类时不能有访问修饰符
- 对外部事件完全隐藏,只有该方法可以访问
- 内部类可以访问外部方法的局部变量,这些变量必须是事实最终变量
- 外部方法中的局部变量,在编译时,会传递给内部类构造方法,创建对应的实例变量
匿名内部类
- 没有类名
- 没有构造方法,构造参数传递给超类构造器,实现接口不能有构造参数
- 可以有构造代码块
静态内部类
- 内部类不需要访问外部类对象时,就应该使用static内部类
- 可以有静态字段和方法
- 接口中声明的类自动静态内部类
« 上一篇:
继承
» 下一篇:
异常、断言和日志
posted @
2022-09-26 19:15
扣jio大汉子
阅读(
17)
评论()
编辑
收藏
举报
点击右上角即可分享
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现