类库:java提供的一些内置类,主要学习的是类中方法的使用
一、Object
Object:超类、基类
1、所属的包
java.lang.Object
2、构造器
Object() // 无参构造器
3、常用方法
方法名 | 描述 |
---|---|
hashCode() | 获取对象的哈希码值【内存地址转换成整数】 |
equals(Object obj) | 比较两个对象是否相等 |
finalize() | 垃圾回收器【当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法】 |
toString() | 返回对象的字符串表示形式 |
- 自动垃圾回收:当内存被占用满,没有空间用来创建新对象时,垃圾回收器(GC)会自动调用所有垃圾对象的fifinalize()方法,销毁垃圾对象,释放内存空间
- 手动垃圾回收:通过 System.gc();可以手动通知GC回收垃圾,若GC空闲会立马回收垃圾对象,若是GC繁忙会推迟回收
代码案例
package cn.com.example8_1;
public class ObjectClass {
public static void main(String[] args) {
// 实例化Object对象
Object o1 = new Object();
// 获取o1的哈希码值
System.out.println(o1.hashCode()); // 21685669
// 调用对象的字符串形式
// toString方法返回的数据格式:getClass().getName() + '@' + Integer.toHexString(hashCode())
System.out.println(o1.toString()); // java.lang.Object@14ae5a5
// 直接输出对象名,默认会调用toString方法
System.out.println(o1); // java.lang.Object@14ae5a5
// 实例化Object对象
Object o2 = new Object();
Object o3 = o2;
// 比较两个对象是否相等【比较的是首地址】
System.out.println(o1.equals(o2));// false
System.out.println(o2.equals(o3)); // true
}
}
注意:equals和==的区别
==:
可以比较基本数据类型的数据是否相等
可以比较对象是否相等
equals:比较对象是否相等
二、String
String:字符串,由一系列字符组成的串
注意:字符串属于常量,内容不可变,所谓的字符串拼接,并不会在原有的字符串基础上进行拼接,而且创建了一个新的字符串对象
1、所属的包
java.lang.String
2、构造器
String() 初始化一个String对象
String(byte[] bytes) 数组转换字符串
...参考api
3、String字符串创建方式:
String str1 = "Hello";
String str2 = new String("Hello);
// 如果使用第一种方式创建String对象,会先在常量池中查找该字符串是否存在,如果不存在,那么在该池中创建一个,如果存在,直接引用
// 如果使用第二种方式创建String对象,会先在常量池中查找该字符串是否存在,如果不存在,那么在该池以及堆内存中创建字符串对象,并且引用堆内存中的对象,如果存在,直接引用堆内存中的对象
代码案例
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
String s4 = new String("abc");
System.out.println(s1 == s2); // true
System.out.println(s3 == s4); // false
System.out.println(s1 == s3); // false
// s3.intern():获取该字符串对象中常量池中对应的字符串
System.out.println(s1 == s3.intern());
4、常用方法
方法名 | 说明 |
---|---|
charAt(int index) | 根据index获取对应的字符 |
concat(String str) | 将指定字符串拼接到末尾 |
contains(String str) | 判断字符串中是否包含了指定的字符串 |
endsWith(String str) | 判断字符串是否以指定的字符串为后缀 |
startsWith(String str) | 判断字符串是否以指定的字符串为前缀 |
equals(object obj) | 比较两个对象是否相等【区分大小写】 |
equalsIgnoreCase(String str) | 比较两个字符串是否相等【不区分大小写】 |
getBytes() | 字符串转byte数组【方法重载】 |
hashCode() | 字符串的哈希码值 |
indexOf(String str) | 获取指定字符在字符串中第一次出现的索引 |
indexOf(String str,index fromIndex) | 从指定的索引开始,获取指定字符在字符串中第一次出现的索引 |
isEmpty() | 判断字符串长度是否为0 |
lastIndexOf(String str) | 获取指定字符在字符串中最后一次出现的索引 |
lastIndexOf(String str,int fromIndex) | 从指定的索引开始,获取指定字符在字符串中最后一次出现的索引 |
length() | 获取字符串长度 |
matches() | 匹配正则表达式 |
replace(String oldStr,String newStr) | 替换 |
split(String regex) | 拆分 |
subString(int beginIndex) | 从指定下标开始截取字符串 |
subString(int beginIndex,int endIndex) | 从指定下标开始截取字符串到指定下标 |
toCharArray() | 字符串转换char数组 |
toLowerCase() | 字符串转小写 |
toUpperCase() | 字符串转大写 |
toString() | 返回对象本身【本身就是字符串】 |
trim() | 清除前后空格 |
valueOf(boolean b) | boolean转换字符串【方法重载】 |
valueOf(int i) | int转换字符串 |
代码案例
package cn.com.example8_1;
public class StringClass {
public static void main(String[] args) {
String str = "abcdefg";
// 根据index获取对应的字符
System.out.println(str.charAt(2)); // c
// 将指定字符串拼接到末尾
System.out.println(str.concat("aaa"));
// 判断字符串中是否包含了指定的字符串
System.out.println(str.contains("b"));
// 判断字符串是否以指定的字符串为后缀
System.out.println(str.endsWith("fg"));
// 判断字符串是否以指定的字符串为前缀
System.out.println(str.startsWith("a"));
// 比较两个对象是否相等【区分大小写】
System.out.println(str.equals("abcdefg"));
// 比较两个对象是否相等【不区分大小写】
System.out.println(str.equalsIgnoreCase("ABCDEFG"));
// 字符串转byte数组
System.out.println(str.getBytes());
// 字符串的哈希码值
System.out.println(str.hashCode());
// 获取指定字符在字符串中第一次出现的下标
System.out.println(str.indexOf("a"));
// 从指定的索引开始,获取指定字符在字符串中第一次出现的索引
System.out.println(str.indexOf("a",2));
// 判断字符串长度是否为0
System.out.println(str.isEmpty());
// 获取指定字符在字符串中最后一次出现的索引
System.out.println(str.lastIndexOf("a"));
// 从指定的索引开始,获取指定字符在字符串中最后一次出现的索引
System.out.println(str.lastIndexOf("a",2));
// 获取字符串的长度
System.out.println(str.length());
// 匹配正则表达式
System.out.println(str.matches("^[a-z]{1,}$"));
// 替换
System.out.println(str.replace("a","*"));
// 拆分
System.out.println(str.split("a").length);
// 从指定下标开始截取字符串
System.out.println(str.substring(0,3));
// 字符串转换char数组
System.out.println(str.toCharArray());
// 字符串转换小写
System.out.println(str.toLowerCase());
// 字符串转换大写
System.out.println(str.toUpperCase());
// 清除前后空格
System.out.println(" dadd ada ".trim());
// int转换字符串
System.out.println(String.valueOf(123) + 1);
}
}
5、String、StringBuffer、StringBuilder
String:不可变字符串
StringBuffer:可变字符串,线程安全,效率低
StringBuilder:可变字符串,线程不安全,效率高
String源码解析:字符串不可变
StringBuffer&StringBuilder源码解析:线程安全问题
StringBuffer&StringBuilder效率测试
package cn.com.example8_1;
public class String_Buffer_Builder {
public static void main(String[] args) {
testStringBuffer();
testStringBuilder();
}
// 测试StringBuffer
public static void testStringBuffer(){
long start = System.currentTimeMillis();
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < 100000000; i++) {
stringBuffer.append("this is data");
}
long end = System.currentTimeMillis();
System.out.println("StringBuffer运行时间:"+(end - start));
}
// 测试StringBuilder
public static void testStringBuilder(){
long start = System.currentTimeMillis();
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < 100000000; i++) {
stringBuilder.append("this is data");
}
long end = System.currentTimeMillis();
System.out.println("StringBuilder运行时间:"+(end - start));
}
}
注意:StringBuffer和StringBuilder一样,通过无参构造器创建,初始长度为16,通过有参构造器创建,初始长度为字符串长度,如果超出默认长度,那么长度增长为字符串长度+16
三、包装类
包装类:所有基本数据类型都有对应的引用类型,那么这些引用类型就叫做包装类
基本数据类型 | 包装类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
1、基本类型转换包装类型
代码案例:
package cn.com.example8_1;
public class SuperObject {
public static void main(String[] args) {
// 通过构造方法
int i = 10;
Integer integer = new Integer(i);
// 通过静态方法
int i1 = 10;
Integer integer1 = Integer.valueOf(i1);
}
}
2、包装类型转换基本类型
代码案例
// 通过xxxValue方法
Integer integer = new Integer(10);
int i = integer.intValue();
Byte by = new Byte(11);
byte b = byte.byteValue();
3、装箱&拆箱
在JDK5.0以后,可以实现自动装箱、自动拆箱
- 自动装箱:自动将基本数据类型转换为包装类型
- 自动拆箱:自动将包装类型转换为基本数据类型
代码案例
int i = 10;
// 自动装箱
Integer integer = i;
// 自动拆箱
Integer integer1 = new Integer(12);
int i1 = integer1;
核心:包装类与字符串转换【参考API】
4、整数缓存区
在整数缓冲区中已经预先创建好了这256个整数,若新建的Integer对象在这个区间内,则会直接从整数缓冲区中获取,而不是创建新的对象
整数缓冲区:-128~127 共256个整数,是最常用的整数
代码案例
package cn.com.example8_1;
public class TestInteger {
public static void main(String[] args) {
Integer i1 = 12;
Integer i2 = 12;
System.out.println(i1 == i2); // true
Integer i3 = new Integer(12);
Integer i4 = new Integer(12);
// 一旦通过new创建,那么不会从缓冲区中获取
System.out.println(i3 == i4); // false
}
}
5、Byte类
包装类方法几乎都差不多,这里用Byte作为案例
构造器
Byte(byte value) // 把基本数据类型byte转换成Byte对象
Byte(String str) // 把字符串转换成Byte对象
常用方法
方法 | 说明 |
---|---|
byteValue() | 把Byte对象转换为基本数据类型 |
toString() | 把Byte对象转换为String对象 |
toString(byte by) | 把基本数据类型转换为String对象 可以直接使用 +“” |
6、Character类
构造器
Character(char ch) // 把基本数据类型转换为Character对象
常用方法
方法 | 说明 |
---|---|
static boolean isDigit(char ch) | 判断指定字符是否为数字 |
static boolean isLetter(char ch) | 判断指定字符是否为字母 |
static boolean isLowerCase(char ch) | 判断指定字符是否为小写字母 |
static boolean isLetterOrDigit(char ch) | 判断指定字符是否为字母或数字 |
四、System
System:系统类
所属的包
java.lang.System
常用方法
方法 | 说明 |
---|---|
static long currentTimeMillis() | 返回以毫秒为单位的当前时间 |
static long exit(int status) | 终止当前正在运行的java虚拟机 |
static void gc() | 运行垃圾回收器 |
注意:
1、自动垃圾回收:当内存被占用满,没有空间用来创建新对象时,或者某个时间段,垃圾回收器会自动调用所有垃圾对象的finalize方法,销毁垃圾对象,释放内存空间
2、手动垃圾回收:通过System.gc;可以手动通知GC回收垃圾,若GC空闲会立马回收垃圾对象,若是GC繁忙会推迟回收
五、Math
Math:数学相关的工具类,里面提供了大量的静态方法,完成数学的一些运算
方法 | 说明 |
---|---|
static double abc(double num) | 获取绝对值 |
static double ceil(double num) | 向上取整 |
static double floor(double num) | 向下取整 |
static long round(double num) | 四舍五入 |
static int max(int a,int b) | 取两个数最大值 |
static double pow(double a,double b) | 返回第一个参数的第二个参数次幂的值 |
static double random() | 随机数:大于等于0.0 小于1.0 也可以使用Random类 |
代码案例
package cn.com.example8_1;
/**
* Math类
*/
public class MathClass {
public static void main(String[] args) {
// 获取绝对值
System.out.println(Math.abs(-12.5)); // 12.5
// 取两个数最大值
System.out.println(Math.max(2,6)); // 6
// 向上取整
System.out.println(Math.ceil(12.3)); // 13.0
// 向下取整
System.out.println(Math.floor(12.3)); // 12.0
// 四舍五入
System.out.println(Math.round(12.5)); // 13
// 随机数
System.out.println(Math.random());
}
}
六、Date
Date:表示日期和时间的类
1、所属的包
java.util.Date
2、构造器
Date() 获取当前系统日期和时间
3、代码案例
package cn.com.example8_1;
import java.util.Date;
public class DateClass {
public static void main(String[] args) {
// 实例化Date对象
Date date = new Date();
// 获取当前系统时间
System.out.println(date);
// 获取年份
System.out.println(date.getYear() + 1900);
// 获取月份
System.out.println(date.getMonth() + 1);
// 获取日期
System.out.println(date.getDate());
// 获取星期
System.out.println(date.getDay());
// 获取小时
System.out.println(date.getHours());
// 获取分钟
System.out.println(date.getMinutes());
// 获取秒
System.out.println(date.getSeconds());
}
}
七、SimpleDateFormat
SimpleDateFormat:日期格式化类
1、所属的包
java.text.SimpleDateFormat
2、构造器
SimpleDateFormat() 默认日期格式 22-11-24 下午7:25
SimpleDateFormat('yyyy-MM-dd E HH:mm:ss') 指定日期格式 2022-11-24 星期四 19:29:14
3、代码案例
package cn.com.example8_1;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateClass {
public static void main(String[] args) throws ParseException {
// 实例化Date对象
Date date = new Date();
// 实例化日期格式化器 - 默认日期格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
// 日期转换字符串
String dateToStr = simpleDateFormat.format(date);
System.out.println(dateToStr);
// 字符串转换Date
Date strToDate = simpleDateFormat.parse(dateToStr);
System.out.println(strToDate);
// 实例化日期格式化器 - 指定日期格式
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd E HH:mm:ss");
// 日期转换字符串
String dateToStr1 = simpleDateFormat1.format(date);
System.out.println(dateToStr1);
}
}
八、Calendar
Calendar是日历类,在Date后出现,替换掉了许多Date的方法,该类将所有可能用到的时间信息封装为静态成员,方便获取,日历类就是方便获取各个时间属性的。
Calendar类是一个抽象类,无法直接创建对象,但是该类中有一个静态方法getInstance,该方法返回了Calendar类的子类对象
1、所属的包
java.util.Calendar
2、获取Calendar对象
package cn.com.example8_1;
import java.util.Calendar;
public class CalendarClass {
public static void main(String[] args) {
// 获取Calendar对象
Calendar calendar = Calendar.getInstance();
System.out.println(calendar);
}
}
3、常用方法
方法名 | 说明 |
---|---|
public int get(int field) | 返回给定日历字段的值 |
public void set(int field,int value) | 将给定的日历字段设置为给定值 |
public abstract void add(int field,int amount) | 根据日历的规则,为给定的日历字段添加或减去指定的时间量 |
public Date getTime() | 返回一个表示此Calendar时间值的Date对象 |
int field:日历类的字段,可以使用Calendar类的静态成员变量获取
4、代码案例
package cn.com.example8_1;
import java.util.Calendar;
import java.util.Date;
public class CalendarClass {
/*
*
* public int get(int field):返回指定日历字段的值
* 参数:传递指定的日历字段(YEAR、MONTH...)
* 返回值:日历字段代表具体的值
*
* */
public static void handlerGet(){
// 获取Calendar对象
Calendar calendar = Calendar.getInstance();
// 获取年
int year = calendar.get(Calendar.YEAR);
System.out.println(year);
// 获取月
int month = calendar.get(Calendar.MONTH) + 1;
System.out.println(month);
}
/**
* public void set(int field,int value):将指定的日历字段设置为指定值
*/
public static void handlerSet(){
// 获取Calendar对象
Calendar calendar = Calendar.getInstance();
// 设置年为9999
calendar.set(Calendar.YEAR,9999);
// 可以同时设置年月日
calendar.set(8888,66,33);
// 获取年
System.out.println(calendar.get(Calendar.YEAR));
}
/**
* public abstract void add(int field,int amount):根据日历规则,为指定的日历字段添加/减去指定的时间量
*
* amount:正数【添加】 负数【减少】
*
*/
public static void handlerAdd(){
// 获取Calendar对象
Calendar calendar = Calendar.getInstance();
// 设置当前系统年份 - 2
calendar.add(Calendar.YEAR,-2);
// 获取年
System.out.println(calendar.get(Calendar.YEAR));
}
/**
* public Date getTime():返回一个表示此Calendar值的Date对象
*/
public static void handlerGetTime(){
// 获取Calendar对象
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
System.out.println(date);
}
public static void main(String[] args) {
// handlerGet();
// handlerSet();
// handlerAdd();
handlerGetTime();
}
}
九、Random
Random类:用于生成随机数字
1、所属的包
java.util.Random
2、构造器
Random() 生成随机数
3、常用方法
4、代码案例
package cn.com.example8_1;
import java.util.Random;
public class RandomClass {
public static void main(String[] args) {
// 实例化Random对象
Random random = new Random();
// 随机生成int类型的数字
// 参数:随机生成数字范围0~参数值-1 即:0~2
int num = random.nextInt(3);
System.out.println(num);
// 随机范围:1~3
int number = random.nextInt(3) + 1;
}
}
十、工具类
1、Objects
在JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashCode,返回对象的字符串表示形式,比较两个对象。
在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问题,方法如下:
public static boolean equals(Object a,Object b):判断两个对象是否相等
源代码:
public static boolean equals(Object a,Object b){
return (a == b) || (a != null && a.equals(b));
}
代码案例
package cn.com.example8_1;
import java.util.Objects;
public class ObjectsClass {
/**
* 正常比较
* s1和s2都不为null,所以不会出现异常,结果false或true
*/
public static void handlerEquals(){
String s1 = "abc";
String s2 = "cdf";
System.out.println(s1.equals(s2)); // false
}
/**
* 比较出现异常
* s1为null,null是不能调用方法的,所以抛出空指针异常
*/
public static void handlerEqualsException(){
String s1 = null;
String s2 = "abc";
// System.out.println(s1.equals(s2)); // NullPointerException
// 解决:
System.out.println(s2.equals(s1)); // false
}
/**
* Objects中的equals - 推荐
*/
public static void handlerEqualsObjects(){
String s1 = null;
String s2 = "abc";
System.out.println(Objects.equals(s1,s2));
}
/**
* 常见比较格式 - 推荐
*/
public static void handlerEqualsTrue(){
String s = "admin";
// 常见比较格式
// 如果s为null。那么会抛出空指针异常
// System.out.println(s.equals("admin"));
// 更改
System.out.println("admin".equals(s));
// 或者
System.out.println(Objects.equals(s,"admin"));
}
public static void main(String[] args) {
// handlerEquals();
handlerEqualsException();
}
}
2、Arrays
Arrays类:是一个与数组相关的工具类,里面提供了大量的静态方法,用来实现对数组的操作
2.1、所属的包
java.util.Arrays
2.2、常用的方法
package cn.com.example8_1;
import java.util.Arrays;
public class ArraysClass {
/**
* toString方法:用于将数组转换为字符串
*/
public static void handlerToString(){
int[] array = {1,2,3,34,5};
// 将int类型的数组转换为字符串
System.out.println(Arrays.toString(array));
}
/**
* sort方法:对数组的元素进行排序
* 注意:
* 如果是数字,默认升序【数字从小到大】
* 如果是字符串,默认升序【字母顺序】
* 如果是自定义类型【对象】,通过Comparable或Comparator接口进行排序【集合使用】
*/
public static void handlerSort(){
// 数字升序
int[] array = {1,2,3,5,76,78,3,0};
Arrays.sort(array);
System.out.println(Arrays.toString(array)); // [0, 1, 2, 3, 3, 5, 76, 78]
// 字符串升序
String[] arrayStr = {"a","c","b","d","e"};
Arrays.sort(arrayStr);
System.out.println(Arrays.toString(arrayStr)); // [a, b, c, d, e]
}
/**
* 实现数组倒序
*/
public static void handlerDsc(){
int[] array = {1,4,2,5,0};
// 升序
Arrays.sort(array); // [0,1,2,4,5]
int[] temp = new int[array.length];
int index = 0;
for (int i = array.length - 1; i >= 0; i--) {
temp[index] = array[i];
index++;
}
array = temp;
System.out.println(Arrays.toString(array));
}
public static void main(String[] args) {
// handlerToString();
// handlerSort();
handlerDsc();
}
}