Java—常用类

发布于:2023-01-23 ⋅ 阅读:(686) ⋅ 点赞:(0)

1.StringBuffer类

StringBuffer是线程安全的,可变的字符序列。

StringBuffer类的常用方法

方法 功能
append(String str) 将指定的字符串附加到此字符序列。
charAt(int index) 返回 char在指定索引在这个序列值。
delete(int start, int end) 删除此序列的子字符串中的字符。
deleteCharAt(int index) 删除 char在这个序列中的指定位置。
indexOf(String str) 返回指定子字符串第一次出现的字符串内的索引。
insert(int offset, String str) 在此序列中插入 boolean参数的字符串表示形式。
lastIndexOf(String str) 返回指定子字符串最右边出现的字符串内的索引。
length() 返回长度(字符数)。
replace(int start, int end, String str) 用指定的String中的字符替换此序列的子字符串中的 String 。
setCharAt(int index, char ch) 指定索引处的字符设置为 ch 。
subSequence(int start, int end) 返回一个新的字符序列,该序列是该序列的子序列。
toString() 返回表示此顺序中的数据的字符串。
substring(int start) 返回一个新的 String ,其中包含此字符序列中当前包含的字符的子序列。


public class Demo6 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        //将指定的字符串附加到此字符序列
        sb.append("张三");
        sb.append("李四");
        //返回char在指定索引在这个序列值
        System.out.println(sb.charAt(0));//张
        //删除此序列的字符串中的字符,去头不去尾
        sb.delete(0, 2);
        System.out.println(sb);//李四
        //删除char在这个序列中的指定位置
        sb.deleteCharAt(1);
        System.out.println(sb);//李
        //用指定的字符替换此序列的的子字符串
        sb.replace(0, 1, "王二麻子");
        System.out.println(sb);//王二麻子
        System.out.println(sb.indexOf("王二"));
        //在此序列中插入boolean参数的字符串形式
        sb.insert(1, "关羽");
        System.out.println(sb);
        //返回一个新的字符序列,该序列是该序列的子序列
        sb.subSequence(1,2);
        System.out.println(sb);
    }
}

面试题:String和Stringbuffer和StringBuilder区别

1.String为固定长度的字符串,StringBuilder和StringBuffer为变长字符串; 2.stringBuffer是线程安全的,StringBuilder是非线程安全的; 3.StringBuffer和StringBuilder的默认初始容量是16,可以提前预估好字符串的长度,进一步减少扩容带来的额外开销

代码实现:


public class Demo2 {
    public static void main(String[] args) {
        String(10000);
        StringBuffer(10000);
        StringBuilder(10000);


    }
    //String耗时
    public static void String(int n){
        String str = "";
        long startString = System.currentTimeMillis();
        for (int i = 0; i < n; i++) {
            str += i;
        }
        long endString = System.currentTimeMillis();
        System.out.println("String连接"+n+"次消耗: "+(endString-startString)+"ms");
    }
    //StrinBuffer耗时
    public static void StringBuffer(int n){
        StringBuffer sb = new StringBuffer();
        long startStringBuffer = System.currentTimeMillis();
        for (int i = 0; i < n; i++) {
            sb.append(i);
        }
        long endStringBuffer = System.currentTimeMillis();
        System.out.println("String连接"+n+"次消耗: "+(endStringBuffer-startStringBuffer)+"ms");
    }
    //StringBuilder耗时
    public static void StringBuilder(int n ){
        StringBuilder sb = new StringBuilder();
        long startStringBuilder = System.currentTimeMillis();
        for (int i = 0; i < n; i++) {
            sb.append(i);
        }
        long endStringBuilder = System.currentTimeMillis();
        System.out.println("String连接"+n+"次消耗: "+(endStringBuilder-startStringBuilder)+"ms");
    }
}

 2.枚举类

Java中定义枚举类的时候的语法格式:

public enum 枚举类名 {
    //下面写常量,常量之间使用逗号隔开  
}
package com.qfedu.b_enum;

public enum Color {
    //常量,一般都是大写的  没有任何数据类型的!!!
    RED, GREEN, BLUE
}

swicth (表达式) {}

表达式数据类型有哪些:
    byte  short  int char  String 枚举

枚举在switch-case中的使用:

    enum Color{
        RED,GREEN,BLUE;
    }
public class Demo7 {
    public static void main(String[] args) {
        Color red = Color.RED;
        switch (red){
            case RED:
                System.out.println("红色");
                break;
            case GREEN:
                System.out.println("绿色");
                break;
            case BLUE:
                System.out.println("蓝色");
                break;
        }
    }
}
方法        功能
values() 枚举类中所有的值
ordinal() 可以找到每个枚举类中常量的索引
valueOf() 返回值的是指定字符串的枚举常量

代码实现:

    enum Color1{
        RED,GREEN,BLUE
    }
public class Demo8 {
    public static void main(String[] args) {
        //values;枚举类中所有的值,返回是数组
        Color1[] values = Color1.values();
        for (Color1 value : values) {
            //ordinal()可以找到每个枚举类中常量的索引
            System.out.println(value+"对应的索引:"+value.ordinal());
        }
    }
}

枚举在真实的开发中使用:

enum ProductEnum {
    UP(0, "在架"),
    DOWN(1, "下架");
    private Integer code;
    private String message;
    ProductEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}
public class Demo5 {
    public static void main(String[] args) {
        System.out.println(ProductEnum.UP.getCode());
        System.out.println(ProductEnum.UP.getMessage());
        System.out.println(ProductEnum.DOWN.getCode());//1
        System.out.println(ProductEnum.DOWN.getMessage());//"下架"
    }
}

3.包装类

Java有八大基本数据类型,都有与之对应的包装类

int age->Integer age;

int->Integer

byte->Byte                                         1.自从JDK1.5之后,有拆箱和装箱

short->Short                                         自动装箱:将基本数据类型转为包装类

long->Long                                           自动拆箱:将包装类转为基本数据类型

float->Float

double->Double

boolean->Boolean

char->Characte                                                                   

常用方法:

方法         功能
***Value() 将包装类转为基本数据类型
toString() 将基本数据类型转为字符串
parse***() 将字符串类型的数据转为基本数据类型
valueOf() 将基本数据类型转为包装类类似手动装箱

 代码实例:

public class Demo9 {
    public static void main(String[] args) {
        //***value();将包装类转为基本数据类型
        Boolean b1 = true;
        boolean b2 = b1.booleanValue();
        System.out.println(b2);
        //toString;将基本数据类型转换为字符串
        int i1=45;
        String s = Integer.toString(i1);
        System.out.println(s);
        String s1 = Double.toString(67.3);
        System.out.println(s1);
        //parse***将字符串类型数据转为基本数据类型
        int i = Integer.parseInt("20");
        System.out.println(i);
        //valueOf()将基本数据类型转为包装类,类似手动装箱
        byte b3 = 34;
        Byte aByte = Byte.valueOf(b3);
        System.out.println(aByte);
    }
}

4.Math类

专门处理数学运算的一个类

常用方法:  

绝对值 abs()                    最大值 max()     

最小值 min()                    向上取整 ceil()

向下取整floor()                四舍五入round()

随机数random()

代码实现:

public class Demo10 {
    public static void main(String[] args) {
        //取绝对值
        System.out.println(Math.abs(-11));//11
        //取最大值
        System.out.println(Math.max(30, 20));//30
        System.out.println(Math.max(40,Math.max(30,45)));//45
        //取最小值
        System.out.println(Math.min(10, 9));//9
        //向上取整
        System.out.println(Math.ceil(3.14));//4.0
        //向下取整
        System.out.println(Math.floor(3.14));//3.0
        //四舍五入
        System.out.println(Math.round(3.5));//4
        System.out.println(Math.round(3.4));//3
        //随机数
        System.out.println(Math.random());
    }
}

5.Random类

专门处理随机数的类

案例:生成10个不重复的100以内的随机数(能取到100)存入list集合中

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Demo11 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        Random random = new Random();
        int num = 0;
        while (list.size()<10){
            num = random.nextInt(100)+1;
            if (!list.contains(num)){
                list.add(num);
            }
        }
        System.out.println(list);
    }
}

6.System类

ublic class Demo1 {
    public static void main(String[] args) {

        PrintStream out = System.out;//是一个流 PrintStream 打印流
        out.println("goudan");
        System.out.println("goudan");//标准输出流打印的东西
        System.err.println("xixi");//错误输出流打印的东西
        new Scanner(System.in);//输入流
        long l = System.currentTimeMillis();
        //2022年到1970年 是不是52
        System.out.println(l/1000/60/60/24/365);
         Properties properties = System.getProperties();
        //os.name 系统的名字
        System.out.println(properties.get("os.name"));
        System.out.println(properties.get("os.version"));
        System.out.println(properties.get("user.name"));
        System.out.println(properties.get("user.dir"));
        System.out.println(properties.get("java.version"));
        //Windows 10
        //10.0
        //bowang
        //C:\Users\bowang\IdeaProjects\day21_wb
        //1.8.0_241

7.Data类

专门处理日期的一个类,不过好多方法过期了

SimpleDataFormal常用方法:

方法 功能
equals(Object obj) 将给定的对象与此 SimpleDateFormat进行比较以获得相等性。
format(Date date, StringBuffertoAppendTo, FieldPosition pos) 将给定的 Date成日期/时间字符串,并将结果追加到给定的 StringBuffer 。
parse(String text, ParsePosition pos) 从字符串中解析文本以产生一个 Date 。

方法实现: 

public class Demo5 {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //format将给定的 Date成日期/时间字符串,
        // 并将结果追加到给定的 StringBuffer
        Date date = sdf.parse("2022-08-09");
        //parse从字符串中解析文本以产生一个 Date
        String str = sdf.format(date);
        System.out.println(str);
    }
}

案列1:已知两个日期判断相差天数

public class Demo7 {
    public static void main(String[] args) throws ParseException {
        //定义时间格式
        SimpleDateFormat sdf = new SimpleDateFormat("MM-dd");
        //利用parse方法解析文本产生一个Date
        Date data1 = sdf.parse("08-01");
        Date date2 = sdf.parse("08-09");
        //将两个已知日期转为毫秒 再转为天
        long start1 = data1.getTime();
        long starat2 = date2.getTime();
        long poor = (starat2 - start1)/1000/60/60/24;
        System.out.println("相差了"+poor+"天");

    }
}

案列2:输入一个人的出生日期判断多大了

public class Demo6 {
    public static void main(String[] args) throws ParseException {
        //定义日期格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //出生日期
        Date birday = sdf.parse("2000-12-09");
        //先判断当前时间
        Date nowTime = new Date();
        //将当前日期转为毫秒
        long now = nowTime.getTime();
        //将出生日期转为毫秒
        long birdayM = birday.getTime();
        //相减算出毫秒数,再转为年
        long age = (now - birdayM)/1000/60/60/24/365;
        System.out.println("今年"+age+"岁");
    }
}

8.Calendar类

现在国际通用的是Calendar类

常用方法:

方法 功能
DATE get和 set字段编号表示该月的日期。
DAY_OF_MONTH get字段编号和 set本月的日期。
DAY_OF_WEEK get字段编号和 set表示一周中的日期。
DAY_OF_WEEK_IN_MONTH get字段编号和 set当月的 set几的序号。
DAY_OF_YEAR get和 set字段编号, set本年度的日数。
HOUR get和 set字段编号, get上午或下午的小时。

public class Demo2 {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        //获取当前的年份
        int i = calendar.get(Calendar.YEAR);
        System.out.println(i);//2022
        //获取月份  需要加1的
        System.out.println(calendar.get(Calendar.MONTH) + 1);//8
        //获取当月的第几天
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//9
        //获取这周的第几天  美国的周日是第1天
        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));//3
        //获取这一年的第几天
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));//221
        //获取时
        System.out.println(calendar.get(Calendar.HOUR));//4
        System.out.println(calendar.get(Calendar.MINUTE));//39
        System.out.println(calendar.get(Calendar.SECOND));//3

        //重要的方法  获取当前的时间的 返回值是Date类型的数据
        //可以转为Date类型的数据
        Date time = calendar.getTime();
        System.out.println(time);
        //Tue Aug 09 16:40:21 IRKT 2022
        //这上面时间 对程序员相当不友好!!!
        //通过一个类将日期格式转换一下
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy—MM-dd HH:mm:ss");
        //yyyy-MM-dd HH:mm:ss
        //年-月-天 时:分:秒
        //2022-08-09  16:43:32
        //将这个格式Tue Aug 09 16:40:21 IRKT 2022
        //转换为2022-08-09  16:43:32
        String format = sdf.format(time);
        System.out.println(format);
        //yyyy-MM-dd HH:mm:ss
        //以上能不能胡乱写?不能
        //以后开发中要用的!!

    }
}