java.lang包源码学习
Java.lang包接口摘要
Iterable 接口
参考链接
iterable 的主要作用是实现for each方法,遍历集合的工作依然是iterator来做
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
//遍历例子
list.forEach(s->{
System.out.println(s)
})
Readable接口
参考链接
Readable接口就是为了Scanner类专门创建的一个接口,使得Scanner的入口参数不必限于某个类。实现Readable接口要只需是实现public int read(CharBuffer cb)方法。当方法返回-1时候Scanner类停止读取。
Runnable 接口
参考链接
我们实现多线程,有两种方式, 一种是继承Thread类,一种是实现Runnable接口,但是启动线程必须依赖thread的start方法。
有经验的程序员都会选择实现Runnable接口 ,其主要原因有以下两点:
首先,java只能单继承,因此如果是采用继承Thread的方法,那么在以后进行代码重构的时候可能会遇到问题,因为你无法继承别的类了。
其次,如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。参考链接
Java.lang 包下类摘要
Integer类
Integer是int的包装类,int 常用于局部变量和参数传递的一些简单的数据存储和传递,Integer是包装类,在-128-127之间时Integer和int是一致的,在这个范围之外Integer就会自动创建对象来进行操作了,Integer 提供了非常多的方法来处理int型数据参考链接
常用方法参考链接
- int compareTo(Integer anotherInteger) //在数字上比较两个 Integer 对象。
- boolean equals(Object obj) //比较此对象与指定对象。
- double doubleValue() //以 double 类型返回该 Integer 的值。
- float floatValue() //以 float 类型返回该 Integer 的值。
- int intValue() //以 int 类型返回该 Integer 的值。
- long longValue() //以 long 类型返回该 Integer 的值。
- int parseInt(String s) //将字符串转换成int
- String toBinaryString(int i) //以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。
- String toHexString(int i) //以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。
- String toOctalString(int i) //以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。
- String toString() //返回一个表示该Integer值的String对象。
- Integer valueOf(int i) 返回一个表示指定的 int 值的 Integer 实例。
- Integer valueOf(String s) 返回保存指定的 String 的值的 Integer 对象。
- Integer valueOf(String s, int radix) 返回一个 Integer 对象
装箱和拆箱
- 基本数据类型转换为包装类的过程称为装箱
- 包装类变为基本数据类型的过程称为拆箱
public class Demo {
public static void main(String[] args) {
int m = 500;
Integer obj = m; // 自动装箱
int n = obj; // 自动拆箱
System.out.println("n = " + n);
Integer obj1 = 500;
System.out.println("obj等价于obj1返回结果为" + obj.equals(obj1));
}
}
String 类
String类用于处理字符串的一切问题
特征
- String类是final的,不可被继承;
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
- String类本质是字符型数组char[ ],并且值不可改变;
private final char value[];
- 创建字符串的方式很多,归纳起来有三类:
第一类,利用new关键字创建一个String对象,如:String s1 = new String("abc");
第二类,利用特性3直接创建,如:String s2 = "abc";
第三类,利用特性4串联生成新的字符串,如:String s3 = "a" + "b" + "c";
string 常用方法参考链接
- length() 字符串的长度
- charAt() 截取一个字符 //ch=“abc”.charAt(1); 返回’b’
- toCharArray() String转换成char数组
- substring()
- trim() 去掉起始和结尾的空格
StringBuffer
string的字符串长度是固定的,StringBuffer用于处理可变字符串,是一个容器,区别去String的是,StringBuffer是一个对象,所有的这些方法处理的都还是StringBuffer这个对象,而String可能是不同的对象。
StringBuffer s0=new StringBuffer();分配了长16字节的字符缓冲区
StringBuffer s1=new StringBuffer(512);分配了512字节的字符缓冲区
StringBuffer s2=new StringBuffer("Happy new year!");在字符缓冲区中存放字符串"Happy new year!",另外,后面再留了16字节的空缓冲区。
常用方法参考链接
- append()添加
作用是追加内容到当前StringBuffer对象的末尾,类似于字符串的连接
synchronized决定StringBuffer是线程安全的
public synchronized StringBuffer append(int i) {
- insert()方法
接受boolean,char,double,float,int,long,string等各种值
该方法的作用是在StringBuffer对象中插入内容,然后形成新的字符串。例如:
StringBuffer sb = new StringBuffer(“TestString”);
sb.insert(4,false);
该示例代码的作用是在对象sb的索引值4的位置插入false值,形成新的字符串,则执行以后对象sb的值是”TestfalseString”。
append和insert的区别:
append默认在末尾添加,insert可以在指定位置添加
StringBuilder
StringBuilder和StringBuffer内部代码几乎一样,只是StringBuffer的所有方法都被关键字synchronized修饰,也就是说它是线程安全的
Double 类
是double的包装类,用于处理双精度数据的类
public final class Double extends Number