Java API 简介
Java 的核心 API 是非常庞大的,这给开发者来说带来了很大的方便。所谓的 API 就是一些已经写好、可直接调用的类库。Java 里有非常庞大的 API,其中有一些类库是我们必须得掌握的,只有熟练掌握了 Java 一些核心的 API,我们才能更好的使用 Java。
我们都知道 java 是一门面向对象的语言,类将方法和属性封装起来,这样就可以创建和处理相同方法和属性的对象了。但是 java 中的基本数据类型却不是面向对象的,不能定义基本类型的对象。那如果我们想像处理对象的方式处理基本类型的数据,调用一些方法怎么办呢?
其实 java 为每个基本类型都提供了包装类:
原始数据类型 包装类
byte(字节) Byte
char(字符) Character
int(整型) Integer
long (长整型) Long
float(浮点型) Float
double (双精度) Double
boolean (布尔) Boolean
short(短整型) Short
在这八个类名中,除了 Integer 和 Character 类以后,其它六个类的类名和基本数据类型一致,只是类名的第一个字母大写。
Integer 类
java.lang 包中的 Integer 类、Long 类和 Short 类都是 Number 的子类,他们的区别在于不同子类里面封装着不同的数据类型,比如 Integer 类包装了一个基本类型 int。其包含的方法基本相同。
Integer 构造方法有两种:
Integer(int value),以 int 型变量作为参数创建 Integer 对象。例如Integer a = new Integer(10);。
Integer(String s),以 String 型变量作为参数创建 Integer 对象,例如Integer a = new Integer(“10”)。
Character 类
Character 类在对象中包装一个基本类型 char 的值。
Character 类型的对象包含类型为 char 的单个字段。
Boolean 类
Boolean 类将基本类型为 boolean 的值包装在一个对象中。一个 Boolean 类型的对象只包含一个类型为 boolean 的字段。
Boolean 类的构造方法也有两个:
Boolean(boolean value),创建一个表示 value 参数的 Boolean 对象,如 Boolean b = new Boolean(true)。
Boolean(String s),如果 String 参数不为 null 且在忽略大小写时等于 “true”, 创建一个表示 true 值的 Boolean 对象,如 Boolean b = new Boolean(“ok”),为 false。
我们经常使用 String 类来定义一个字符串。字符串是常量,它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。
String 对象的初始化格式有如下两种:·
String s0 = "abc";
String s1 = new String("abd");
字符串连接
字符串连接有两种方法:
使用+,比如 String s = "Hello " + “World!”。
使用 String 类的 concat() 方法。
String 类的字符串创建后是不能够改变的
String 的不变性的机制 显然会在 String 常量内有大量的冗余。比如我创建一个循环,使字符’1’依次连接到’n’,那么系统就得创建 n+(n-1) 个 String 对象。那有没有可变的 String 类呢?
StringBuffer 类是可变的。它是 String 的对等类,它可以增加和编写字符的可变序列,并且能够将字符插入到字符串中间或附加到字符串末尾,当然是不用创建其他对象的,这里建议大家去看一看 String 类与 StringBuffer 类的区别,理解一下他们在内存中的存储情况。
Math 类的简单使用
我们在编程的过程中,经常对一些数字进行数学操作,比如我们想要求绝对值或余弦什么的。那这些方法是否需要我们自己实现吗?其实是 java.lang 里的 Math 类。Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数
java.lang 类 Class
Class 类的实例表示正在运行的 Java 应用程序中的类或接口。在 Java 中,每个 Class 都有一个相应的 Class 对象,即每一个类,在生成的 .class 文件中,就会产生一个 Class 对象,用于表示这个类的类型信息。我们获取 Class 实例有三种方法:
一 利用对象调用 getClass() 方法获取该对象的 Class 实例
二 使用 Class 类的静态方法 forName(String className),用类的名字获取一个 Class 实例
三运用.class的方式来获取 Class 实例,对于基本数据类型的封装类,还可以采用.TYPE来获取相对应的基本数据类型的 Class 实例
class 类没有共有的构造方法,它由 JVM 自动调用
java.lang 类 Object
Object 类是所有类的父类,所有对象(包括数组)都实现这个类的方法。所以在默认的情况下,我们定义的类扩展自 Object 类,那我们当然可以调用和重写 Object 类里的所有方法了。
java.util 和 java.time 包介绍
java.util 包提供了一些实用的方法和数据结构。比如日期类 Date,日历类 Calendar 以及随机数类 Random,同时包里还提供了 collection 框架,像堆栈 Stack、向量 Vector、位集合 Bitset 以及哈希表 Hashtable 等表示数据结构的类。而 java.time 包是 java8 新提供的包,里面对时间和日期提供了新的 api,弥补了 java.util 包对日期和时间操作的不足。
Date 类
Date 类表示日期和时间,里面封装了操作日期和时间的方法。Date 类经常用来获取系统当前时间。
但是 Date 类的很多方法自 JDK 1.1 开始就已经过时了。
Random 类
Java 实用工具类库中的类 java.util.Random 提供了产生各种类型随机数的方法。它可以产生 int、long、float、double 以及 Gaussian 等类型的随机数。这也是它与 java.lang.Math 中的方法 Random() 最大的不同之处,后者只产生 double 型的随机数。
集合框架的介绍
我们在超市买东西的时候,如果没有购物车是不是会很麻烦呢?Java 中集合类是一种工具类,就是像购物车一样的容器,存储任意数量的具有共同属性的对象。
我们为什么要用集合呢?一个类的内部有许多相同类型的属性,并且他们的作用与意义是一样的,我们最好用一个类似容器的东西去盛放他们,在类的内部就变得井然有序。所以集合便是在类的内部,发挥对数据进行组织的作用。这样我们便可以简单而快速地搜索大量的条目。有的集合接口,提供了一系列排列有序的元素,并且可以在序列中快速地插入或者删除有关元素。还有一些集合接口,提供了映射关系,可以通过关键字(key)去快速查找到对应的唯一对象,而这个关键字可以是任意类型。
集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大内容:对外的接口、接口的实现和对集合运算的算法。
下图是简化的集合框架关系图:
Collection 接口
因为集合框架中的很多类功能是相似的,所以我们用接口来规范类。Collection 接口是 java 集合框架里的一个根接口。它也是 List、Set 和 Queue 接口的父接口。Collection 接口中定义了可用于操作 List、Set 和 Queue 的方法——增删改查。
Map 接口
Map 接口也是一个非常重要的集合接口,用于存储键/值对。Map 中的元素都是成对出现的,键值对就像数组的索引与数组的内容的关系一样,将一个键映射到一个值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。我们可以通过键去找到相应的值。
value 可以存储任意类型的对象,我们可以根据 key 键快速查找 value。Map 中的键/值对以 Entry 类型的对象实例形式存在。
List 接口与 ArrayList 类
List 是一个接口,不能实例化,需要一个具体类来实现实例化。List 集合中的对象按照一定的顺序排放,里面的内容可以重复。List 接口实现的类有:ArrayList(实现动态数组),Vector(实现动态数组),LinkedList(实现链表),Stack(实现堆栈)。
ArrayList 类实现一个可增长的动态数组,它可以存储不同类型的对象,而数组则只能存放特定数据类型的值。
List 有两种基本的类型,除了 ArrayList 外,还有 LinkedList,LinkedList 类用于创建链表数据结构,两者的对比如下:
ArrayList:它擅长于随机访问元素,但是插入和移除元素时较慢。
LinkedList:它通过代价较低的在 List 中进行插入和删除操作,提供了优化的顺序访问,它在随机访问方面相对较慢,但是它的特性集较 ArrayList 更大。
Set 接口和 HashSet 类
Set 接口也是 Collection 接口的子接口,它有一个很重要也是很常用的实现类——HashSet,Set 是元素无序并且不包含重复元素的 collection(List 可以重复),被称为集。
HashSet 由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。
HashMap 类
HashMap 是基于哈希表的 Map 接口的一个重要实现类。HashMap 中的 Entry 对象是无序排列的,Key 值和 value 值都可以为 null,但是一个 HashMap 只能有一个 key 值为 null 的映射(key 值不可重复)。