zoukankan      html  css  js  c++  java
  • Java基础知识点(二)

    前言:Java的基础知识点不能间断。


    1.Array和ArrayList的区别

    关于Array的用法,参看:http://blog.csdn.net/b_11111/article/details/53573742

    Array为java.lang.reflect包下的一个类,提供了动态创建和访问数组的方法。可以包含基本数据类型和对象类型。大小固定,因为数组在创建时就确定了长度。

    ArrayList是List接口的实现。只能包含对象类型,大小可动态变化,元素可以为null。默认大小(容量)为10。线程不安全。

    扩容时:int newCapacity = oldCapacity + (oldCapacity >> 1); 相当于扩大1.5倍。

    ArrayList源码分析传送门:ArrayList源码分析

    2.HashSet和LinkedHashSet

    HashSet的实现原理,参看:http://zhangshixi.iteye.com/blog/673143

    HashSet的主要特点:

    1)HashSet继承AbstractSet,实现Set接口。

    2)无序,允许null值。

    3)基于HashMap的实现。所以线程不安全。

    LinkedHashSet的实现原理,参看:http://zhangshixi.iteye.com/blog/673319

    LinkedHashSet的主要特点:

    1)LinkedHashSet继承HashSet,实现Set接口。

    2)有序,插入顺序,允许null值,因为继承HashSet。

    3)线程不安全。

    3.HashMap与LinkedHashMap

    HashMap在Java基础知识点(一)中已有相关介绍,这里主要介绍LinkedHashMap。

    LinkedHashMap的实现原理,参看:http://zhangshixi.iteye.com/blog/673789

    LinkedHashMap的主要特点:

    1)LinkedHashMap继承HashMap,实现Map接口。

    2)有序,插入顺序,允许null值。

    3)线程不安全。

    3.装箱与拆箱

    关于装箱与拆箱,具体细节,参看:http://www.cnblogs.com/dolphin0520/p/3780005.html

    要点:

    从jdk1.5开始,提供了自动装箱的功能。如Integer i=10,该语句会自动创建对应的Integer对象,这就是装箱。

    而拆箱,则与之相反,如下代码:

    Integer i=10;//装箱

    int x=i;//拆箱

    简言之,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。

    注:

    1)装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的 xxxValue方法实现的。

    2)Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的。

         当装箱的值在[-128,127]区间时,首先会去缓存中查找此值。如果存在,则直接返回该值引用,如果不存在则创建新的对象。

         当装箱值不在[-128,127]区间时,则直接创建新的对象。

         特别对于Character对象,进行装箱操作是,是判断值是否小于或等于127,而不是从[-128,127]区间取值。

       Double、Float的valueOf方法的实现是类似的。

         这两个类型的valueOf方法,在装箱时,会直接创建新的对象。(从源码中可以直接看出)

         因为在某个范围内的整型数值的个数是有限的,而浮点数却不是。

    3)特别指出Boolean类型,其valueOf方法:

    1 public static Boolean valueOf(boolean b) {
    2         return (b ? TRUE : FALSE);
    3     }

     其中,上述标记的TRUE和FALSE为两个静态变量:

    1  public static final Boolean TRUE = new Boolean(true);
    2 
    3  public static final Boolean FALSE = new Boolean(false);

    注:1)在用基本类型包装对象的equals方法时,首先需判断被比较的类型是否相同,而不会进行类型的转换。

      2)对于基本数据类型的包装类,在进行算术操作的时候,会进行自动拆箱操作,然后对数值进行计算。

    4.深拷贝与浅拷贝

    关于深拷贝与浅拷贝,参看:http://www.cnblogs.com/Jtianlin/p/4605477.html

    深拷贝:对象及其关联的内容都会进行一份拷贝。

    浅拷贝:对于基本数据类型的变量会重新复制一份,而对于引用类型的变量只是对引用进行拷贝。所以浅拷贝修改一个对象会引发另一个对象的修改。

    5.接口和抽象类

    关于接口和抽象类,参考:http://www.cnblogs.com/dolphin0520/p/3811437.html

    关键点:

    抽象类:

    1)由abstract修饰的类,不能直接创建对象,需要继承。

    2)不一定有抽象方法(抽象方法必须由public或protected修饰,默认为public)。

    3)可以拥有普通变量和方法,毕竟它是一个类。

    4)是一种对事物的抽象。

    接口:

    1)由interface修饰,需由类去实现。

    2)可以含有变量和方法,但方法必须是抽象的,也就说不能有具体实现。

    3)接口中变量会被隐式指定为public static final(且只能是用public static final修饰),方法会被隐式地指定为public abstract方法(且只能是public abstract方法)。

    4)是一种对行为的抽象。


    by Shawn Chen,2018.3.21日,下午。


    相关内容

    Java基础知识点(一)

    Java基础知识点(三)

    Java基础知识点(四)

  • 相关阅读:
    iOS 完整学习路线-(基本)
    iOS不要在任性的年纪 选择安逸
    swift晋级之路
    ios晋级之路-一些需要注意的地方
    ios晋级之路-tableView数据源方法详解
    ios晋级之路-URL Scheme使用和指南
    数据结构-链表C语言实现
    数据结构-链表插入节点
    ios晋级之路-本地存储
    html5晋级之路-bootstrap css代码
  • 原文地址:https://www.cnblogs.com/developer_chan/p/8603377.html
Copyright © 2011-2022 走看看