zoukankan      html  css  js  c++  java
  • JAVA基础知识点整理(四)

    抽象类和接口的区别

    • 抽象类使用abstract关键字修饰;接口使用interface修饰。
    • 抽象类中有构造方法(不写会有隐式构造方法),但不能实例化;接口没有构造方法。
    • 抽象类中可以有非抽象方法,接口中一般只有抽象方法。
    • 抽象类中可以有变量;接口中只能是常量
    • 抽象类只能单继承类;接口可以继承多个接口
    • 实现类只能继承一个抽象类;但可以实现多个接口

    ==和equals的区别

    (1)对于基本数据类型,只能使用==比较其数值大小,equals()是Object类中的方法,只有引用数据类型才能使用,基本数据类型无法使用

    (2)对于引用数据类型

       (2.1)使用==比较的是两个引用对象的地址是否相同,即两个引用变量是不是指向同一个对象
        
       (2.2)equals()方法用来比较对象的内容是否相同,比较的前提条件是自定义的类要重写equals()方法,因为Object类的equals()方法默认比较的是引用变量的地址

    String和StringBuffer的区别

    (1)String是内容不可变类,但其指向可以改变

    (2)StringBuffer是内容可变类,适合于对字符串的频繁修改操作

    StringBuffer和StringBuilder的区别

    (1)StringBuffer和StringBuilder都是内容可变的字符串缓冲区,都适合于对字符串的频繁修改操作

    (2)StringBuffer是老类,线程安全的(同步的),执行效率低

       StringBuilder是新类,非线程安全的(异步的),执行效率高

    throw和throws的区别

    (1)throw出现在方法内部真实抛出一个异常对象

    (2)throws出现在方法原型后面,声明该方法可能抛出的异常类型,可以有多个,用逗号分隔

    何时使用捕获异常,何时使用抛出异常

    (1)只抛不try

       定义功能方法的功能实现本身没有问题,只是由于调用者传递的参数导致的错误,需要将异常抛出给调用者处理,而不要自行处理,这种情况叫只抛不try

    (2)只try不抛

       (2.1)在继承关系中,子类重写父类方法时,子类方法抛出的异常类型要小于或者等于父类方法抛出的异常类型,因此对于非父类异常及其子类,只能自行捕获并处理,这种情况也是

            Thread类的run()方法不会抛出任何异常  public void run()

            HttpServlet类的doGet()方法,只能抛出ServletException和IOException异常
              protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException                          
     
      (2.2)如果抛出的异常会影响到和用户的交互,这时就应该自行捕获并处理异常,而不要将异常抛到用户界面上
     
    (3)实际开发中,两种方式可以结合使用,既在方法中捕获异常,以便记录日志信息,又将异常重新封装,再抛出给调用方去处理

    final,finally,finalize的区别

    (1)final是Java中的修饰符,表示最终的,可以用在类,属性,方法,局部变量,方法形参上

    (2)finally是异常处理中的关键字,无论是否产生异常,都要执行finally块中的代码

    (3)finalize是Object类的方法,该方法会在垃圾回收器回收对象前被调用

    数组和集合的区别

    相同点---都是引用类型数据,都能存储多个数据

    不同点

    (1)数组只能存储相同数据类型的数据,集合可以存放任意类型的数据,使用了泛型后,可以限定集合元素的数据类型

    (2)数组中的元素可以是基本数据类型,集合中的元素都是引用数据类型

    (3)数组长度一经定义后固定不变,集合长度可以动态改变

    Collection接口和Collections类的区别

    Collection接口是List和Set的父接口,用来存放单个元素的容器
    Collections类是集合的实用类,提供集合操作的各种实用的静态方法

    List,Set,Map三个接口的区别

    List接口---元素有序,允许重复,可以按照索引随机访问元素
    Set接口---元素无序,不允许重复,只能通过迭代器遍历元素
    Map接口---存放键-值对的集合,键不允许重复,值允许重复,可以对键,值,以及键-值对所对应的集合进行迭代遍历

    ArrayList和LinkedList的区别

    ArrayList类---内部使用容量可变的动态数组表示,查找指定元素方便,对元素进行增删改麻烦
    LinkedList类---内部使用双向循环链表表示,对元素进行增删改方便,查找指定元素麻烦

    ArrayList和Vector的区别

    ArrayList类---新类,不保证线程同步,以1.5倍增容
    Vecor类---老类,保证线程同步,以2倍增容

    HashSet和HashMap的区别

    HashSet内部组合了一个的HashMap,该map对象的Key存储HashSet中元素,而Value存储一个无意义的哑对象
    HashSet类中的方法都委托给内部的map对象执行
    Hash/哈希/散列查找---基于地址值的查找,而不是基于内容的查找

    HashSet和HashMap如何保证集合中的元素没有重复

    HashSet和HashMap进行存取元素时都是基于哈希查找机制的,插入新的元素时,先比较要插入元素的hashCode在集合中是否存在,如果存在,再比较二者的内容是否相同(即调用equals()方法返回true),如果也相同,则认为集合中存在此元素,则不允许插入,否则允许插入

    因此,自定义的类,如果需要保存在HashSet中,则必须重写hashCode()和equals()方法,才能保证集合中的元素不允许重复

    HashMap和Hashtable的区别

    HashMap类---新类,不保证线程同步,允许null键和null值
    Hashtable类---老类,保证线程同步,不允许null键和null值

    HashSet和TreeSet的区别

    HashSet是Set接口的实现类,是基于哈希查找算法的无序的集合类
    SortedSet接口是Set的子接口,可以实现自然排序或按照指定的比较器排序的功能
    TreeSet是SortedSet接口的实现类,是基于排序二叉树算法的可排序的集合类

    HashMap和TreeMap的区别

    HashMap是Map接口的实现类,是基于哈希查找算法的映射类
    SortedMap接口是Map的子接口,可以实现自然排序或按照指定的比较器排序的功能
    TreeMap是SortedMap接口的实现类,是基于排序二叉树算法的可排序的映射类
    LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序

    HashSet和LinkedHashSet的区别

    LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现
    此实现与HashSet的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,即按照将元素插入到集合中的顺序(插入顺序)进行迭代
    此实现可以让客户避免未指定的、由HashSet提供的通常杂乱无章的排序工作,而又不致引起与TreeSet关联的成本增加

    HashMap和LinkedMap的区别

    LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序
    此实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)进行迭代
    此实现可以让客户避免未指定的、由HashMap提供的通常为杂乱无章的排序工作,而又不致引起与TreeMap关联的成本增加

  • 相关阅读:
    jquery
    模板库
    Luogu P1902 刺杀大使
    8.20模拟赛再次观光记
    Luogu P1122 最大子树和
    Luogu P1470 最长前缀 Longest Prefix
    8.18爆炸记
    Luogu P1388 算式
    Luogu P1103 书本整理
    8.17
  • 原文地址:https://www.cnblogs.com/sheng-se/p/14377702.html
Copyright © 2011-2022 走看看