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方法:
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基础知识点补充---二维数组 首先定义一个二维数组 int[][] ns={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} }; 实现遍 ...
- Java基础知识点(四)
前言:记录Java基础知识点,方便熟悉与掌握. 1.面向对象的"六原则一法则" “六原则一法则”:单一职责原则.开闭原则.依赖倒转原则.里氏替换原则.接口隔离原则.合成聚合复用原则 ...
- Java基础知识点(三)
前言:准备将Java基础知识点总结成一个系列,用于平常复习并加深理解.每篇尽量做到短小精悍,便于阅读. 1.Math类中相关函数 Math.floor(x):返回不大于x的最大整数.eg:Math.f ...
- Java基础知识点(一)
前言:本篇随笔,主要记录Java的基础知识点,不管是用于项目或者面试中,笔者认为都非常有用,所以将持续更新...... 1.Java的访问权限 Java中有四种访问权限:默认访问权限.public.p ...
- Java基础知识点总结
前言 本文主要是我之前复习Java基础原理过程中写的Java基础知识点总结.Java的知识点其实非常多,并且有些知识点比较难以理解,有时候我们自以为理解了某些内容,其实可能只是停留在表面上,没有理解其 ...
- JAVA基础知识点总结(全集)
1.JAVA简介 1.1java体系结构:j2se,javaweb,j2ee 1.2java特点:平台无关(虚拟机),垃圾回收(使得java更加稳定) 1.3 JDK与JRE,JDK:java开发环境 ...
- java 基础知识二 基本类型与运算符
java 基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...
- java基础(二章)
java基础(二章) 一,变量 1.变量是内存中的一个标识符号,用于存储数据 2.变量命名规则 l 必须以字母.下划线 _ .美元符号 $ 开头 l 变量中,可以包括数字 l 变量中,不能出现特 ...
- Java基础十二--多态是成员的特点
Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...
随机推荐
- Java集合性能分析-疯狂Java讲义
一.各Set实现类的性能分析 HashSet和TreeSet是Set的两个典型实现.HashSet的性能总是比TreeSet好(特别是最常用的添加.查询元素等操作),因为TreeSet需要额外的红黑树 ...
- 【Linux命令】grep命令
1.作用 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全 ...
- 汇编语言--微机CPU的指令系统(五)(字符串操作指令)
(11)字符串操作指令 字符串操作指令的实质是对一片连续存储单元进行处理,这片存储单元是由隐含指针DS:SI或ES:DI来指定的.字符串操作指令可对内存单元按字节.字或双字进行处理,并能根据操作对象的 ...
- Java并发编程学习:线程安全与锁优化
本文参考<深入理解java虚拟机第二版> 一.什么是线程安全? 这里我借<Java Concurrency In Practice>里面的话:当多个线程访问一个对象,如果不考虑 ...
- canvas-7global.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- TTS 文字转语音 ekho
1.源码下载 使用svn客户端,执行如下命令下载 svn co https://svn.code.sf.net/p/e-guidedog/code/ 2.官方网站查看说明 http://www.egu ...
- 用户 'XXX\SERVERNAME$' 登录失败。 原因: 找不到与提供的名称匹配的登录名。 [客户端: ]
一工厂的中控服务器遇到了下面Alert提示,'XXX\SERVERNAME$' XXX表示对应的域名, SERVERNAME$(脱敏处理,SERVERNAME为具体的服务器名称+$),而且如下所示, ...
- java----八种排序算法
1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数……直 ...
- 孟岩:通证(token)和通证经济的目的在于改善现有经济的效率性
孟岩是最早将token翻译成为通证的区块链大咖,这个翻译已经得到到了越来越人的认可.原来它叫代币,孟岩建议把它翻译成通证.以下是孟岩关于通证的注解. (孟岩,柏链道捷CEO,CSDN副总裁,区块链通证 ...
- Win10 - MySQL-zip安装方法
Win10 - MySQL-zip安装方法 安装步骤 1.下载,到MySQL官网:https://dev.mysql.com/downloads/mysql/ 2.解压安装包 解压下载的安装包,放到你 ...