Java常用类及使用方法

目录

1.String

1.String的基本概念

2.String的不可变性

3.String的实例化方式及内存解析

1.两种方式

2.new+构造器的方式的内存解析

3.字符串对象的存储

4.字符串拼接后的内存解析

6.String中的常用方法

7.什么时候indexOf (str)和LastIndexOf (str)返回值相同

8.String和其他结构之间的转换

1.与包装类,基本数据类型转换

2.与char[ ]转换

3.与byte[ ]转换

9.String,StringBuffer,StringBuilder的异同

相同点

不同点

10.StringBuffer的常用方法

11.String,StringBuffer,StringBuilder的相互转换

1.String转换为StringBuffer,StringBuilder

2.StringBuffer,StringBuilder转换为String

2.日期类

1.jdk8之前的日期和时间API

1.system.currentTimeMills()

2.Date类的使用

3.SimpleDateFormat的使用

2.jdk8中日期时间API

3.Calender类的使用:抽象类

1.实例化

2.常用方法

4.instant

5.DateTimeFormatter的使用

6.编码、解码、格式化、解析

3.java比较器

1.对多个对象排序

2.Comparable接口的使用:自然排序(默认)

3.Comparator:定制排序

4.Comparable接口和Comparator对比


1.String类

1.String的基本概念

        1.String是声明为final的,不可被继承

        2.String实现了Serializable接口:表示字符串是支持序列化

        3.实现了Comparable接口:表示String可以比较大小

        4.String内部定义:final char[] value;用于存储字符串数据

        5.String:代表不可变的字符序列,简称:不可变性

        6.通过字面量(区别于new)的方式给一个字符串赋值,此时字符串值声明在字符串常量池中

        7.字符串常量池中不会存储相同内容的字符串的。

2.String的不可变性

1.当对字符串重新赋值时,需要重新指定内存区域赋值,不能使用原有的value进行赋值

2.当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值

3.当调用String的replace方法修改字符或字符串时,也必须重新指定内存区域赋值

3.String的实例化方式及内存解析

1.两种方式

方式一:通过字面量定义的方式

方式二:通过new+构造器的方式

2.new+构造器的方式的内存解析

使用如下代码创建对象,在内存中创建了两个对象;在堆中的new结构,另一个是char[]对应的常量池中的数据abc

String s = new String(“abc”)

3.字符串对象的存储

String s1 = "javaEE";
String s2 = "javaEE";
String s3 = new String("javaEE");
String s4 = new String("javaEE");
System.out.println(s1 == s2);//true
System.out.println(s1 == s3);//false
System.out.println(s1 == s4);//false
System.out.println(s3 == s4);//false

如上代码所示,String通过字面量定义的变量位于字符串常量池中,通过new+构造器会在内存中创建两个对象:堆中的new,char[]对应的常量池数据。用以下的宋老师的图例看会更加清楚:

 

4.字符串拼接后的内存解析

String s1 = "hello";
String s2 = "world";
String s3 = "hello" + "world";
String s4 = s1 + "world";
String s5 = s1 + s2;
String s6 = (s1 + s2).intern();
System.out.println(s3 == s4);//false
System.out.println(s3 == s5);//false
System.out.println(s3 == s6);//false
System.out.println(s4 == s5);//true

        1.常量与常量的拼接在常量池中;

        2.但只要其中一个为变量,结果就在堆中;

        3.若使用intern()方法,则返回值在常量池中;

6.String中的常用方法

1.length(),字符串长度

2.charAt(),返回某索引出的字符

3.isEmpty,是否是空的

4.toLowerCase(),转换为小写

5.toUpperCase(),转换为大写

6.trim(),忽略字符串头部或尾部的空格

7.equalIgnoreCase (),忽略大小写比较

8.concat (),相当于+

9.compareTo (),比较两个字符串大小,负数就是当前数小,涉及到字符串排序

10.substring (),返回一个新字符串,从输入索引开始截取,若输入两个索引,那就是左闭右开的区间

11.endWith (),是否以指定后缀结束

12.startWith (),是否以指定后缀开始,区分大小写,返回布尔类型

13.contains(),当前字符串是否包含形参字符串

14.indexOf(),找到形参出现的第一个索引

15.LastIndexOf (),从后往前找形参出现的第一个索引;找不到就返回默认初始化值减一:-1

16.replace (),将所有旧字符串转换为新字符串

17.match (),确定此字符串是否匹配给定的正则表达式

18.split (),根据正则表达式拆分字符串

7.什么时候indexOf (str)和LastIndexOf (str)返回值相同

答:存在唯一的str或者不存在该str

8.String和其他结构之间的转换

1.与包装类,基本数据类型转换

String转换为包装类:Integer.parseInt(str);

包装类转换为String:String.valueOf(i1)

Integer i1 = 123;
String s1 = "123";
Integer i2 = Integer.parseInt(s1);
String s2 = String.valueOf(i1);

2.与char[ ]转换

String转换为char[ ]:调用toCharArray()

char[ ]转换为String:用String构造器,把char[ ]放进去

char[] char1 = new char[]{'a','b','c'};
String s1 = "abc";
char[] char2 = s1.toCharArray();
String s2 = new String(char1);

3.与byte[ ]转换

String转换为byte[ ](编码):调用String的getBytes()方法

byte[ ]转换为String(解码):调用String构造器

byte[] byte1 = new byte[]{1,2,3};
String s1 = "123";
byte[] byte2 = s1.getBytes();
String s2 = new String(byte1);

若:byte转换为字符串会出现乱码,是因为编码集与解码集不一致

其中,编码就是将字符串转换为计算机底层的二进制字节;解码就是将字节转换为字符串

9.String,StringBuffer,StringBuilder的异同

相同点

        底层都使用char[ ]存储

不同点

        String:不可变的字符序列

        StringBuffer:可变的字符序列;线程安全的,效率低

        StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高

        效率对比:StringBuilder>StringBuffer>>String

10.StringBuffer的常用方法

1.增:append(),添加字符

2.删:delete (),删除指定位置内容

3.改:replace (),替换指定位置str

4.插:insert (),在指定位置插入xxx

5.反:reverse (),将字符序列反转

          setCharAt (),修改一个字符

6.查:charAt (),查询指定索引字符

7.遍历:toString ()

11.String,StringBuffer,StringBuilder的相互转换

1.String转换为StringBuffer,StringBuilder

        调用StringBuffer,StringBuilder构造器

2.StringBuffer,StringBuilder转换为String

        调用String构造器

2.日期类

1.jdk8之前的日期和时间API

1.system.currentTimeMills()

        返回一个毫秒的时间差,通常称为时间戳,同1970.1.1.0:0:0对比

long timeMillis = System.currentTimeMillis();

2.Date类的使用

1.两个包

        Java.until.Date

        Java.sql.Date:对应数据库中的日期类型

2.两个构造器

        无参构造器Date():创建一个当前时间Date

        Date(时间戳):创建指定毫秒数的Date

3.两个方法

        toString();返回当前年月日时分秒

        getTime():获取当前Date对象的毫秒数

4.util下的date和sql下date转换

        将util下date.getTime()放入sql下date构造器即可

代码示例:

//关于日期的API---> Date()方法;
//两种:java.util.Date/java.sql.Date
//每一种都有两个构造器
//两种方法:toString():返回当前日期的时分秒;getTime():获取当前对象的毫秒值 
@Test
    public void test(){
        //1.Java.util.Date方法
        Date date = new Date();
        //获取当前日期的时分秒
        System.out.println(date.toString());
        //获取当前日期的毫秒数
        System.out.println(date.getTime());

        System.out.println("------------------------------------");
        Date date1 = new Date(1234325214214l);
        java.sql.Date date7 = new java.sql.Date(date1.getTime());
        System.out.println(date7);
        System.out.println(date1.toString());
        System.out.println(date1.getTime());

        System.out.println("-------------------------------------");
        //2.java.sql.Date方法
        java.sql.Date date2 = new java.sql.Date(System.currentTimeMillis());
//        java.sql.Date date3 = new java.sql.Date();
        String s = date2.toString();
        System.out.println(s);
        long time = date2.getTime();
        System.out.println(time);

        System.out.println("---------------------------------------");
        //3.二者之间的转换:靠java.util.Date的有参构造器,形参为毫秒值
        Date date3 = new Date(date2.getTime());
        System.out.println(date3);
        java.sql.Date date4 = new java.sql.Date(date3.getTime());
        System.out.println(date4);

    }

 

3.SimpleDateFormat的使用

1.作用

        对日期Date类的格式化和解析

2.格式化与解析

格式化:format()方法:将Date对象格式化为字符串

解析:parse()方法:将字符串解析为Date对象

SimpleDateFormat s = new SimpleDateFormat();
Date date = new Date();
//格式化:转化为字符串
String s1 = s.format(date);
System.out.println(s1);
//解析:转化为Date
Date date1 = s.parse(s1);
System.out.println(date1);

3.SimpleDateFormat的实例化

1.使用无参构造器造对象,使用format()方法将Date对象转换为字符串;使用pasre方法将字符串转换为日期

2.使用固定格式的有参构造器(常用)


 public void test1() throws ParseException {
        //第一种方式实例化
        SimpleDateFormat s = new SimpleDateFormat();
        Date date = new Date();
        System.out.println(date);
        //格式化:转化为字符串
        String s1 = s.format(date);
        System.out.println(s1);
        //解析:转化为Date
        Date date1 = s.parse(s1);
        System.out.println(date1);
        
        System.out.println("-------------------------------------------------------");
        //2.第二种方式实例化(更常用)
        SimpleDateFormat ss = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Date date2 = new Date();
        System.out.println(date2);
        String s2 = ss.format(date2);
        System.out.println(s2);
        Date date3 = ss.parse(s2);
        System.out.println(date3);
    }

3.解析时,字符串必须满足SimpleDateFormat格式,构造器形参格式,否则异常。

2.jdk8中日期时间API

1.获取当前日期

LocalDate、LocalTime、LocalDateTime

实例化:LocalTime.now()方法

2.设置指定的年月日时分秒

LocalTime.of()方法

3.获取年月日,getXxx()

4.不可变性:设置年月日,withDayofMonth

5.添加:plusMonths()

6.减:minusDay();

        //1.获取当前日期
        LocalDate l = LocalDate.now();
        System.out.println(l);
        LocalTime l1 = LocalTime.now();
        System.out.println(l1);
        LocalDateTime l2 = LocalDateTime.now();
        System.out.println(l2);

        //2.设置指定的日期
        LocalTime l3 = LocalTime.of(5, 8);
        System.out.println(l3);

        //3.获取年月日
        int dayOfMonth = l.getDayOfMonth();
        System.out.println(dayOfMonth);

        //4.不可变性
        LocalDate localDate = l.withDayOfMonth(2);
        System.out.println(dayOfMonth);
        System.out.println(localDate.getDayOfMonth());

        //5.添加
        LocalDate l5 = l.plusDays(5);
        System.out.println(l);//不可变性
        System.out.println(l5);//24

        //6.减
        LocalDate localDate1 = l.minusDays(5);
        System.out.println(l);
        System.out.println(localDate1);//14

3.Calender类的使用:抽象类

1.实例化

        Calender类是一个抽象类,无法实例化,通常使用Calendar.getInstance()方法来造对象。

2.常用方法

get():get(Calendar.DAY_OF_MONTH)

set():set(Calendar.DAY_OF_MONTH,22)

add():add(Calendar.DAY_OF_MONTH,3)

getTime():getTime();日历类转为Date对象

setTime():setTime();Date对象转为日历类

代码示例:

        //使用Calendar.getInstance方法创建Calendar对象
        Calendar c = Calendar.getInstance();
        Date date1 = c.getTime();
        System.out.println(date1);
        //Calendar的常用方法get():获取当前日期的信息
        int s1 = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(s1);
        int s2 = c.get(Calendar.DAY_OF_WEEK);
        System.out.println(s2);
        int s3 = c.get(Calendar.DAY_OF_YEAR);
        System.out.println(s3);
        int s4 = c.get(Calendar.HOUR_OF_DAY);
        System.out.println(s4);


        //Calendar的常用方法set():设置当前日期信息
        //注意:此时set()方法为一个void方法,因此直接将Calendar对象本身改了
        c.set(Calendar.DAY_OF_MONTH,2);

        int i = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(i);

        //add()
        c.add(Calendar.DAY_OF_MONTH,4);
        int i1 = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(i1);

        //getTime():将Calendar对象-->Date对象
        Date time = c.getTime();
        System.out.println(time);

        //setTime():将Date对象-->日历类对象
        Date date = new Date();
        c.setTime(date);
        int i3 = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(i3);

4.instant

1.instant.now()方法:按照格林威治时间算的,会少八小时

2.添加时间偏移量:atOffset();

3.获取相应的毫秒数:instant.toEpochMilli

4.有参构造器:Instant.ofEpochMilli()

    @Test
    public void test1(){
        Instant i1 = Instant.now();
        System.out.println(i1);

        OffsetDateTime i2 = i1.atOffset(ZoneOffset.ofHours(8));
        System.out.println(i2);

        //获取相应instant对象的毫秒数
        long l = i1.toEpochMilli();
        System.out.println(l);

        //有参构造器(同之前一样,都是将毫秒数放入,转换为日期)
        Instant i3 = Instant.ofEpochMilli(l);
        System.out.println(i3);
    }

5.DateTimeFormatter的使用

1.自定义格式:DateTimeFormatter.ofPattern()

    @Test
    public void test(){
        DateTimeFormatter d = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDateTime l = LocalDateTime.now();
        System.out.println(l);
        //格式化:LocalDate --> 字符串
        String s = d.format(l);
        System.out.println(s);

        //解析:
        TemporalAccessor parse = d.parse(s);
        TemporalAccessor parse1 = d.parse("2023-02-19");
        System.out.println(parse);
        System.out.println(parse1);
    }

6.编码、解码、格式化、解析

编码:字符串>字节

解码: 字节 >字符串

格式化:日期 >字符串                                                                                                    

解析:字符串 >日期

3.java比较器

1.对多个对象排序

java中的对象正常情况下只能使用:==,!=,但在开发中,我们需要对多个对象进行排序,就需要比较对象的大小。因此需要使用两种接口中的任何一个:comparable;comparator

2.Comparable接口的使用:自然排序(默认)

1.调用Arrays.sort(),Arrays.toString()即可

    //第一种方式:comparable--自然排序;按照默认从大到小进行比较 
    @Test
    public void test1(){
        String[] arr = new String[]{"AA","CC","DD","BB"};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
    }

2.像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象大小的方法。

3.String、包装类排列都是从小到大排。

4.重写compareTo(obj)规则:大于-正整数,小于-负整数,等于-0。

    @Override
    public int compareTo(Object o) {
        if (o instanceof Person){
            Person p1 = (Person) o;
            if (this.getAge() > p1.getAge()){
                return 1;
            }else if (this.getAge() < p1.getAge()){
                return -1;
            }else{
                return -this.getName().compareTo(p1.getName());
            }
        }else{
            throw new RuntimeException("您输入的类型不一致!");
        }
    }

5.对于自定义类,如果要进行排序,可以让自定义类实现Comparable接口,重写compareTo(obj)方法,指明如何排序。

3.Comparator:定制排序

匿名实现Comparator方法即可

    //第二种方式:comparator--定制排序
    @Test
    public void test2(){
        String[] arr = new String[]{"AA","CC","DD","BB"};
        Arrays.sort(arr, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return -o1.compareTo(o2);
            }
        }
        );
        System.out.println(Arrays.toString(arr));
    }

4.Comparable接口和Comparator对比

Comparable接口方式一旦制定,保证Comparable接口实现类的对象在任何位置都能够比较大小,Comparator接口属于临时性的比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值