JavaSE中常用类及其方法

本文介绍了Java中的包装类概念、自动装箱拆箱机制,详细讲解了String类的特性和操作,包括日期时间类如LocalDate、LocalTime和LocalDateTime,以及System类和内存管理的实例。
摘要由CSDN通过智能技术生成

包装类:

包装类概念:主要是将基本数据类型转换成类,使其具有类的特点,可以调用类中的方法。

基本数据类型及其包装类对应关系

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

其中Boolean和Char是对象型包装类(Object直接子类)

另外六种为数值型包装类(Number直接子类)PS:Number是一个抽象类

装箱与拆箱:

装箱操作即为将基本数据类型转为包装类。

拆箱操作即为将包装类转为基本数据类型。

代码如下

包装类和基本数据类型转换:

jdk5以前为手动装箱和手动拆箱,在jdk5之后有了自动装箱和拆箱方式

自动装箱和拆箱代码如下

其实自动装箱拆箱底层逻辑与手动无异,其他包装类的方法类似。

String类

String类概念和理解:

String对象用于保存字符串即一组字符序列,字符串常量对象就是双引号扩起的字符序列;例如"你好"。字符串的字符使用的是Unicode字符编码,一个字符占两个字节(不区分字母汉字)。

PS,通过观察String类图可知,String类实现了Serializable接口,即String是可以串行化的(可以用于网络传输),实现了Comparable接口,说明String对象可以进行比较。

创建String对象两种方式:

方式1:直接赋值 String s = “java”;

方式2:调用String构造器 String s = new String("c++");

两种方式的区别:

方式1本质上是从常量池中查找是否有“java”数据空间,如果有则直接指向,没有的话就创建然后指向。s最终指向的是常量池的空间地址。

方式2本质上是在堆中创建空间,里面有value属性指向常量池的“c++”空间,如果没有则创建后通过value指向,最终指向的是堆中的空间地址。

因此System.out.println(a == b); 结果返回false

String类常见方法代码实现如下:

String str1 = "hello";
        String str2 = "HELLO";
        String str3 = "hello1";
        //equals比较内容是否相同,区分大小写
        System.out.println(str1.equals(str2));//false

        //equalsIgnoreCase 忽略大小写的判断内容是否相等
        System.out.println(str1.equalsIgnoreCase(str2));//true

        //length获取字符的个数,字符串的长度
        System.out.println(str1.length());//5

        //indexOf 获取字符在字符串对象中第一次出现的索引,索引从0开始,如果没有则返回-1
        System.out.println(str1.indexOf('l'));//2

        //lastIndexOf 获取字符在字符串中最后一次出现的索引,索引从 0 开始,如果找不到,返回-1
        System.out.println(str1.lastIndexOf('l'));//3

        //substring 截取指定范围的子串 实际是[1,4)
        System.out.println(str1.substring(1,4));//ell
        //截取后面所有字符
        System.out.println(str1.substring(1));//ello

        //toUpperCase转换成大写
        System.out.println(str1.toUpperCase());//HELLO

        //toLowerCase转换成小写
        System.out.println(str2.toLowerCase());//hello

        //concat 拼接字符串
        System.out.println(str1.concat(str2));//helloHELLO

        //replace 替换字符串中的字符(all)
        System.out.println(str1.replace('l','m'));//hemmo

        //split 分割字符串, 对于某些分割字符,我们需要 转义比如 | \\等
        String[] spilt = str1.split("e");
        for (int i = 0; i < spilt.length; i++) {
            System.out.print(spilt[i]);
            System.out.print(" ");
        }
        System.out.println();

        //toCharArray 转换成字符数组
        char[] chars = str1.toCharArray();
        for (int j = 0; j < chars.length; j++) {
            System.out.println(chars[j]);
        }

        //compareTo 比较两个字符串的大小,如果前者大
        // 则返回正数,后者大,则返回负数,如果相等,返回 0
        // (1) 如果长度相同,并且每个字符也相同,就返回 0
        // (2) 如果长度相同或者不相同,但是在进行比较时,可以区分大小
        // 就返回      if (c1 != c2) {
        //                  return c1 - c2;
        //            }
        // (3) 如果前面的部分都相同,就返回 str1.len - str2.len
        String m = "wang";
        String n = "zhang";
        String z = "wang";
        System.out.println(n.compareTo(m));//第一个字符不同,返回'z' - 'w'  3
        System.out.println(m.compareTo(z));//0

        //format 格式字符串
        String name = "zhy";
        int age = 18;
        double score = 97.8;
        String info1 = "我的姓名缩写是" + name + "\t我的年龄是"
                + age + "\t我的成绩是" + score;
        System.out.println(info1);
        String formatStr = "我的姓名缩写是%s 我的年龄是%d 我的成绩是%.2f";
        String info2 = String.format(formatStr,name,age,score);
        System.out.println(info2);

字符串具有特性

观察源码String是final类,代表不可变的字符序列,字符串是不可变的,字符串对象一旦被分配,其内容是不可变的

StringBuffer和StringBuilder:

String类保存字符串常量,每次更新都需要开辟新的空间,效率特别低,因此java设计者提供了StringBuffer和StringBuilder来增强String的功能,提高效率。

StringBuffer的对象可以串行化(即可以在网络传输)。

StringBuffer父类中AbstractStringBuilder有属性char[] value 不是final说明可以将字符串内容存放在堆中,所以在变化(增加删除)时不需要每次更换地址,创建对象,而String每次变化都需要创建一个新的地址指向,效率高于String。

StringBuffer是一个final类,不能被继承。

StringBuilder是一个可变的字符序列。此类提供一个与StringBuffer兼容的API,但不保证同步(StringBuilder不是线程安全)。用在字符串缓冲区被单个线程使用的时候,比StringBuffer要快。

StringBuffer上主要操作时append和insert方法可以重载这些方法接受任意类型的数据。

日期类

JDK8后日期类加入了LocalDate(日期-年月日)、LocalTime(时间-时分秒)、LocalDateTime(日期时间-年月日时分秒)

LocalDate只包含日期,可以获取日期字段

LocalTime只包含时间,可以获取时间字段

LocalDateTime包含日期加时间,可以获取日期和时间字段

日期类常见方法代码实现

//调用now()函数获取当前日期的时间对象,注意返回的是国外的时间格式
        LocalDateTime Ldt = LocalDateTime.now();
        System.out.println(Ldt);
        //使用DateTimeFormater对日期对象格式化
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String time = dateTimeFormatter.format(Ldt);
        System.out.println(time);
        System.out.println("年=" + Ldt.getYear());
        System.out.println("月=" + Ldt.getMonth());
        System.out.println("月=" + Ldt.getMonthValue());
        System.out.println("日=" + Ldt.getDayOfMonth());
        System.out.println("时=" + Ldt.getHour());
        System.out.println("分=" + Ldt.getMinute());
        System.out.println("秒=" + Ldt.getSecond());
        LocalDate now = LocalDate.now(); //可以获取年月日
        LocalTime now1 = LocalTime.now();//可以获取到时间
        System.out.println(now + "  " + now1);

时间戳Instant及Date类转换的方式代码实现

//获取表示当前时间戳的对象
        Instant now01 = Instant.now();
        System.out.println(now01);
        //通过form把Instant转成Date
        Date date = Date.from(now01);
        //通过date的toInstant把date转成Instant对象
        Instant instant = date.toInstant();

System类

System类常见方法代码实现

//exit()退出程序--0表示的是一个状态,正常的状态
        //System.exit(0);
        //arraycopy复制数组元素,一般使用Arrays.copyOf完成复制数组
        int[] mm = {1,2,3,4,5};
        int[] nn = new int[5];//nn中当前是{0,0,0,0,0}
        // 源数组mm the source array;
        // srcPos: 从源数组的哪个索引位置开始拷贝
        // nn : 目标数组,即把源数组的数据拷贝到哪个数组
        // destPos: 把源数组的数据拷贝到 目标数组的哪个索引
        // length: 从源数组拷贝多少个数据到目标数组
        System.arraycopy(mm,0,nn,0,mm.length);

        System.out.println(Arrays.toString(nn));

        Date d = new Date();
        d = null;
        System.gc();
        // 在调用这句gc方法时,上面已经失去了d引用的new Date()被回收

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值