前言: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方法:

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

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

  public static final Boolean TRUE = new Boolean(true);

  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基础知识点(四)

Java基础知识点(二)的更多相关文章

  1. java基础知识点补充---二维数组

    #java基础知识点补充---二维数组 首先定义一个二维数组 int[][] ns={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} }; 实现遍 ...

  2. Java基础知识点(四)

    前言:记录Java基础知识点,方便熟悉与掌握. 1.面向对象的"六原则一法则" “六原则一法则”:单一职责原则.开闭原则.依赖倒转原则.里氏替换原则.接口隔离原则.合成聚合复用原则 ...

  3. Java基础知识点(三)

    前言:准备将Java基础知识点总结成一个系列,用于平常复习并加深理解.每篇尽量做到短小精悍,便于阅读. 1.Math类中相关函数 Math.floor(x):返回不大于x的最大整数.eg:Math.f ...

  4. Java基础知识点(一)

    前言:本篇随笔,主要记录Java的基础知识点,不管是用于项目或者面试中,笔者认为都非常有用,所以将持续更新...... 1.Java的访问权限 Java中有四种访问权限:默认访问权限.public.p ...

  5. Java基础知识点总结

    前言 本文主要是我之前复习Java基础原理过程中写的Java基础知识点总结.Java的知识点其实非常多,并且有些知识点比较难以理解,有时候我们自以为理解了某些内容,其实可能只是停留在表面上,没有理解其 ...

  6. JAVA基础知识点总结(全集)

    1.JAVA简介 1.1java体系结构:j2se,javaweb,j2ee 1.2java特点:平台无关(虚拟机),垃圾回收(使得java更加稳定) 1.3 JDK与JRE,JDK:java开发环境 ...

  7. java 基础知识二 基本类型与运算符

    java  基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...

  8. java基础(二章)

    java基础(二章) 一,变量 1.变量是内存中的一个标识符号,用于存储数据 2.变量命名规则 l  必须以字母.下划线 _ .美元符号 $ 开头 l  变量中,可以包括数字 l  变量中,不能出现特 ...

  9. Java基础十二--多态是成员的特点

    Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...

随机推荐

  1. Aurelia binding

    今天介绍一下使用Aurelia binding 模块绑定HTML属性/事件的方式.我们依然使用之前创建的代码例子. Aurelia binding 绑定属性或者方法的通用模式就是 XXX.comman ...

  2. 详解bootstrap-fileinput文件上传控件的亲身实践

    经理让我帮服务器开发人员开发一个上传文件功能界面,我就想着以前使用过bootstrap-fileinput插件进行文件上传,很不错.赶紧就撸起来了. 1.下载压缩包.插件地址https://githu ...

  3. js判断当前内容是否为空

    function isValue(o) { return (this.isObject(o) || this.isString(o) || this.isNumber(o) || this.isBoo ...

  4. 熊猫ios手游直播教程 苹果投屏电脑

    如今手游越来越火热,不管是大人小孩都喜欢在闲暇时刻玩一玩游戏,手机屏幕终归还是有点小的,所以有的小伙伴想要将手机投屏到电脑上,岂不是一件很好的事情,iPhone是有镜像投屏功能的,下面给大家分享熊猫i ...

  5. 如何用ABP框架快速完成项目(14) - 结尾? 当然不是, 这只是开始!

    此文当前版本号: 3 最近更新时间: 2018-12-9 04:52   本课程是方向性课程, 目的是避免南辕北辙. 方向盘一旦打正确, 还得需要以下文章去写好具体程序: 前面每篇文章里面的链接, 比 ...

  6. HTML5 & CSS3初学者指南(4) – Canvas使用

    介绍 传统的HTML主要用于文本的创建,可以通过<img>标签插入图像,动画的实现则需要第三方插件.在这方面,传统的HTML极其缺乏满足现代网页多媒体需求的能力.HTML5的到来,带来了新 ...

  7. 24.Odoo产品分析 (三) – 人力资源板块(5) – 出勤(1)

    查看Odoo产品分析系列--目录 安装"出勤"模块,管理员工的上下班打卡. 1. 签到与退签 安装完模块后,点击"出勤"主菜单:  点击中间的签到按钮,实现签到 ...

  8. 转载------35岁开始转变的观念(干了这碗鸡汤再写代码保证没有bug)

    作为一个标准的IT男,从一开始的一线开发,做到管理层,又因为喜爱开发,跳槽继续专注coding,一干就是10多年.有时候就想,这样一直学习,coding,如果能干到老也挺不错的! 不过生活的压力是不会 ...

  9. Android为TV端助力 MediaPlayer的一些使用方法简历

    这里提供一些MediaPlayer的简单方法,方便以后熟练的使用它! 1)如何获得MediaPlayer实例: 可以使用直接new的方式: MediaPlayer mp = new MediaPlay ...

  10. 页面间固定参数,通过cookie传值

    最后在做的页面,比如用户数据(用户头像,名称,年龄)这些信息,因为大部分页面都要用,之前是通过url地址传,另一页面接收.考虑到这样做会让url过长,因此,尝试使用cookie,把固定的值保存在coo ...