面向对象收尾部分
类的内部结构:
属性、方法、构造器、代码块、内部类
代码块:
代码块又称为初始化块,属于类的一个成员,它是将一些逻辑语句封装在“方法体”中。
通过{}包裹。代码块没有方法名,没有参数,没有返回值,只有方法体。
它是不需要通过对象或类进行显式的调用,它会在类加载或者创建对象时,主动的隐式调用。
(1)静态代码块
一个类被加载时会被调用一次,做一些初始化的工作。

(2)实例代码块
实例就是对象,要让实例代码块能够正常运行,记得创建对象(创建对象的过程中初始化好了)。每次创建对象都会被调用一次,用的很少。

面试题:
先走各种块,再走构造器。
- 当没有继承关系时,就一个类,先后顺序:静态块---实例块---构造器。
父类优于子类、静态块优于非静态

静态static 类属性、类方法
可以修饰属性、方法、代码块
用static修饰的结构,不属于任何一个对象。用类名.属性名进行调用,也不依赖于任何一个对象。

static内存解析
1、静态的变量或者静态方法,存在于方法区的。静态的结构不会被垃圾回收。
2、不属于某一个实例对象,只存在于方法区。调用静态结构,直接用类名.属性名/方法名的方式即可。
实例方法和静态方法互相调用
1、在静态方法中可以直接调用实例方法吗?№!
如果想用必须对象.方法名
2、实例方法中可以直接调用静态方法吗?Yes!
静态结构的加载,随着类的加载而加载!!
非静态的结构,随着对象的创建而加载!!
在Java中调用实例方法,必须要有主体。方法不是一等公民,不能直接调用。
静态方法无论在哪里,都是类名.方法名的方式来进行调用,同一个类的静态方法之间可以省略类名。

静态方法是没有重写这个概念的!
》车间/车练习题:


this和super
无论是this还是super,都不可以在静态结构中使用。
this和super,this.方法 super.方法
静态结构是属于类的,静态结构是优先于对象就存在的。
this和super,必须有对象才能用,依赖于某一个对象才能出现,必须有实例才能用this和super。
外部类
开发中基本不用,写在同一个Java文件中,但它是另一个类。外部类就是两个类,生成的.class文件是两个独立的.class。
不能用public --> 一个public声明的类,类名必须和.Java的文件名相同,否则就报错

内部类
在一个类内部进行其他类结构的嵌套操作。
我们之前写过的链表,Node类其实主要就是给SuperLinked。我们可以把Node类定义在SuperLinked中。
实例内部类

静态内部类

设计模式
设计模式是人们为软件开发中抽象出可重复利用的解决方案。软件开发工程师之间沟通的“行话”。
面向对象的设计原则:
1.开闭原则(Open Close Principle)
对扩展开发,对修改关闭(继承、实现接口)
只读
2.里氏代换原则
子类继承父类时,除了添加新的方法完成新增的功能外,尽量不要重写父类的方法。
3.依赖倒转原则
要面向接口编程,不要面向实现编程。
a、每个类尽量提供接口或抽象类,或者两者兼备
b、变量的类型声明尽量是接口或者是抽象类
c、任何类都不应该从具体类派生(从接口或抽象类派生,尽量用接口派生对象)
d、使用继承时,要遵循里氏代换原则
4.接口隔离原则
使用多个隔离的接口。按照实际功能去划分接口。
5.迪米特法则
6.合成复用原则
7.单一原则
一个类只做一件事
单例模式
单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
单例模式-饿汉式(手写代码)

单例模式-懒汉式(手写代码)
不一定单例,没有饿汉那么安全,有可能出现多例


内部类实现单例-懒汉式原理(手写代码)
也是懒汉式的一种,这种懒汉式没有线程的问题。


箭头函数:JDK8的新特性
函数式接口:如果一个接口只有一个抽象方法,这个接口就称为函数式接口。可以用一个注解:@FunctionalInterface来标识
箭头函数的几种写法
1.有参有返回值
(i,j)-> {return i + j;}
如果方法体只是一句返回值(i,j)->i+j
2.有参无返回值
(i,j)->{//方法体}
如果方法体只有一句话(i,j)-> 方法体的一句话
3.无参无返回值
()->{方法体}

可以简写为👇,返回值那块是show方法,因为函数式接口中,一个接口只有一个抽象方法。



双向链表(见20220727代码部分)
单链表--栈和队列--双链表
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用