1.Java API 简介

       Java 的核心 API 是非常庞大的,这给开发者来说带来了很大的方便。所谓的 API 就是一些已经写好、可直接调用的类库。Java 里有非常庞大的 API,其中有一些类库是我们必须得掌握的,只有熟练掌握了 Java 一些核心的 API,我们才能更好的使用 Java。

java.lang包 java.lang包在哪里_字符串

 在程序中,java.lang 包并不需要像其他包一样需要import关键字进行引入。系统会自动加载,所以我们可以直接取用其中的所有类。下面我们就来详细地学习一下 java.lang 包吧。

 

2. java.lang 包装类

       我们都知道 java 是一门面向对象的语言,类将方法和属性封装起来,这样就可以创建和处理相同方法和属性的对象了。但是 java 中的基本数据类型却不是面向对象的,不能定义基本类型的对象。那如果我们想像处理对象的方式处理基本类型的数据,调用一些方法怎么办呢?

其实 java 为每个基本类型都提供了包装类:

java.lang包 java.lang包在哪里_java.lang包_02

  在这八个类名中,除了Integer和Character类以后,其它六个类的类名和基本数据类型一致,只是类名的第一个字母大写。

 

2.1 Integer 类

java.lang 包中的 Integer 类、Long 类和 Short 类都是 Number 的子类,他们的区别在于不同子类里面封装着不同的数据类型,比如 Integer 类包装了一个基本类型 int。其包含的方法基本相同。

我们以 Integer 类为例。 Integer 构造方法有两种:

  1. Integer(int value) ,以 int 型变量作为参数创建 Integer 对象。例如Integer a = new Integer(10);
  2. Integer(String s) ,以 String 型变量作为参数创建 Integer 对象,例如Integer a = new Integer("10");

下面列举一下 Integer 的常用方法:

java.lang包 java.lang包在哪里_API_03

2.2 Character 类

Character 类在对象中包装一个基本类型 char 的值。Character 类型的对象包含类型为 char 的单个字段。

Character 包装类的常用方法:

java.lang包 java.lang包在哪里_API_04

例子:

java.lang包 java.lang包在哪里_java_05

java.lang包 java.lang包在哪里_API_06

2.3 Boolean 类

Boolean 类将基本类型为 boolean 的值包装在一个对象中。一个 Boolean 类型的对象只包含一个类型为 boolean 的字段。

Boolean 类的构造方法也有两个:

  1. Boolean(boolean value),创建一个表示 value 参数的 Boolean 对象,如Boolean b = new Boolean(true)
  2. Boolean(String s),如果 String 参数不为 null 且在忽略大小写时等于 "true",创建一个表示 true 值的 Boolean 对象,如Boolean b = new Boolean("ok"),为 false。

Boolean 包装类的常用方法:

java.lang包 java.lang包在哪里_API_07

实例:

java.lang包 java.lang包在哪里_java_08

2.3 java.lang 类 String

我们经常使用 String 类来定义一个字符串。字符串是常量,它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。

String 对象的初始化格式有如下两种:

java.lang包 java.lang包在哪里_字符串_09

String 类具有丰富的方法,比如计算字符串的长度、连接字符串、比较字符串、提取字符串等等。

 

2.3.1 计算字符串长度

length()方法

java.lang包 java.lang包在哪里_java.lang包_10

2.3.2 字符串比较

equals() 方法,该方法的作用是判断两个字符串对象的内容是否相同。如果相同则返回true,否则返回false。

equals() 方法比较是从第一字符开始,一个字符一个字符依次比较。

java.lang包 java.lang包在哪里_API_11

 

那如果我想忽略掉大小写关系,比如:java 和 Java 是一样的,我们怎么办呢?我们可以调用equalsIgnoreCase()方法,其用法与 equals 一致,不过它会忽视大小写。

比如:

java.lang包 java.lang包在哪里_字符串_12

而使用"=="比较的是两个对象在内存中存储的地址是否一样。例如:

String s1 = "abc";

String s2 = new String("abc");

boolean b = (s1 == s2);

则变量b的值是false,因为s1对象对应的地址是"abc"的地址,而s2使用new关键字申请新的内存,所以内存地址和s1的"abc"的地址不一样,所以获得的值是false。

2.3.3 字符串连接

字符串连接有两种方法:

  1. 使用+,比如String s = "Hello " + "World!"
  2. 使用 String 类的 concat() 方法

代码示例:

java.lang包 java.lang包在哪里_API_13

而且使用+进行连接,不仅可以连接字符串,也可以连接其他类型。但是要求进行连接时至少有一个参与连接的内容是字符串类型。

2.3.4 charAt()方法

charAt()方法的作用是按照索引值(规定字符串中第一个字符的索引值是0,第二个字符的索引值是1,依次类推),获得字符串中的指定字符。例如:

java.lang包 java.lang包在哪里_字符串_14

 

则变量c的值是'b'。

2.3.5 字符串常用提取方法

java.lang包 java.lang包在哪里_API_15

说明:在字符串中,第一个字符的索引为0,子字符串包含beginindex的字符,但不包含endindex的字符。

我们来写一些代码,验证一下上面的方法吧

java.lang包 java.lang包在哪里_API_16

2.3.6 StringBuffer

      String 类的字符串创建后是不能够改变的。 

例如:

java.lang包 java.lang包在哪里_java_17

String 的不变性的机制显然会在 String 常量内有大量的冗余。比如我创建一个循环,使字符'1'依次连接到'n',那么系统就得创建 n+(n-1) 个 String 对象。那有没有可变的 String 类呢?

StringBuffer 类是可变的。它是 String 的对等类,它可以增加和编写字符的可变序列,并且能够将字符插入到字符串中间或附加到字符串末尾(当然是不用创建其他对象的,这里建议大家去看一看 String 类与 StringBuffer 类的区别,理解一下他们在内存中的存储情况)

先上 StringBuffer 的构造方法:

java.lang包 java.lang包在哪里_API_18

StringBuffer类的常用方法:

java.lang包 java.lang包在哪里_字符串_19

上面的方法中我们选择几个,来写写代码吧:

java.lang包 java.lang包在哪里_API_20

2.4 java.lang 类 Math

我们在编程的过程中,经常对一些数字进行数学操作,比如我们想要求绝对值或余弦什么的。那这些方法是否需要我们自己实现吗?其实在 java.lang 里的 Math 类Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。我们就来学习一下吧!

先认识一些方法吧:

java.lang包 java.lang包在哪里_字符串_21

上面都是一些常用的方法,以后还会用到极坐标、对数等,就去查一查手册吧。

我们来看看部分方法的示例代码:

java.lang包 java.lang包在哪里_java_22

2.5 java.lang 类 Class

Class 类的实例表示正在运行的 Java 应用程序中的类或接口。在 Java 中,每个 Class 都有一个相应的 Class 对象,即每一个类,在生成的.class文件中,就会产生一个 Class 对象,用于表示这个类的类型信息。我们获取 Class 实例有三种方法:

  1. 利用对象调用 getClass()方法获取该对象的 Class 实例
  2. 使用 Class 类的静态方法 forName(String className),用类的名字获取一个 Class 实例
  3. 运用.class的方式来获取 Class 实例,对于基本数据类型的封装类,还可以采用.TYPE来获取相对应的基本数据类型的 Class 实例

java.lang包 java.lang包在哪里_API_23

class 类没有共有的构造方法,它由 JVM 自动调用。class 类的方法在这里就不细讲了,有 兴趣的可以自己查询一下。

2.6 java.lang 类 Object

Object 类是所有类的父类,所有对象(包括数组)都实现这个类的方法。所以在默认的情况下,我们定义的类扩展自 Object 类,那我们当然可以调用和重写 Object 类里的所有方法了。

我们看一下 Object 类里都定义了哪些方法。

java.lang包 java.lang包在哪里_java_24

这个也不细讲了,各位可以自行验证一下上面的方面,如果有兴趣,也可以深入了解一下里面的其他方法。