Java技术复习提升 11 常用类

第11章 常用类

1 包装类 

不同包装类都继承自Object类 Serialiazble接口表示该类表示序列化 Comparable接口用于定义自然顺序

包装类和基本数据的转换

jdk5之前手动装箱拆箱 jdk5之后自动装箱拆箱 自动装箱底层调用的是valueof方法 拆箱仍然是intvalue方法

public class Integer1 {
    public static void main(String[] args) {
        //以前
        //手动装箱
        Integer integer=new Integer(1);
        Integer integer1=Integer.valueOf(1);
        //手动拆箱
        int n=integer1.intValue();
        System.out.println(integer1);
        System.out.println(n);

        //现在
        //自动装箱拆箱
        Integer m=2;
        int k=m;
        System.out.println(m.intValue());
        System.out.println(k);
    }
}

 结合三目运算符

Object obj1 = true? new Integer(1):new Double(2.0);
System.out.println(obj1);

包装类和String类的转换 以Integer和String举例

public class Integer1 {
    public static void main(String[] args) {
        Integer integer=1;
        String s1=integer.toString();
        System.out.println(s1);

        String s2=String.valueOf(integer);
        System.out.println(s2);

        String s3="fsl"+" "+integer;
        System.out.println(s3);

        Integer t1=Integer.parseInt(s1);
        System.out.println(t1);

        Integer t2=new Integer(s2);
        System.out.println(s2);
    }
}

常用方法

 源码解释

11.2 String类

创建string:直接赋值 String s="abc";调用构造器 String s=new String(abc);

两种方式区别:前者是直接查看常量池是否有abc数据空间 有直接指向 没有重新创建 然后指向 s最终指向的是常量池地址;后者是先在堆里创造空间 里面维护value属性 再通过value指向常量池abc数据空间 有直接指向 没有重新创建 然后指向 s最终指向是堆中的空间地址

11.3 字符串的特性

 String是final类 一旦字符串对象被分配 内容不可变

结果 hsp and hava 因为 str是string修饰的 不可变 修改不影响 但ch虽然是final修饰 但只是引用不可改变 具体的值还可以改变 所以被修改

也就是说 final修饰数组时 只代表数组的引用不可修改 数组具体的值可以修改;但final修饰基本数据类型时 是不可修改的

11.4 String类常用方法

public class String1 {
    public static void main(String[] args) {
        //1. equals 前面已经讲过了. 比较内容是否相同,区分大小写
        String str1 = "hello";
        String str2 = "Hello";
        System.out.println(str1.equals(str2));//
        // 2.equalsIgnoreCase 忽略大小写的判断内容是否相等
        String username = "johN";
        if ("john".equalsIgnoreCase(username)) {
            System.out.println("Success!");
        } else {
            System.out.println("Failure!");
        }
        // 3.length 获取字符的个数,字符串的长度
        System.out.println("韩顺平".length());
        // 4.indexOf 获取字符在字符串对象中第一次出现的索引,索引从0开始,如果找不到,返回-1
        String s1 = "wer@terwe@g";
        int index = s1.indexOf('@');
        System.out.println(index);// 3
        System.out.println("weIndex=" + s1.indexOf("we"));//0
        // 5.lastIndexOf 获取字符在字符串中最后一次出现的索引,索引从0开始,如果找不到,返回-1
        s1 = "wer@terwe@g@";
        index = s1.lastIndexOf('@');
        System.out.println(index);//11
        System.out.println("ter的位置=" + s1.lastIndexOf("ter"));//4
        // 6.substring 截取指定范围的子串
        String name = "hello,张三";
        //下面name.substring(6) 从索引6开始截取后面所有的内容
        System.out.println(name.substring(6));//截取后面的字符
        //name.substring(0,5)表示从索引0开始截取,截取到索引 5-1=4位置,也就是[0,5)
        System.out.println(name.substring(2,5));//llo

    }
}

 

public class String2 {
    public static void main(String[] args) {
        // 1.toUpperCase转换成大写
        String s = "heLLo";
        System.out.println(s.toUpperCase());//HELLO
        // 2.toLowerCase
        System.out.println(s.toLowerCase());//hello
        // 3.concat拼接字符串
        String s1 = "宝玉";
        s1 = s1.concat("林黛玉").concat("薛宝钗").concat("together");
        System.out.println(s1);//宝玉林黛玉薛宝钗together
        // 4.replace 替换字符串中的字符
        s1 = "宝玉 and 林黛玉 林黛玉 林黛玉";
        //在s1中,将 所有的 林黛玉 替换成薛宝钗
        // 老韩解读: s1.replace() 方法执行后,返回的结果才是替换过的.
        // 注意对 s1没有任何影响
        String s11 = s1.replace("宝玉", "jack");
        System.out.println(s1);//宝玉 and 林黛玉 林黛玉 林黛玉
        System.out.println(s11);//jack and 林黛玉 林黛玉 林黛玉
        // 5.split 分割字符串, 对于某些分割字符,我们需要 转义比如 | \\等
        String poem = "锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦";
        // 1. 以 , 为标准对 poem 进行分割 , 返回一个数组
        // 2. 在对字符串进行分割时,如果有特殊字符,需要加入 转义符 \
        String[] split = poem.split(",");
        poem = "E:\\aaa\\bbb";
        split = poem.split("\\\\");
        System.out.println("==分割后内容===");
        for (int i = 0; i < split.length; i++) {
            System.out.println(split[i]);
        }
        // 6.toCharArray 转换成字符数组
        s = "happy";
        char[] chs = s.toCharArray();
        for (int i = 0; i < chs.length; i++) {
            System.out.println(chs[i]);
        }
        // 7.compareTo 比较两个字符串的大小,如果前者大,
        // 则返回正数,后者大,则返回负数,如果相等,返回0
        // 老韩解读
        // (1) 如果长度相同,并且每个字符也相同,就返回 0
        // (2) 如果比较到两个字符不相等
        //     就返回 if (c1 != c2) {
        //                return c1 - c2;
        //            }
        // (3) 如果前面的部分都相同,就返回 str1.len - str2.len
        String a = "jcck";// len = 4
        String b = "jack";// len = 4
        String c = "jacka";//len = 5
        System.out.println(a.compareTo(b));// 返回值是 'c' - 'a' = 2的值
        System.out.println(b.compareTo(c));
        // 8.format 格式字符串
        /* 占位符有:
         * %s 字符串 %c 字符 %d 整型 %.2f 浮点型
         */
        String name = "john";
        int age = 10;
        double score = 56.857;
        char gender = '男';
        //将所有的信息都拼接在一个字符串.
        String info =
                "我的姓名是" + name + "年龄是" + age + ",成绩是" + score + "性别是" + gender + "。希望大家喜欢我!";
        System.out.println(info);
        //老韩解读
        //1. %s , %d , %.2f %c 称为占位符
        //2. 这些占位符由后面变量来替换
        //3. %s 表示后面由 字符串来替换
        //4. %d 是整数来替换
        //5. %.2f 表示使用小数来替换,替换后,只会保留小数点两位, 并且进行四舍五入的处理
        //6. %c 使用char 类型来替换
        String formatStr = "我的姓名是%s 年龄是%d,成绩是%.2f 性别是%c.希望大家喜欢我!";
        String info2 = String.format(formatStr, name, age, score, gender);
        System.out.println("info2=" + info2);
    }
}

11.5 StringBuffer类

 

 stringbuffer构造器

package com.hspedu.stringbuffer_;
public class StringBuffer02 {
    public static void main(String[] args) {
        //构造器的使用
        //1. 创建一个 大小为 16的 char[] ,用于存放字符内容
        StringBuffer stringBuffer = new StringBuffer();
        //2 通过构造器指定 char[] 大小
        StringBuffer stringBuffer1 = new StringBuffer(100);
        //3. 通过 给一个String 创建 StringBuffer, char[] 大小就是 str.length() + 16
        StringBuffer hello = new StringBuffer("hello");
    }
}
 

String/StringBuffer相互转换

 

public class String2 {
    public static void main(String[] args) {
        String s="byx";
        StringBuffer sb=new StringBuffer(s);
        StringBuffer sb1=new StringBuffer();
        sb1.append(s);
        System.out.println(sb);
        System.out.println(sb1);

        String s1=sb.toString();
        String s2=new String(s);
        System.out.println(s1+s2);
    }
}

注意:String通过+拼接 但StringBuffer和StringBuilder通过append()进行拼接

 StringBuffer常见方法

 package com.hspedu.stringbuffer_;
public class StringBufferMethod {
    public static void main(String[] args) {
        StringBuffer s = new StringBuffer("hello");
        //增
        s.append(',');// "hello,"
        s.append("张三丰");//"hello,张三丰"
        s.append("赵敏").append(100).append(true).append(10.5);//"hello,张三丰赵敏100true10.5"
        System.out.println(s);//"hello,张三丰赵敏100true10.5"
        //删
        /*
         * 删除索引为>=start && <end 处的字符
         * 解读: 删除 11~14的字符 [11, 14)
         */
        s.delete(11, 14);
        System.out.println(s);//"hello,张三丰赵敏true10.5"
        //改
        //老韩解读,使用 周芷若 替换 索引9-11的字符 [9,11)
        s.replace(9, 11, "周芷若");
        System.out.println(s);//"hello,张三丰周芷若true10.5"
        //查找指定的子串在字符串第一次出现的索引,如果找不到返回-1
        int indexOf = s.indexOf("张三丰");
        System.out.println(indexOf);//6
        //插
        //老韩解读,在索引为9的位置插入 "赵敏",原来索引为9的内容自动后移
        s.insert(9, "赵敏");
        System.out.println(s);//"hello,张三丰赵敏周芷若true10.5"
        //长度
        System.out.println(s.length());//22
        System.out.println(s);
    }
}

 

练习:

public class StringBufferMethod {
    public static void main(String[] args) {
        StringBuffer price=new StringBuffer("1234560.789");
        for(int i= price.lastIndexOf(".")-3;i>0;i-=3 ){
            price=price.insert(i,",");
        }
        System.out.println(price);
    }
}

 

11.6 StringBuilder类

 

 

 11.7 String StringBuffer StringBuilder的比较和效率测试

效率 : StringBuilder > StringBuffer > String 

 11.8 Math类

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

 11.9 Arrays类

 

import java.util.Arrays;
import java.util.Comparator;
public class ArraysMethod01 {
    public static void main(String[] args) {
        Book[] books=new Book[4];
        books[0]=new Book(100,"book1");
        books[1]=new Book(200,"book22");
        books[2]=new Book(300,"book333");
        books[3]=new Book(400,"book4444");

        Arrays.sort(books,new Comparator(){
           @Override
           public int compare(Object obj1,Object obj2){
               Book o1=(Book) obj1;
               Book o2=(Book) obj2;
               return o2.getName().length()-o1.getName().length();//按书名降序
           }
        });

        System.out.println(Arrays.toString(books));
    }
}

class Book{
    private int price;
    private String name;

    Book(){}
    Book(int price,String name){
        this.price=price;
        this.name=name;
    }

    public int getPrice(){
        return price;
    }
    public String getName(){
        return name;
    }

    @Override
    public String toString(){
        return ("Book name:"+name+" price:"+price);
    }

}

 

 11.10 System类

11.11 BigInteger类和BigDecimal类

常用方法

11.12 日期类

第一代

 第二代

 第三代

 

 

 

 

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collection;
public class LocalDate_ {
    public static void main(String[] args) {
        //第三代日期
        
        //1. 使用now() 返回表示当前日期时间的 对象
        LocalDateTime ldt = LocalDateTime.now(); //LocalDate.now();//LocalTime.now()
        System.out.println(ldt);

        //2. 使用DateTimeFormatter 对象来进行格式化
        // 创建 DateTimeFormatter对象
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String format = dateTimeFormatter.format(ldt);
        System.out.println("格式化的日期=" + format);
        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 now2 = LocalTime.now();//获取到时分秒

        //提供 plus 和 minus方法可以对当前时间进行加或者减
        //看看890天后,是什么时候 把 年月日-时分秒
        LocalDateTime localDateTime = ldt.plusDays(890);
        System.out.println("890天后=" + dateTimeFormatter.format(localDateTime));

        //看看在 3456分钟前是什么时候,把 年月日-时分秒输出
        LocalDateTime localDateTime2 = ldt.minusMinutes(3456);
        System.out.println("3456分钟前 日期=" + dateTimeFormatter.format(localDateTime2));
    }
}

 

小结:该部分内容较多且有难度 谢谢各位读者能读到这里 也希望大家多多点赞评论 我们共同进步~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值