java lang 包_java.lang 包简介

说明:文章所有内容均截选自实验楼教程:【JDK 核心 API】

文章带你学习 java.lang 包内的包装类以及 String 类、Math 类、Class 类、Object 类的相关知识。

一、Java API 简介

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

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

二、java.lang 包装类

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

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

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

1 Integer 类

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

我们以 Integer 类为例。 Integer 构造方法有两种:Integer(int value) ,以 int 型变量作为参数创建 Integer 对象。例如Integer a = new Integer(10);

Integer(String s) ,以 String 型变量作为参数创建 Integer 对象,例如Integer a = new Integer("10")

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

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

public class IntegerTest {

public static void main(String[] args){

//初始化一个 Integer 类实例

Integer a = new Integer("10");

//初始化一个 Integer 类实例

Integer b = new Integer(11);

//判断两个数的大小

System.out.println(a.compareTo(b));

// 判断两个实例是否相等

System.out.println(a.equals(b));

//将 a 转换成 float 型数

float c = a.floatValue();

System.out.println(c);

String d = "10101110";

//将字符串转换为数值

//parseInt(String str) 和 parseInt(String str,int radix) 都是类方法,由类来调用。

//后一个方法则实现将字符串按照参数 radix 指定的进制转换为 int,

int e = Integer.parseInt(d, 2);

System.out.println(e);

}

}

输出结果:

大家自己试一试吧。

2 Character 类

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

Character 包装类的常用方法:

大家可以参考一下代码,验证一下上面的方法(同学们一定要亲自打哦,学代码的最好方式是实操)

public class CharacterTest {

public static void main(String[] args){

int count;

//定义了一个字符数组

char[] values = {'*', '_', '%', '8', 'L', 'l'};

//遍历字符数组

for (count = 0; count < values.length; count++){

if(Character.isDigit(values[count])){

System.out.println(values[count]+"是一个数字");

}

if(Character.isLetter(values[count])){

System.out.println(values[count]+ "是一个字母");

}

if(Character.isUpperCase(values[count])){

System.out.println(values[count]+"是大写形式");

}

if(Character.isLowerCase(values[count])){

System.out.println(values[count]+"是小写形式");

}

if(Character.isUnicodeIdentifierStart(values[count])){

System.out.println(values[count]+"是Unicode标志符的第一个有效字符");

}

}

//判断字符c是否是空白字符

char c = ' ';

System.out.println("字符c是空白字符吗?"+Character.isWhitespace(c));

}

}

输出结果:

3 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"),为 true。

Boolean 包装类的常用方法:

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

public class BooleanTest {

public static void main(String[] args) {

// Boolean(boolean value)构造方法

Boolean a = new Boolean(true);

System.out.println("a为"+a);

// Boolean(String s)构造方法

Boolean b = new Boolean("true");

Boolean c = new Boolean("OK");

System.out.println("b为"+b);

System.out.println("c为"+c);

System.out.println("a的booleanValue()为"+a.booleanValue());

System.out.println("a和b相等吗?"+a.equals(b));

}

}

输出结果:

其他的都差不多,大家可以自行去验证和参考 Java 类库的手册吧。

三、java.lang 类 String

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

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

String s0 = "abc";

String s1 = new String("abd");

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

1 计算字符串长度

length()方法

//方法原型

public int length(){

}

调用方法:字符串标识符.length();

返回一个int类型的整数(字符串中字符数,中文字符也是一个字符)。例如:

String s1 = "abc";

String s2 = "Java语言";

int len1 = s1.length();

int len2 = s2.length();

则变量len1的值是3,变量len2的值是6。

2 字符串比较

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

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

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

比如:

public class StringTest {

public static void main(String[] args){

String s = new String("Java");

String m = "java";

System.out.println("用equals()比较,java和Java结果为"+s.equals(m));

System.out.println("用equalsIgnoreCase()比较,java和Java结果为"+s.equalsIgnoreCase(m));

}

}

输出结果:

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

String s1 = "abc";

String s2 = new String("abc");

boolean b = (s1 == s2);

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

3 字符串连接

字符串连接有两种方法:使用+,比如String s = "Hello " + "World!"

使用 String 类的 concat() 方法

代码示例:

String s0 = new String("Hello ");

String s1 = "World" + "!"; //+号连接

String s2 = s0.concat(s1); //concat()方法连接

System.out.println(s2);

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

4 charAt()方法

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

String s = "abc";

char c = s.charAt(1);

则变量c的值是'b'。

5 字符串常用提取方法

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

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

public class StringTest {

public static void main(String[] args) {

String s = "abcdefabc";

System.out.println("字符a第一次出现的位置为"+s.indexOf('a'));

System.out.println("字符串bc第一次出现的位置为"+s.indexOf("bc"));

System.out.println("字符a最后一次出现的位置为"+s.lastIndexOf('a'));

System.out.println("从位置3开始到结束的字符串"+s.substring(3));

System.out.println("从位置3开始到6之间的字符串"+s.substring(3,6));

}

}

输出结果:

6 StringBuffer

同学们,String 类的字符串创建后是不能够改变的。有些同学都不太明白,我们通过代码看一看吧。

String s = "Hello ";

s.concat("World!"); //字符串连接

System.out.println(s); //输出s,还是"Hello "

s = s.concat("World!"); //把字符串对象连接的结果赋给了s引用

System.out.println(s); //输出s,变成了"Hello World!"

/*

上述三条语句其实产生了3个String对象,"Hello ","World!","Hello World!"。

第2条语句确实产生了"Hello World"字符串,但是没有指定把该字符串的引用赋给谁,因此没有改变s引用。

第3条语句根据不变性,并没有改变"Hello ",JVM创建了一个新的对象,把"Hello ","World!"的连接赋给了s引用,因此引用变了,但是原对象没变。

*/

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

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

先上 StringBuffer 的构造方法:

StringBuffer类的常用方法:

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

public class StringTest {

public static void main(String[] args){

//定义和初始化一个StringBuffer类的字串s

StringBuffer s = new StringBuffer("I");

//在s后面添加字串" java"

s.append(" java");

//在s[1]的位置插入字串

s.insert(1, " love");

String t = s.toString(); //转为字符串

System.out.println(t);

}

}

输出结果为: I love java

其他的方法,请同学们一定要自己亲自一一验证一下!

在这里只介绍了 String 类常用的方法,其他方法可参照 JDK 文档。

四、java.lang 类 Math

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

先认识一些方法吧:

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

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

public class MathTest {

public static void main(String[] args) {

System.out.println(Math.abs(-12.7));

System.out.println(Math.ceil(12.7));

System.out.println(Math.rint(12.4));

System.out.println(Math.random());

}

}

输入结果:

五、java.lang 类 Class

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

使用 Class 类的静态方法 forName(String className),用类的名字获取一个 Class 实例

运用.class的方式来获取 Class 实例,对于基本数据类型的封装类,还可以采用.TYPE来获取相对应的基本数据类型的 Class 实例

Class 类对象

Class 类对象访问

Class 类对象访问结果

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

想要了解更多关于 Class 对象的信息,可以参考一下这里。

六、java.lang 类 Object

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

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

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

同学们如果感觉 Eclipse 上的字体大小不合适,木木教大家来自定义代码编辑框中的文字样式和大小。

1、在菜单栏下点击Window选择Perferences

2、下拉 General下的Appearance选中Colors and Fonts

3、这里面有不同应用场景下代码或系统日志等字体的样式和大小,我们可以选中java编辑里面的字体样式

4、选中字体的应用场景后,选中右边的Edit,便可编辑它的字体和大小了

最后:

文章所有内容截选自实验楼教程:【JDK 核心 API】第一节,该教程总共7节,主要是学习包括 java.lang 包,java.util 包,java.io 包以及泛型的相关知识,剩下6节的列表是:java.util 包

Java 集合框架

文件操作/随机访问文件

泛型想要学习更多Java实战项目教程,点击这里进行查看~

你也可以点击【Java学习路径】,系统性学习Java~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值