javaEE 学习总结 第五周(含思维导图)

第五周

接口

接口的定义

  • 接口相当于特殊的抽象类,定义方式、组成部分与抽象类类似

    • 使用interface关键字定义接口

    • 没有构造方法,不能创建对象

    • 只能定义:公开静态常量、公开抽象方法

    • 例子

      interface MyInterface{
      public static final String FIELD =“Value”;
      public abstract void method();

      }

  • 接口一种标准

  • 接口是一种标准

接口与类的异同

  • 相同:

    • 可编译成字节码文件
    • 不能创建对象
    • 可以作为引用类型
    • 具备Object类中所定义的方法
  • 不同

    扫描二维码关注公众号,回复: 10205437 查看本文章
    • 所有属性都是公开静态常量,隐式使用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

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

思维导图

在这里插入图片描述

发布了32 篇原创文章 · 获赞 9 · 访问量 3139

猜你喜欢

转载自blog.csdn.net/weixin_43501566/article/details/104760551