Java.lang 包装类
Java.lang 包装类
原始数据类型 | 包装类 |
---|---|
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 构造方法有两种:
- Integer(int value) ,以 int 型变量作为参数创建 Integer 对象。例如 Integer a = new Integer(10);
- Integer(String s) ,以 String 型变量作为参数创建 Integer 对象,例如Integer a = new Integer(“10”)
下面是Integer的常用方法
方法 | 返回值 | 功能描述 |
---|---|---|
byteValue() | byte | 以byte类型返回该Integer的值 |
compareTo(Integer anotherInteger) | int | 在数字上比较Integer对象。如果这两个值相等,则返回0 如果调用对象的值小于anotherInteger的数值,则返回负值 如果调用对象的数值大于anotherInteger的数值,则返回正值 |
equals(Object IntegerObj) | boolean | 比较此对象与指定对象是否相等 |
intValue() | int | 以int型返回此Integer对象 |
shortValue() | short | 以short型返回此Integer对象 |
longValue() | long | 以long 型返回此Integer对象 |
floatValue() | float | 以float型返回此Integer对象 |
doubleValue() | double | 以double型返回此Integer对象 |
toString() | String | 返回一个表示该Integer值的String对象 |
valueOf(String str) | Integer | 返回保存指定的String值的Integer对象 |
parseInt(String str) | int | 将字符串参数作为有符号的十进制整数进行解析 |
代码示例:
1 | public class IntegerTest { |
Character
Character 类在对象中包装一个基本类型 char 的值。Character 类型的对象包含类型为 char 的单个字段。
Character 常用方法
方法 | 返回值 | 说明 |
---|---|---|
isDigit(char ch) | boolean | 确定字符是否为数字 |
isLetter(char ch) | boolean | 确定字符是否为字母 |
isLowerCase(char ch) | boolean | 确定字符是否为小写字母 |
isUpperCase(char ch) | boolean | 确定字符是否为大写字母 |
isWhitespace(char ch) | boolean | 确定字符是否为空白字符 |
isUnicodeIdentifierStart(char ch) | boolean | 确定是否运行将指定字符作为Unicode标识符中的首字符 |
示例方法
1 | public class CharacterTest { |
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。
Boolean 常用方法
方法 | 返回值 | 说明 |
---|---|---|
booleanValue() | boolean | 将Boolean 对象的值以对应的boolean值返回 |
equals(Object obj) | boolean | 判断调用该方法的对象与 obj 是否相等。当且仅当参数不是 null,而且与调用该方法的对象一样都表示同一个 boolean 值的 Boolean 对象时,才返回 true |
parseBoolean(String s) | boolean | 将字符串参数解析为 boolean 值 |
toString() | String | 返回表示该 boolean 值的 String 对象 |
valueOf(String s) | Boolean | 返回一个用指定得字符串表示值的 boolean 值 |
示例代码
1 | public class BooleanTest { |
String
我们经常使用 String 类来定义一个字符串。字符串是常量,它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。
String 对象的初始化格式有如下两种:
1 | String s0 = "abc"; |
String 类具有丰富的方法,比如计算字符串的长度、连接字符串、比较字符串、提取字符串等等。
length()
计算字符串长度
调用方法: 字符串标识符。length(); 返回一个 int 类型的整数(字符串中字符数,中文字符也是一个字符)。例如:
1 | String s1 = "abc"; |
则变量 len1 的值是 3,变量 len2 的值是 6。
equals()
该方法的作用是判断两个字符串对象的内容是否相同。如果相同则返回 true,否则返回 false。
equals() 方法比较是从第一字符开始,一个字符一个字符依次比较。
那如果我想忽略掉大小写关系,比如:java 和 Java 是一样的,我们怎么办呢?我们可以调用equalsIgnoreCase()方法,其用法与 equals 一致,不过它会忽视大小写。
比如:
1 | public class StringTest { |
而使用”==”比较的是两个对象在内存中存储的地址是否一样。例如: String s1 = “abc”; String s2 = new String(“abc”); boolean b = (s1 == s2); 则变量 b 的值是 false,因为 s1 对象对应的地址是”abc”的地址,而 s2 使用 new 关键字申请新的内存,所以内存地址和 s1 的”abc”的地址不一样,所以获得的值是 false。
字符串连接
字符串连接有两种方法:
- 使用 + 比如 String s = “Hello “ + “World!”;
- 使用String类的 concat()方法
示例:
1 | String s0 = new String("Hello "); |
而且使用+进行连接,不仅可以连接字符串,也可以连接其他类型。但是要求进行连接时至少有一个参与连接的内容是字符串类型。
charAt()
charAt()方法的作用是按照索引值(规定字符串中第一个字符的索引值是0,第二个字符的索引值是1,依次类推),获得字符串中的指定字符。
例如:
1 | String s = "abc"; |
字符串常用提取方法
方法 | 返回值 | 功能描述 |
---|---|---|
indexOf(int ch) | int | 搜索字符 ch 第一次出现的索引 |
indexOf(String value) | int | 搜索字符串 value 第一次出现的索引 |
lastIndexOf(int ch) | int | 搜索字符 ch 最后一次出现的索引 |
lastIndexOf(String value) | int | 搜索字符串 value 最后一次出现的索引 |
substring(int index) | String | 提取从位置索引开始到结束的字符串 |
substring(int beginindex, int endindex) | String | 提取 beginindex 和 endindex 之间的字符串部分 |
trim() | String | 返回一个前后不含任何空格的调用字符串的副本 |
说明:在字符串中,第一个字符的索引为 0,子字符串包含 beginindex 的字符,但不包含 endindex 的字符。
示例代码:
1 | public class StringTest { |
StringBuffer
String 类的字符串创建后是不能够改变的。
示例:
1 |
|
String 的不变性的机制显然会在 String 常量内有大量的冗余。比如我创建一个循环,使字符’1’依次连接到’n’,那么系统就得创建 n+(n-1) 个 String 对象。那有没有可变的 String 类呢?
StringBuffer 类是可变的。它是 String 的对等类,它可以增加和编写字符的可变序列,并且能够将字符插入到字符串中间或附加到字符串末尾(当然是不用创建其他对象的,这里建议大家去看一看 String 类与 StringBuffer 类的区别,理解一下他们在内存中的存储情况)
构造方法:
构造方法 | 说明 |
---|---|
StringBuffer() | 构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符 |
StringBuffer(CharSequence seq) | 构造一个字符串缓冲区,它包含与指定的 CharSequence 相同的字符 |
StringBuffer(int capacity) | 构造一个不带字符,但具有指定初始容量的字符串缓冲区 |
StringBuffer(String str) | 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容 |
常用方法:
方法 | 返回值 | 功能描述 |
---|---|---|
insert(int offsetm,Object s) | StringBuffer | 在 offsetm 的位置插入字符串 s |
append(Object s) | StringBuffer | 在字符串末尾追加字符串 s |
length() | int | 确定 StringBuffer 对象的长度 |
setCharAt(int pos,char ch) | void | 使用 ch 指定的新值设置 pos 指定的位置上的字符 |
toString() | String | 转换为字符串形式 |
reverse() | StringBuffer | 反转字符串 |
delete(int start, int end) | StringBuffer | 删除调用对象中从 start 位置开始直到 end 指定的索引(end-1)位置的字符序列 |
replace(int start, int end, String s) | StringBuffer | 使用一组字符替换另一组字符。将用替换字符串从 start 指定的位置开始替换,直到 end 指定的位置结束 |
示例代码:
1 | public class StringTest { |
Math
我们在编程的过程中,经常对一些数字进行数学操作,比如我们想要求绝对值或余弦什么的。那这些方法是否需要我们自己实现吗?其实在 java.lang 里的 Math 类 Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。我们就来学习一下吧!
方法 | 返回值 | 功能描述 |
---|---|---|
sin(double numvalue) | double | 计算角 numvalue 的正弦值 |
cos(double numvalue) | double | 计算角 numvalue 的余弦值 |
acos(double numvalue) | double | 计算 numvalue 的反余弦 |
asin(double numvalue) | double | 计算 numvalue 的反正弦 |
atan(double numvalue) | double | 计算 numvalue 的反正切 |
pow(double a, double b) | double | 计算 a 的 b 次方 |
sqrt(double numvalue) | double | 计算给定值的正平方根 |
abs(int numvalue) | int | 计算 int 类型值 numvalue 的绝对值,也接收 long、float 和 double 类型的参数 |
ceil(double numvalue) | double | 返回大于等于 numvalue 的最小整数值 |
floor(double numvalue) | double | 返回小于等于 numvalue 的最大整数值 |
max(int a, int b) | int | 返回 int 型 a 和 b 中的较大值,也接收 long、float 和 double 类型的参数 |
min(int a, int b) | int | 返回 a 和 b 中的较小值,也可接受 long、float 和 double 类型的参数 |
rint(double numvalue) | double | 返回最接近 numvalue 的整数值 |
round(T arg) | arg 为 double 时返回 long,为 float 时返回 int | 返回最接近 arg 的整数值 |
random() | double | 返回带正号的 double 值,该值大于等于 0.0 且小于 1.0 |
更多方法 请参照 官方api
代码示例:
1 | public class MathTest { |
也许你会觉得简单的计算很枯燥,但在合适的地方用到它们可以让你的程序(比如游戏中飞行轨迹的计算)更加精彩。
实战小项目-生成彩票号码
有了之前的基础,我们来做个更好玩的项目——彩票生成器。目前市面上彩票的种类很多,我们就以大乐透为例吧。大乐透的规则是:从 135 中随机选取 5 个不重复的数字,从 112 中随机选取 2 个不重复的数字,这些数字组成了一个七位数。如果你买的号码与摇出来的号码相同,那么你一夜之间可能就不会当程序员了。
因为彩票号码是随机生成的,所以这个项目中我们也会带大家认识随机数的使用方法。首先请在先创建一个Lottery类。
我们需要用到
1 | import java.util.ArrayList; |
由于彩票号码的前半段和后半段的规则和个数略有不同,所以我们分别创建生成它们的方法。
首先来创建生成前段号码的方法getHeadNumber(),该方法需要从 1 到 36 中随机选取一个数作为号码(即摇号的过程)。对于个位数,为了显示上更整齐,所以我们在其十位再放一个“0”。再者,为了结果更加易读,我们还需要调用Collections.sort()方法对结果进行排序。
示例代码:
1 | public List<String> getHeadNumber() { |
此处用到了Random()方法,在创建一个 Random 对象r后,你可以调用该对象的nextInt()方法得到一个随机数。r.nextInt(amount);中的 amount 是随机数的上限,产生的随机数为 0 到 100(不含 100)的整数。 你可以 了解更多 Random 的用法。
和前半段号码类似,我们接着来写生成后半段号码的方法getRearNum(),代码片段如下:
示例代码:
1 | public List<String> getRearNumber() { |
现在,根据规则我们已经能够产生对应的数字了。再接再厉,我们再做一个生成最终结果的方法,把这两个号段组装成整体的号码,并且按照用户的要求产生多少组号码,在控制台输出它们。
下面给出了这个方法的代码片段:
1 | public void generateLottery(String groupNum) { |
为了验证我们的实现无误,在同一个目录中创建一个名为LotteryTest的测试类,编写其main()方法。在其中创建一个彩票对象并调用其产生号码的方法。
1 | import java.util.Scanner; |
检查一下代码,编译并运行
Class
Class 类的实例表示正在运行的 Java 应用程序中的类或接口。在 Java 中,每个 Class 都有一个相应的 Class 对象,即每一个类,在生成的.class文件中,就会产生一个 Class 对象,用于表示这个类的类型信息。我们获取 Class 实例有三种方法:
利用对象调用 getClass()方法获取该对象的 Class 实例
使用 Class 类的静态方法 forName(String className),用类的名字获取一个 Class 实例
运用.class的方式来获取 Class 实例,对于基本数据类型的封装类,还可以采用.TYPE来获取相对应的基本数据类型的 Class 实例
关于Class 示例代码:
1 | public class ClassDemo{ |
Class 类没有共有的构造方法,它由JVM自动调用.Class类的方法在这里就不细讲了,有兴趣的可以自己查询一下.
Object
Object 类是所有类的父类,所有对象(包括数组)都实现这个类的方法。所以在默认的情况下,我们定义的类扩展自Object类,那我们当然可以调用和重写Object类里面的所有方法.
Object 定义方法 :
方法 | 返回值 | 功能描述 |
---|---|---|
equals(Objectobj) | boolean | 将当前对象实例与给定的对象进行比较,检查它们是否相等 |
finalize() throws Throwable | void | 当垃圾回收期确定不存在对象的更多引用时,由对象的垃圾回收期调用此方法. 通常被子类重写 |
getClass() | Class | 返回当前对象的Class对象 |
toString() | String | 返回此对象的字符创标识 |
wait() throws InterruptedException | void | 在其他线程调用此对象的notify() 方法或 notifyAll() 方法前,使当前线程进入等待状态 |