java常用类

一、包装类

1、什么是包装类

以前定义变量,经常使用基本数据类型。
对于基本数据类型来说,它就是一个数,加点属性,加点方法,加点构造器。
将基本数据类型对应进行了一个封装,产生了一个新的类,就是包装类。
如:int,byte…-----> 基本数据类型;包装类 ------>引用数据类型

基本数据类型对应包装类继承关系
byteByte—>Number—>Object
shortShort—>Number—>Object
intInteger—>Number—>Object
longLong—>Number—>Object
floatFloat—>Number—>Object
doubleDoubleObject
charCharacterObject
booleanBooleanObject

2、为什么要使用包装类

  • java语言作为一个面向对象的语言,最擅长的操作各种各样的类;
  • 集合不像数组,只能装引用数据类型的数据,数组可以声明基本、引用数据类型的数组;
  • 如:定义一个类的时候,就使用基本数据类型,使用集合时就使用包装类。

3、Integer

1)从属的包

java.lang : 直接使用,无需导包

2)类的继承关系

java.lang.object
	|_java.lang.Number
		|_java.lang.Integer

3)实现接口

Serializable, Comparable<Integer>

4)final修饰

这个类被final修饰,这个类不能有子类,不能被继承

public final class Integer
extends Number
implements Comparable <Integer>

5)属性

public static void main(String[] args) {
    System.out.println(Integer.MAX_VALUE);
    System.out.println(Integer.MIN_VALUE);
}

结果:
在这里插入图片描述

6)构造器没有空参构造器

  • int类型作为构造器的参数

    public static void main(String[] args) {
        Integer i1 = new Integer(12);
        System.out.println(i1.toString()); // 12
    }
    
    public Integer(int value) {
        this.value = value;
    }
    
  • string类型作为构造器参数

    public static void main(String[] args) {
        Integer i1 = new Integer("12");
        System.out.println(i1); // 12
    }
    
    public Integer(String s) throws NumberFormatException {
        this.value = parseInt(s, 10);
    }
    

7)包装类特有机制

  • 自动装箱
    public static void main(String[] args) {
        // int --> Integer
        Integer i = 12;
        System.out.println(i); // 12
    }
    
  • 自动拆箱
    public static void main(String[] args) {
        // Integer --> int
        Integer i2 = new Integer(12);
        int num = i2;
    
        System.out.println(num); // 12
    }
    
  • 将基本数据类型和包装类进行快速的转换。

8)常用方法

  • compareTo()
  • equals()
  • intValue()
  • parseInt()
  • toString()

二、日期类

1、java.util.Date

public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date);			  // Sat Aug 07 16:54:12 CST 2021
        System.out.println(date.toString());  // Sat Aug 07 16:54:12 CST 2021
}
  • 获取当前时间戳:System.currentTimeMillis()

2、java.sql.Date

public static void main(String[] args) {
    Date date = new Date(1628337210683L);
    System.out.println(date);	// 2021-08-07
}

联系:
java.sql.Date(子类) extends java.util.Date(父类)

3、相互转换

1)util —> sql

public static void main(String[] args) {

    java.util.Date date2 = new Date(1628337210683L);

    //方式1:向下转型
    Date date3 = (Date) date2;
    //方式2:构造器
    Date date4 = new Date(date2.getTime());
}

2)sql —> util

public static void main(String[] args) {
    Date date = new Date(1628337210683L);
    System.out.println(date);

    java.util.Date date1 = date;
    System.out.println(date1);  // 2021-08-07
}

3)String —> sql.Date

public static void main(String[] args) {
    Date date = Date.valueOf("2021-8-1");
}

4)String —> util

public static void main(String[] args) {
    // string ---> java.sql.Date
    java.sql.Date date = java.sql.Date.valueOf("2021-8-8");
    // java.sql.date ---> java.util.Date
    java.util.Date date1 = date;
    System.out.println(date1.toString());
}

4、SimpleDateFormat

public static void main(String[] args) {
    // 日期转换
    // SimpleDateFormat(子类) extends DateFormat(父类是一个抽象类)
    SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    // String ---> Date
    try {
        Date d = df.parse("2021/8/1 12:12:12");
        System.out.println(d);      // Sun Aug 01 12:12:12 CST 2021
    } catch (ParseException e) {
        e.printStackTrace();
    }

    // Date ---> String
    String format = df.format(new Date());
    System.out.println(format);     // 2021/08/07 20:36:05

}

注意:parse和format可以完成String和Date之间的转换

三、Calendar类

1、常用方法

   public static void main(String[] args) {
        // Calendar是一个抽象类,不能直接创建对象,可以使用其子类
        // GregorianCalendar()子类 extends Calendar() 抽象类
        Calendar cal = new GregorianCalendar();
        Calendar ca2 = Calendar.getInstance();
//        System.out.println(cal);
//        System.out.println(ca2);

        // 常用方法
        // get方法
        System.out.println(cal.get(Calendar.YEAR));           // 2021
        System.out.println(cal.get(Calendar.MONTH));          // 7 ,0 - 11
        System.out.println(cal.get(Calendar.DATE));           // 7 ,1 - 31
        System.out.println(cal.get(Calendar.DAY_OF_WEEK));    // 7 ,周日为第一天
        System.out.println(cal.getActualMaximum(Calendar.DATE));// 获取当月日期的最大天数
        System.out.println(cal.getActualMinimum(Calendar.DATE));// 获取当月日期的最小天数

        // set方法
        cal.set(Calendar.YEAR, 1990);
        cal.set(Calendar.MONTH, 0);
        cal.set(Calendar.DATE,1);
//        System.out.println(cal);

        // String ---> Calendar
        
        // String ---> java.sql.Date
        java.sql.Date date = java.sql.Date.valueOf("2020-8-5");
        // java.sql.Date ---> Calendar
        cal.setTime(date);
        System.out.println(cal);

    }

2、练习

请输入你要查看的日期:2021-1-1
日	一	二	三	四	五	六
 	 	 	 	 	1*	2	
3	4	5	6	7	8	9	
10	11	12	13	14	15	16	
17	18	19	20	21	22	23	
24	25	26	27	28	29	30	
31	

答案:

	public static void main(String[] args) {
        // String ---> Calendar
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入你要查看的日期:");
        String strDate = scanner.next();

        // String ---> Date
        java.sql.Date date = java.sql.Date.valueOf(strDate);
        // Date ---> Calendar
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);

        // 星期提示
        System.out.println("日\t一\t二\t三\t四\t五\t六");
        int count = 0;

        // 获取本月最大天数
        int maxDay = cal.getActualMaximum(Calendar.DATE);
        //获取当前日期中的日
        int nowDate = cal.get(Calendar.DATE);

        // 将日期调为本月1号
        cal.set(Calendar.DATE,1);
        // 获取1号是本月的第几天
        int number = cal.get(Calendar.DAY_OF_WEEK);
        for (int i = 1; i < number; i++) {
            count ++;
            System.out.print(" " + "\t");

        }

        for (int i = 1; i <= maxDay; i++) {
            if (i == nowDate){
                System.out.print(i + "*" + "\t");
            } else {
                System.out.print(i + "\t");
            }
            count++;
            if (count % 7 == 0){
                System.out.println();
            }

        }
    }

3、LocalDate / LocalTime / LocalDateTime

   public static void main(String[] args) {
        // 1、完成实例化
        // 方法一:now()
        LocalDate localDate = LocalDate.now();
        System.out.println(localDate);      // 2021-08-08
        LocalTime localTime = LocalTime.now();
        System.out.println(localTime);      // 00:26:04.040
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDateTime);  // 2021-08-08T00:26:04.040

        // 方法二:of()
        LocalDate localDate1 = LocalDate.of(2021, 8, 11);
        System.out.println(localDate1);     // 2021-08-11
        LocalTime localTime1 = LocalTime.of(8, 50, 55);
        System.out.println(localTime1);     // 08:50:55
        LocalDateTime localDateTime1 = LocalDateTime.of(2021, 12, 11, 8, 12, 33);
        System.out.println(localDateTime1);     // 2021-12-11T08:12:33

        System.out.println("================================================");

        // 常用方法
        // get
        System.out.println(localDateTime.getYear());    // 2021
        System.out.println(localDateTime.getMonth());   // AUGUST
        System.out.println(localDateTime.getMonthValue());  // 8
        System.out.println(localDateTime.getDayOfMonth());  // 8
        System.out.println(localDateTime.getDayOfWeek());   // SUNDAY
        System.out.println(localDateTime.getHour());    // 0
        System.out.println(localDateTime.getMinute());  // 39
        System.out.println(localDateTime.getSecond());  // 7

        // 不是set方法,是with
        LocalDateTime localDateTime2 = localDateTime.withMonth(6);
        // 不会修改原本的时间,修改的是一个新的类
        System.out.println(localDateTime);      // 2021-08-08T00:43:46.262
        System.out.println(localDateTime2);     // 2021-06-08T00:43:46.262
        // 除此之外还有很多with方法

        //加减操作
        LocalDateTime localDateTime3 = localDateTime.plusMonths(2);
        System.out.println(localDateTime);  // 2021-08-08T00:47:12.247
        System.out.println(localDateTime3); // 2021-10-08T00:47:12.247

        LocalDateTime localDateTime4 = localDateTime.minusMonths(5);
        System.out.println(localDateTime);  // 2021-08-08T00:48:45.562
        System.out.println(localDateTime4); // 2021-03-08T00:48:45.562

    }

4、格式化类

  • 格式化类:DateTimeForMatter
    public static void main(String[] args) {
        // 格式化类: DateTimeForMatter
    
        // 方式一:预定义的标准格式   不常用
        DateTimeFormatter isoLocalDateTime = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
        // isoLocalDateTime可以帮我们完成LocalDateTime和String之间的相互转换
        // LocalDateTime --->String
        LocalDateTime now = LocalDateTime.now();
        String format = isoLocalDateTime.format(now);
        System.out.println(format);
        // String ---> LocalDateTime
        TemporalAccessor parse = isoLocalDateTime.parse("2021-08-08T00:54:43.137");
        System.out.println(parse);
    
        // 方式二:本地化相关的格式    不常用
        // FormatStyle.LONG: 2021年8月8日 上午01时00分58秒
        // FormatStyle.MEDIUM: 2021-8-8 1:02:39
        // FormatStyle.SHORT: 21-8-8 上午1:03
        DateTimeFormatter df = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
        // LocalDateTime --->String
        LocalDateTime now1 = LocalDateTime.now();
        String format1 = df.format(now1);
        System.out.println(format1);
    
        // String ---> LocalDateTime
        TemporalAccessor parse1 = df.parse("21-8-8 上午1:03");
        System.out.println(parse1);
    
        // 方式三:自定义格式。如:ofPattern("yyyy-MM-dd hh:mm:ss") 常用
        DateTimeFormatter df2 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
    
        // LocalDateTime --->String
        LocalDateTime now2 = LocalDateTime.now();
        String format2 = df2.format(now2);
        System.out.println(format2);    // 2021-08-08 01:10:28
    
        // String ---> LocalDateTime
        TemporalAccessor parse2 = df2.parse("2021-08-08 01:10:28");
        System.out.println(parse2);
    
    }
    

四、Math类

  • 直接使用,无需导包。java.lang;
  • final修饰类,不能被继承;
    在这里插入图片描述
  • 构造器私有化,不能创建按Math类对象;
    在这里插入图片描述
  • Math内部所有的属性,方法都被static修饰,故:类名.方法名,直接调用,无需创建对象;
    public static void main(String[] args) {
    
        // 常用属性:
        System.out.println(Math.PI);
    
        // 常用方法:
        System.out.println(Math.random());
        System.out.println(Math.abs(-99)); // 99
        // 向上取整
        System.out.println(Math.ceil(8.8)); // 9.0
        // 向下取整
        System.out.println(Math.floor(8.8)); // 8.0
        // 四舍五入
        System.out.println(Math.round(5.6)); // 6
    
        System.out.println(Math.max(3, 6)); // 6
        System.out.println(Math.min(1, 4)); // 1
    
    }
    
  • Random类
    public static void main(String[] args) {
        // 利用带参数的构造器创建对象,不常用
        Random random = new Random(System.currentTimeMillis());
        System.out.println(random.nextInt());
    
        // 利用空参构造器创造对象,表面是在调用无参构造器,实际还是在调有参
        Random random1 = new Random();
        System.out.println(random1.nextInt(10));    // 0 - 10之间的随机数
        System.out.println(random1.nextDouble());   // 0.0 - 1.0 之间的随机数
    }
    
    注:Math.random()底层也是调Random类实现的

五、String类

  • 直接使用,无需导包。java.lang;
  • 字符串不可变
  • String类不可被继承,不能有子类
    在这里插入图片描述
  • String底层是一个char类型的数组
    在这里插入图片描述

1、常用方法

  • 通过构造器创建对象
        // 通过构造器创建对象
        String str1 = new String();
        String str2 = new String("abc");
        String str3 = new String(new char[]{'a', 'b', 'c'});
    
  • 字符串长度
    	// 字符串长度
        System.out.println(str2.length());  // 3
    
  • 字符串是否为空
        // 字符串是否为空
        System.out.println(str1.isEmpty()); // true
        System.out.println(str3.isEmpty()); // false
    
  • 得到字符串对应字符
        // 得到字符串对应字符
        System.out.println(str2.charAt(2)); // c
    
  • 字符串比对,equals()、compareTo()
        System.out.println(str2 == str3); // false
        System.out.println(str2.equals(str3)); // true
    
    	System.out.println(str2.compareTo(str3));   // 0,字符串相同
        String str4 = new String("abcdef");
        System.out.println(str2.compareTo(str4)); // -3,长度的差值
        String str5 = new String("accdef");
        System.out.println(str2.compareTo(str5));  // -1,返回的是不一样的那个位的ASCII码的差值
    
  • 字符串截取
        String str1 = "abcDEFGHgkl";
        System.out.println(str1.substring(3));
        System.out.println(str1.substring(3, 6));   // DEF,[3, 6)
    
  • 字符串拼接
        System.out.println(str1.concat("aaaaa"));   // abcDEFGHgklaaaaa
    
  • 字符串替换
        String str2 = "abcDEaGHgal";
        System.out.println(str2.replace('a', 'b')); // bbcDEbGHgbl
    
  • 按照置顶的字符串分裂为数组的形式
        String str3 = "a-b-c-D-E-a-G";
        String[] split = str3.split("-");
        System.out.println(Arrays.toString(split)); // [a, b, c, D, E, a, G]
    
  • 转为大小写
        String str4 = "abcDEaGHgal";
        System.out.println(str4.toUpperCase()); // ABCDEAGHGAL
        System.out.println(str4.toLowerCase()); // abcdeaghgal
    
  • 去除前后空格 重要
        String str5 = "    a bc  D    ";
        System.out.println(str5.trim());    // a bc  D
    
  • 转换为String类型
        System.out.println(String.valueOf(true));   // "true"
    

2、String内存分析

1)无变量参与的字符串拼接

    public static void main(String[] args) {
        String s1 = "a" + "b" + "c";
        String s2 = "ab" + "c";
        String s3 = "a" + "bc";
        String s4 = "abc";
        String s5 = "abc" + "";
    }

以上字符串,会进行编辑器优化,直接合并成为完整的字符串,然后再常量池中,常量池的一大特点就是第一次如果没有这个字符串,就放进去,如果有这个字符串,就直接从常量池中取。

如果是 String s6 = new String(“abc”);,内存会在堆中开辟控件,其实底层value数组也是指向字符串常量池的“abc“

3)有变量参与的字符串拼接

        String a = "abc";
        String b = a + "def";
        System.out.println(b);

a变量再编译的时候不知道a是”abc“字符串,所以不会进行编辑器优化,不会直接合并为”abcdef“

3、字符串分类

  • 不可变字符串:String
  • 可变字符串:StringBuilder、StringBuffer

1)StringBuilder与StringBuffer

当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
在这里插入图片描述
在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。

    public static void main(String args[]){
        StringBuilder sb = new StringBuilder(10);
        sb.append("hello..");
        System.out.println(sb);     // hello..
        sb.append("!");
        System.out.println(sb);     // hello..!
        sb.insert(7, "Java");
        System.out.println(sb);     // hello..Java!
        sb.delete(5,7);
        System.out.println(sb);    // helloJava!
    }

2)常用方法

  • 主要方法
    在这里插入图片描述
  • 以及其他常用方法
    在这里插入图片描述
    在这里插入图片描述
    StringBuilder:效率高,线程不安全
    StringBuffer:效率低,线程安全
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值