Java常用类库

类库:java提供的一些内置类,主要学习的是类中方法的使用

一、Object

Object:超类、基类

1、所属的包

java.lang.Object

2、构造器

Object()  // 无参构造器

3、常用方法

方法名描述
hashCode()获取对象的哈希码值【内存地址转换成整数】
equals(Object obj)比较两个对象是否相等
finalize()垃圾回收器【当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法】
toString()返回对象的字符串表示形式
  1. 自动垃圾回收:当内存被占用满,没有空间用来创建新对象时,垃圾回收器(GC)会自动调用所有垃圾对象的fifinalize()方法,销毁垃圾对象,释放内存空间
  2. 手动垃圾回收:通过 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

三、包装类

包装类:所有基本数据类型都有对应的引用类型,那么这些引用类型就叫做包装类

基本数据类型包装类型
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

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();
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘程云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值