第五周

接口

接口的定义

  • 接口相当于特殊的抽象类,定义方式、组成部分与抽象类类似
  • 使用interface关键字定义接口
  • 没有构造方法,不能创建对象
  • 只能定义:公开静态常量、公开抽象方法
  • 例子
• interface MyInterface{
 public static final String FIELD =“Value”;
 public abstract void method();
}
  • 接口一种标准
  • 接口是一种标准

接口与类的异同

  • 相同:
  • 可编译成字节码文件
  • 不能创建对象
  • 可以作为引用类型
  • 具备Object类中所定义的方法
  • 不同
  • 所有属性都是公开静态常量,隐式使用public static fianl 修饰
  • 所有属性都是公开静态常量,隐式使用 public abstract 修饰
  • 没有构造方法、动态代码块、静态代码块

接口的应用

  • 什么是接口:
  • 微观概念:接口是一种能力和约定
  • 接口的定义:代表了某种能力
  • 方法的定义:能力的具体要求
  • 经验:
  • java为单继承,当父类的方法种类无法满足子类需求时,可实现接口扩充子类能力
  • 接口支持多实现,可为类扩充多种能力
  • 接口的规范
  • 任何类在实现接口,必须实现接口中所有的抽象方法,否则此类为抽象
  • 实现接口中的抽象方法时,访问修饰符必须是public
  • 接口的引用
  • 同父类一样,接口也可声明为引用,并指向实现类对象
  • 注意
  • 仅可调用接口中所声明的方法,不可调用实现类中独有的方法
  • 可强转回实现类本身类型,进行独有方法调用

接口的多态

  • 例子
• public class TestPolymorpfic{
public static void main(String[] args){Dog myDog = new Dog();
    Animal a = myDog;
    Runnable r =myDog;
    Swimmable s =myDog;}
}
interface Runnale{
 public absrtact void run();}
interface Swimmable{
 public abstract void swim();}
abstract class Animal{
 public void eat(){}//父类方法
 public void sleep(){}//父类方法}
 class Dog extends Animal implements Runnable ,Swimmable{
 public void run(){}//接口方法
 public void swim(){]//接口方法
 public void shout(){} //独有方法}
• 多种类型的引用指向同一个对象时,表示看待对象的视角不同
• 不同引用所能看到的对象范围不同,只能调用自身类型中所声明的部分
• 不同引用类型,仅可调用自身类型中所声明的方法
接口常见关系
• 类与类
• 单继承
• extends 父类名称
• 类与接口
• 多实现
• implement 接口名称1,接口名称2,接口名称n
• 接口与接口
• 多继承
• extends 父接口1,父接口2,父接口n
接口的规范
• 任何类在实现接口时,必须实现接口中所有的抽象方法,否则此类为抽象类
• 实现接口中的抽象方法时,访问修饰符必须是public
常量接口
• 将多个常用于代表状态或固定值的变量,以将静态常量的形式定义在接口中统一管理,提高代码
接口回调
• 先有接口的使用者,后有接口的实现者
• 接口的回调:先有接口的使用者,后有接口的实现者 程序员:工具的调用 工具:接口的使用者 接口:标准 接口的实现者:程序员
接口的好处:
• 程序的耦合度降低
• 更自然的使用多态
• 设计与实现完全分离
• 更容易搭建程序框架
• 更容易更换具体的实现
常用类:
内部类
• 成员内部类
• 在类的内部定义,与实例变量、实例方法同级别的类
• 外部类的一个实例部分。创建内部类对象时,必须依赖外部类对象
• 当外部类、内部类存在重名属性时,会 优先访问内部类属性
• 成员内部类不能定义静态成员
• 静态内部类
• 不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员
• 只能直接访问外部类的静态成员(实例成员需实例化外部类对象) outer.Inner inner = new Outer.Inner() Outer.Inner.show():
• 局部内部类
• 定义在外部类方法中,作用范围和创建对象范围仅限于当前方法
• 局部内部类访问外部类当前方法中的局部变量时,因无法保障变量的生命周期与自身相同,变量必须修饰为final
• 限制类的使用范围
• 匿名内部类
• 没有类名的局部内部类(一切特征都与局部内部类相同)
• 必须继承一个父类或者实现一个接口
• 定义类、实现类、创建对象的语法合并,只能创建一个该类的对象
• 优点:
• 减少代码量
• 缺点
• 可读性较差
• 内部类的概念:在一个类的内部再定义一个完整的类
• 内部类的特点
• 编译之后可生成独立的字节码文件
• 内部类可直接访问外部类的私有成员,而不破坏封装
• 可为外部类提供必要的内部功能组件
object类
• 超类、基类,所有类的直接或间接父类,位于继续树的最顶层
• 任何类,如果没有书写extends 显示继承某个类,都默认直接继承Object类,否则为间接继续
• Object类中所定义的方法,是所有对象都具备的方法
• Object类型可以存储任何对象
• 作为参数,可接受任何对象
• 作为返回值,可返回任何对象
getClass() 方法
• public fianl Class<?>get Class(){}
• 返回引用中存储的实际对象类型
• 应用:通常用于判断两个引用中实际存储对象类型是否一致
hashCode()方法
• public int hashCode(){}
• 返回该对象的十六进制的哈希码值
• 哈希算法根据对象的地址或字符串或数字计算出来的int类型的数值
• 哈希码并不唯一,可保证相同对象返回相同哈希码,尽量保证不同对象返回不同哈希码
toString()方法
• public String toString(){}
• 返回该对象的字符串表示(表现形式)
• 可以根据程序需求覆盖方法,如:展示对象各个属性值
equals() 方法
• public boolean equals (Object obj){}
• 默认实现为(this==obj),比较两个对象地址是否相同
• 可进行覆盖,比较两个对象的内容是否相同
equals()方法覆盖步骤
• 比较两个引用是否指向同一个对象
• 判断obj 是否为null
• 判断;两个引用指向的实际对象类型是否一致
• 强制类型转换
• 依次比较各个属性值是否相同
finalize()方法
• 当对象被判定为垃圾对象时,由jvn 自动调用此方法,用以标记垃圾对象,进入回收队列
• 垃圾对象 :没有有效引用指向此对象时,为垃圾对象。
• 垃圾回收:由GG销毁垃圾对象,释放数据存储空间
• 自动回收机制:JVM内存耗尽,一次性回收所有垃圾对象
• 手动回收机制:使用System.gc():通知JVM执行垃圾回收
包装类
• 定义:
• 基本数据类型所对应的引用数据类型
• Object可统一所有数据,包装类的默认值是null
• 基本数据类型
类型转换与装箱、拆箱
• 8种包装类提供不同类型间的转换方式
• Numer父类中 提供的6个共性方法
• parseXXX()静态方法
• valueOf()静态方法
• 注意:需包证类型兼容,否则抛出NumberFornamatException异常
• JDK 5.0之后,自动装箱、拆箱。基本数据类型和包装类自动转换
整数缓存区
• java预先创建了256个常用的整数包装类型对象
• 在实际应用当中,对已创建的对象进行复用
String类
• 字符串是常量,创建之后不可改变
• 字符串字面值存储在字符串池,可以共享
• String s =“Hello”;产生一个对象,字符串池中存储
• String s = new String (“Hello”) ;// 产生两个对象,堆、池各存储一个
常用方法
• public char charAt(int index):根据下标获取字符
• public boolean contains(Stirng str):判断当前字符串中是否包含str
• public char[] toCharArray():将字符串转换成数组
• public int indexOf(String str):查找str 首次出现的下标,存在,则返回该下标;不存在。则返回-1
• public int lastIndexOf(Stirng str ):查找字符串在当前字符串中最后一次出现的下标索引
• public int length():返回字符串的长度
• public int length():返回字符串的长度
• public String trim():去掉字符串前后的空格
• public String toUpperCase():将小写转成大写
• public boolean endWith(String str):判断字符串是否以str结尾
• public String replace(char oldChar,char newChar):将字符串替换成新字符串
• public String[] split(String str):根据str做拆分
可变字符串
• StringBuffer:可变长字符串,JDK1.0提供,运行效率慢、线程安全
• StringBuilder:可变长字符串,JDK5.0提供,运行效率快、线程不安全
BigDecimal
• 除法:Bigdecimal(BigDecimal bd ,int scal,RoundingMode mode)
• 参数scal :指定精确到小数点后几位
• 参数mode
• 指定小数部分的取舍模式,通常采用四舍五人的模式
• 取值为BigDecimal.ROUND_HALF_UP
常用类
集合
概念:对象容器。存储对象的对象,可代替数组
特点:容器的工具类 ,定义了多个对象进行操作的常用方法
位置: java.util.*
Collection 体系集合
该体系结构的根接口,代表一组对象成为“集合”
• List
List 接口的特点:有序、有下标、元素可重复• ArrayList
• LinkedList
• Vector
• 子主题 4
• Set
Set 接口的特点:无序、无下标‘、元素不能重复• hashSet
• SortedSet
• TreeSet
Collection 父接口
• 特点:代表一组任意类型的对象,无序、无下标
• 方法
• boolean add(Object obj)//添加一个对象
• boolean addAll(Collection c)//将一个集合中的所有对象添加到此集合中
• void clear() // 清空此集合中的所有对象
• Boolean contains(Object o)//检查此集合中是否包含o 对象
• boolean equals(Object o)// 比较此集合是否与指定对象相等
• boolean isEmpty()// 判断集合是否为空
• Boolean remove(Object o) //在此集合移除0对象
• int size()// 返回此集合中的元素个数
• Object[] toArray()// 将此集合转换成数组
List集合
• List子接口
• 特点:有序、有下标、元素可以重复
• 方法
• void add(int index,Object o) //在index位置插入对象
• boolean addAll(int index ,Coolection c) // 将一个集合中的元素添加到此集合中的index位置
• Object get(int index )// 返回集合中指定位置的元素
• List subList(int fromIndex ,int toIndex) // 返回fromIndex和toIndex之间的集合元素
• List实现类
• ArrayList【重点】
• 数组结构实现,查询快、增删慢
• JDK1.2版本,运行效率快、线程不安全
• 必须开辟连续空间,查询快,增删慢
• Vector
• 数组结构实现,查询快、增删慢
• JDK1.0版本,运行效率慢、线程安全
• LinkedList
• 链表结构实现、增删 快、查询慢
• 无需开辟连续空间,查询慢、增删快
泛式集合
• 概念:参数化类型、类型安全的集合,强制集合元素的类型必须一致
• 特点
• 编译时即可检查,而非运行时抛出异常
• 访问时, 不必类型转换(拆箱)
• 不同泛型之间引用不能相互赋值,泛型不存在多态
Colletions 工具类
• 概念:集合工具类,定义了除了存取以外的集合常用方法
• 方法
• public static void reverse(List<?> list)//反转集合中元素的顺序
• public static void shuffle(List<?> list )// 随机重置集合元素的顺序
• public static void sort(List list) //升序排序(元素类型必须实现 Comparable接口)
Set 集合
• Set子接口
• 特点:无序、无下标、元素不可重复
• 方法:全部继承自Collection中的方法
• Set实现类
• Hash Set【重点】
• 基于HashCode实现元素不重复
• 当存入元素的哈希码相同时,会调用equals进行确认,如结果为true,则拒绝后者存入
• LinkedHashSet
• 链表实现的HashSet,按照链表进行存储,即可保留元素的插入顺序
• TreeSet
• 基于排序顺序实现元素不重复
• 实现了SortedSet接口,对集合元素自动排序
• 元素对象的类型必须实现Comparable接口,指定排序规则
• 通过CompareTo 方法确定是否为重复元素
Map体系集合
• hashMap
• SortedMap
• map接口的特点
• 用于存储任意键值对(Key - value)
• 键:无序、无下标、不允许重复(唯一)
• 值:无序、无下标、允许重复
• Map 父接口
• 特点
• 存储一对数据(key-Value),无序、无下标,键不可重复,值可重复
• 方法:
• V put(K key ,V value )// 将对象存入到集合中。关联键值。key 重复覆盖原值
• Object get(Object key)// 根据键获取对应的值
• Set // 返回包含所有值得Collection集合
• Set<Map.Entry<K,V>>// 键值匹配的Set 集合
• Map集合的实现类
• HashMap【重点】:
• JDK1,2版本,线程不安全,运行效率快;允许用null作为key 或是value
• Hashtable
• JDK1.0版本,线程安全,运行效率慢;不允许null 作为key 或是value
• Properties
• Hashtable的子类,要求key 和value都是String 。通常用于配置文件的读取
• TreeMap
• 实现了SortedMap接口(是Map的子接口),可以对Key 自动排序

总结

集合的概念

  • 对象的容器,存储对象的对象,定义了对多个对象进行操作的常用方法

List集合

  • 有序、有下标、元素可重复。(ArrayList,LinkedList、Vector)

Set集合

  • 无序、无下标、元素不可重复。(HashSet、LinkedList、TreeSet)

Map集合

  • 存储一对数据,无序、无下标,键不可重复,值可重复。(hashmap、HashTable)

Collections

  • 集合工具类,定义了除了存取以外的集合常用方法

思维导图

java生成思维导图并保存为图片_java