什么是接口
接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。全面地专业地实现了:规范和具体实现的分离。
从接口的实现者角度看,接口定义了可以向外部提供的服务。
从接口的调用者角度看,接口定义了实现者能提供那些服务。
接口就是规范,定义的是一组规则,体现了现实世界中“如果你是…则必须能…”的思想。如果你是天使,则必须能飞。如果你是汽车,则必须能跑。如果你是好人,则必须能干掉坏人;如果你是坏人,则必须欺负好人。
接口的本质是契约,就像我们人间的法律一样。制定好后大家都遵守。
面向对象的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如C++、Java、C#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。
接口和抽象类的区别
1. 普通类:具体实现
2. 抽象类:具体实现,规范(抽象方法)
3. 接口:规范!
如何使用接口呢
1 接口的申明格式
[访问修饰符] interface
接口名 [extends
父接口1,父接口2…] {
常量定义;
方法定义;
}
要点
1. 子类通过implements来实现接口中的规范。
2. 接口不能创建实例,但是可用于声明引用变量类型。
3. 一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的。
4. JDK1.7之前,接口中只能包含静态常量、抽象方法,不能有普通属性、构造方法、普通方法。
5. JDK1.8后,接口中包含普通的静态方法。
数组的冒泡排序
其中冒泡排序是最为经典的排序
实现冒泡排序理论如下
1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3. 针对所有的元素重复以上的步骤,除了最后一个。
4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
大家可以用如上思想,将下面的人按照身高从低到高重新排列:
![2741dbaead7fb6d291d61d6ae773627e.png](https://i-blog.csdnimg.cn/blog_migrate/00495758d1f058c2571276e39fdc4c7c.jpeg)
其公式如下
![b4ce047b1f51fc2c2c2f48ba7ccbaa07.png](https://i-blog.csdnimg.cn/blog_migrate/269cc2c982f1191df1d94c8533d10520.jpeg)
数组的拷贝内存分析图
![94d77330a8770230ba68c8c79de1a072.png](https://i-blog.csdnimg.cn/blog_migrate/54d41f0434ef9a9bd47a5074f38fad1d.jpeg)
数组的拷贝用的是Stsyem类下的Arrayscopy的方法来拷贝的
公式方法是Stsyemm.Arrayscopy(源数组,从下标多少开始,目标数组,从下标什么地方开始接收,拷贝的长度源代码.length )
常用类的总结
String类常用方法
- l charAt 返回指定索引处的 char 值。
- l concat 将指定字符串连接到此字符串的结尾。
- l length() 返回此字符串的长度。
- l toString()返回此对象本身(它已经是一个字符串!)。
- l valueOf() 返回 char 参数的字符串表示形式。
Arrays类中的常用方法
1. binarySearch 使用二分搜索法来搜索指定的 byte 型数组,以获得指定的值。
2. copyOf复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。
3. equals 如果两个指定的 boolean 型数组彼此相等,则返回 true。
4. fill 将指定的 int 值分配给指定 int 型数组的每个元素。
5. hashCode基于指定数组的内容返回哈希码
6. sort 对指定 long 型数组的指定范围按数字升序进行排序。
7. toString 返回指定数组内容的字符串表示形式