Java 的API(API: Application(应用) Programming(程序) Interface(接口))
Java API就是JDK中提供给我们使用的类,这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只要会使用即可。在JDK安装目录下有个src.zip文件,这个文件解压缩后里面的内容是所有Java类的源文件。可以在其中查看相对应的类的源码。
Object类是Java语言中的根类,即所有类的父类,史祖。它所描述的所有方法子类都可以使用。所有类在创建对象的时候,最终找的父类就是Object。
在Object类众多方法中,我们先看看equals方法和toString方法。
equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较,Object类中的equals方法内部使用的就是==比较运算符。
在开发中要比较两个对象是否相同,经常会根据对象中的属性值进行比较,也就是在开发经常需要子类重写equals方法根据对象的属性值进行比较。如果没有重写该方法,那么他和==号等价。
注意:在重写Object中的equals方法时,一定要注意public boolean equals(Object obj)的参数是Object类型,在调用对象的属性时,一定要进行类型转换,在转换之前必须进行类型判断。
toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值(哈希值)。
由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。
字符串是否以指定字符串开头。结尾同理。startsWith/endsWith。
字符串中是否包含另一个字符串。
String str = "abcde";
int index = str.indexOf("bcd"); //判断是否包含,包含则返回第一次出现该字符串的索引,不包含则返回-1
boolean b2 = str.contains("bcd");//判断是否包含指定字符串,包含返回true,不包含返回false
将字符串转成一个字符数组。或者字节数组。
String str = "abcde";
char[] chs = str.toCharArray();
byte[] bytes = str.getBytes();
StringBuffer又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。
StringBuffer sb = new StringBuffer();
sb.append("haha"); //添加字符串
sb.insert(2, "it");//在指定位置插入
sb.delete(1, 4);//删除
sb.replace(1, 4, "cast");//替换指定范围内的内容
String str = sb.toString();
StringBuffer sb = new StringBuffer();
String str = sb.append("Hello").append("hehe").toString();
无论多少数据,数据是什么类型,只要最终目的是变成字符串就可以使用StringBuffer这个容器
StringBuilder类,它也是字符串缓冲区,它也是一个可变的字符序列。类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候。一般开发建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
这时候就要谈一谈String、StringBuffer、StringBuilder 的异同了。
(1)、可变不可变
String:字符串常量,在修改时不会改变自身;若修改,等于重新生成新的字符串对象。
StringBuffer:在修改时会改变对象自身,每次操作都是对 StringBuffer 对象本身进行修改,不是生成新的对 象;使用场景:对字符串经常改变情况下,主要方法:append(),insert()等。
(2)、线程是否安全
String:对象定义后不可变,线程安全。
StringBuffer:是线程安全的(对调用方法加入同步锁),执行效率较慢,适用于多线程下操作字符串缓冲区 大量数据。
StringBuilder:是线程不安全的,适用于单线程下操作字符串缓冲区大量数据。
(3)、共同点
StringBuilder 与 StringBuffer 有公共父类 AbstractStringBuilder(抽象类)。
StringBuilder、StringBuffer 的方法都会调用 AbstractStringBuilder 中的公共方法,如 super.append(...)。
只是 StringBuffer 会在方法上加 synchronized 关键字,进行同步。最后,如果程序不是多线程的,那么使用 StringBuilder 效率高于 StringBuffer。
正则表达式是一个字符串,使用单个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串。在开发中,正则表达式通常被用来检索、替换那些符合某个规则的文本。
public boolean matches(String regex) //判断字符串是否匹配给定的规则
public String[] split(String regex) //根据给定正则表达式的匹配规则,拆分此字符串
类型 字节数 默认值 包装类型
byte 1个字节 0 byte
short 2个字节 0 Short
int 4个字节 0 Integer
long 8个字节 0l Long
float 4个字节 0.0f Float
double 8个字节 0.0 Double
char 2个字节 0 Character
boolean 字节数视情况而定 默认值 false:0为false 非0为true Boolean
将字符串转换成基本数据类型方式:
parseXXX(String s);其中XXX表示基本类型,参数为可以转成基本类型的字符串,如果字符串无法转成基本类型,将会发生数字转换的问题NumberFormatException。
其中Boolean、Double、Float 只有这一种parseXX,但是Integer、Short、Long、Byte还有另外一种形式:
public static int parseInt(String s,int radix)
public static short parseShort(String s,int radix)
public static long parseLong(String s,int radix)
public static byte parseByte(String s,int radix)
将基本数值转成字符串有3种方式:
①基本类型直接与""相连接即可;
②调用String的valueOf方法;
③调用包装类中的toString方法;
自动装箱:基本数值转成对象
自动拆箱:对象转成基本数值
Integer i = 4;
i = i + 5;
System代表程序所在系统,提供了对应的一些系统属性信息,和系统操作。System类不能手动创建对象,因为构造方法被private修饰,阻止外界创建对象。System类中的都是static方法,类名访问即可。在JDK中,有许多这样的类。
currentTimeMillis() 获取当前系统时间与1970年01月01日00:00点之间的毫秒差值
exit(int status) 用来结束正在运行的Java程序。参数传入一个数字即可。通常传入0记为正常状态,其他为异常状态
gc() 用来运行JVM中的垃圾回收器,完成内存中垃圾的清除。
getProperty(String key) 用来获取指定键(字符串名称)中所记录的系统属性信息
此类包含用来操作数组(比如排序和搜索)的各种方法。需要注意,如果指定数组引用为 null,则访问此类中的方法都会抛出空指针异常NullPointerException。
sort方法,用来对指定数组中的元素进行排序(元素值从小到大进行排序)
//源arr数组元素{1,5,9,3,7}, 进行排序后arr数组元素为{1,3,5,7,9}
int[] arr = {1,5,9,3,7};
Arrays.sort( arr );
toString方法,用来返回指定数组元素内容的字符串形式
int[] arr = {1,5,9,3,7};
String str = Arrays.toString(arr); // str的值为[1, 5, 9, 3, 7]
binarySearch方法,在指定数组中,查找给定元素值出现的位置。若没有查询到,返回位置为-1。要求该数组必须是个有序的数组。
int[] arr = {1,3,4,5,6};
int index = Arrays.binarySearch(arr, 4); //index的值为2
int index2= Arrasy.binarySearch(arr, 2); //index2的值为-1