Java基础个人笔记----常用类

个人学习笔记,部分图片资源来自学习文件。 感谢尚硅谷。

文章首部

目录

            • 文章首部
      • 一、字符串相关的类
        • 1、String 类
        • 2、StringBuffer
        • 3、StringBuilder
        • 4、String、StringBuffer、StringBuilder 的区别
      • 二、JDK 8 之前的日期时间API
        • 1、java.lang.System
        • 2、java.util.Date
        • 3、java.sql.Date(extends java.util.Date)
        • 4、SimpleDateFormat
        • 5、Calendar
      • 三、JDK 8 中新的日期时间API
        • 1、LocalDate、LocalTime、LocalDateTime
        • 2、 瞬时点:Instant
        • 3、格式化与解析日期或时间-java.time.format.DateTimeFormatter
      • 四、Java 比较器
        • 1、自然排序:java.lang.Comparable
        • 2、定制排序:java.util.Comparator
      • 五、 System类
      • 六、 Math类
      • 七、BigInteger与BigDecimal
        • 1、BigInteger
            • 构造器.
          • 常用方法常用方法.
        • 2、BigDecimal
            • 构造器
          • 常用方法
            • 构造器
          • 常用方法

一、字符串相关的类

1、String 类

字符串,使用一对 双引号----“ ”,包起来表示

  • 1.String 声明为final ,即不能被继承
  • 2.String实现了两个接口:
    • Serializable接口:表示字符串是支持序列化的
    • Comparable接口:表示String可以比较大小
  • 3.String内部定义了final char[] value 用于存储字符串数据
  • 4.String :代表不可变的字符序列,简称不可变性
    体现:以下三种情况要重新指定内存区进行赋值,不能使用原先的value进行赋值:
    • 当字符串重新赋值时
    • 对现有的字符串进行连接操作时
    • 当调用String中的replace()修改指定字符或字符串时
  • 5.通过字面量的方式(区别于new)给字符串赋值,此时的字符串值声明在字符串常量池
  • 6.字符串常量池中不会存储相同内容的字符串
  • 7.拼接 注意点:
    • 常量和常量的拼接结果在常量池,且不会存在相同结果的常量
    • 拼接时只要其中有一个是变量,结果就在堆空间中
    • 拼接的结果如果调用intern(),返回值就在常量池中
  • 8.实例化方式:
//方式一:字面量定义 s1的数据java声明在方法区的字符串常量池
String s1 = "java";
//方式二:new + 构造器 s2保存的地址值,是数据在堆空间中开辟空间后对应的地址值
String s2 = new String("java");

2、StringBuffer

java.lang.StringBuffer代表可变的字符序列,不同于String,其对象必须使用构造器生成。

StringBuffer常用方法:
Java基础个人笔记----常用类_第1张图片Java基础个人笔记----常用类_第2张图片

3、StringBuilder

StringBuilder 和 StringBuffer 非常类似,均代表可变的字符序列,而且
提供相关功能的方法也一样

4、String、StringBuffer、StringBuilder 的区别

  • String(JDK1.0):不可变字符序列
  • StringBuffer(JDK1.0):可变字符序列、效率低、线程安全
  • StringBuilder(JDK 5.0):可变字符序列、效率高、线程不安全 (如不考虑线程安全,首选)

注意:作为参数传递的话,方法内部String不会改变其值,StringBuffer和StringBuilder
会改变其值

返回目录

二、JDK 8 之前的日期时间API

1、java.lang.System

System类提供的==public static long currentTimeMillis()==用来返回当前时
间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差(时间戳)。–此方法适于计算时间差

2、java.util.Date

  • 两个构造器的使用
    • Date() : 创建一个对应当前时间的对象
    • Date(long date) : 创建指定毫秒数的对象
  • 两个方法的使用
    • toString() : 显示当前的年、月、日、时、分、秒、时区
    • getTime (): 获取当前Date对象对应的毫秒数(时间戳)

3、java.sql.Date(extends java.util.Date)

数据库部分:对应着数据库中的日期类型的变量

4、SimpleDateFormat

//实例化SimpleDateFormat:默认的
        SimpleDateFormat sdf = new SimpleDateFormat();
// 格式:日期-Tue May 12 22:13:14 CST 2020   字符串-2020/5/12 下午10:08

//开发中基本不用默认格式,自定义格式类型

//2020-05-12 10:27:58
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String format1 = sdf1.format(date);

    //格式化:  日期——> 字符串
    System.out.println(format1);//2020-05-12 10:27:58

    //解析: 字符串--> 日期
    Date date2 = null;
    try {
    //当解析时,parse()只能识别构造器指定的日期格式
        date2 = sdf1.parse("2020-05-12 10:27:58");
    } catch (ParseException e) {
        e.printStackTrace();
    }
    System.out.println(date2); //Tue May 12 10:27:58 CST 2020


5、Calendar

java.util.Calendar(日历)类是一个抽象基类,主用用于完成日期字段之间相互操作的功能。
获取Calendar实例的方法

  • 调用它的子类GregorianCalendar的构造器
  • 使用静态方法-----Calendar.getInstance()–该方法new的对象也属于GregorianCalendar的对象
    //常用方法
        //get()
        //当前天数是一个月中的第几天    13
        System.out.println(calerdar.get(Calendar.DAY_OF_MONTH));
        //当前天数是一年中的第几天     134
        System.out.println(calerdar.get(Calendar.DAY_OF_YEAR));
        //当前天数是一个星期中的第几天,从星期日开始算  4
        System.out.println(calerdar.get(Calendar.DAY_OF_WEEK));

        //set():修改Calendar中的值  22
       calerdar.set(Calendar.DAY_OF_MONTH,22);
       System.out.println(calerdar.get(Calendar.DAY_OF_MONTH));

        //add()   22+3-->25 减天数就加负数
        calerdar.add(Calendar.DAY_OF_MONTH,3);
        System.out.println(calerdar.get(Calendar.DAY_OF_MONTH));


        //getTime() 日历类--->Date对象
        Date date3 = calerdar.getTime();
        System.out.println(date3);//Mon May 25 09:07:51 CST 2020


        //setTime()  Date对象--->日历类
        Date date4 = new Date();
        calerdar.setTime(date4);
        System.out.println(calerdar.get(Calendar.DAY_OF_MONTH));

返回目录

三、JDK 8 中新的日期时间API

java.time --(吸收了Joda.time),弥补了JDK 8 之前的一些缺陷

1、LocalDate、LocalTime、LocalDateTime

LocalDate、LocalTime、LocalDateTime 类是其中较重要的几个类,它们的实例
是不可变的对象,分别表示使用 ISO-8601日历系统的日期、时间、日期和时间。

  • LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储 生日、纪念日等日期
  • LocalTime表示一个时间,而不是日期
  • LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一
//获取当前时间---now()
        LocalDate localDate = LocalDate.now();
        LocalTime localTime=  LocalTime.now();
        LocalDateTime localDateTime =  LocalDateTime.now();

        System.out.println(localDate);
        System.out.println(localTime);
        System.out.println(localDateTime);

        //设定指定的年月日时分,没有偏移量--of()
        LocalDateTime localDateTime1 = LocalDateTime.of(2020,5,13,9,40);
        System.out.println(localDateTime1);//2020-05-13T09:40

        //getXxx():
        System.out.println(localDateTime.getDayOfMonth());
        System.out.println(localDateTime.getDayOfWeek());
        System.out.println(localDateTime.getMonth());
        System.out.println(localDateTime.getMonthValue());
        System.out.println(localDateTime.getMinute());

        //临时改变,体现了不可变性--with()
        LocalDate localDate1 = localDate.withDayOfMonth(22);
        System.out.println(localDate);
        System.out.println(localDate1);

        //增加---plus()
        LocalDateTime localDateTime2 = localDateTime.plusDays(5);
        System.out.println(localDateTime);
        System.out.println(localDateTime2);

        //减少--minus()
        LocalDateTime localDateTime3 = localDateTime.minusDays(3);
        System.out.println(localDateTime);
        System.out.println(localDateTime3);

2、 瞬时点:Instant

Instant:时间线上的一个瞬时点。 这可能被用来记录应用程序中的事件时间戳
类似于java.util.Date类

// Instant  
        返回UTC时区的标准时间
        Instant instant = Instant.now();
        System.out.println(instant);

        //根据时区时间差进行改变,偏移量
        OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
        System.out.println(offsetDateTime);

        //获取自1970年1月1日0时0分0秒(UTC)开始的毫秒数
        long milli = instant.toEpochMilli();
        System.out.println(milli);

        //通过指定的毫秒数获得指定的日期--ofEpochMilli()
        Instant instant1 = Instant.ofEpochMilli(1589339875695L);
        System.out.println(instant1);

3、格式化与解析日期或时间-java.time.format.DateTimeFormatter

类似于SimpleDateFormat类,实例化方式:

  • 预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
  • 本地化相关的格式。如:ofLocalizedDateTime(FormatStyle.LONG)
  • 自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
 /*
        DateTimeFormatter:格式化与解析日期或时间
         */
        //实例化方式:
//预定义的标准格式\本地化相关的格式 略
//重点使用自定义格式,较灵活

//        自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
        DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
        String str4 = formatter2.format(LocalDateTime.now());
        System.out.println(str4);//2020-05-13 12:22:39

        //解析
        TemporalAccessor parse1 = formatter2.parse("2020-05-13 12:22:39");
        System.out.println(parse1);
        //{MinuteOfHour=22, NanoOfSecond=0, HourOfAmPm=0, MilliOfSecond=0, MicroOfSecond=0,
        // SecondOfMinute=39},ISO resolved to 2020-05-13

返回目录

四、Java 比较器

1、自然排序:java.lang.Comparable

Comparable接口的使用举例:
1、像String 、包装类等实现了Comparable接口,重写了compareTo()方法
2、像String 、包装类重写compareTo()后,从小到大排列
3、重写的规则:
如果当前对象this大于形参对象obj,返回正整数
如果当前对象this小于形参对象obj,返回负整数
如果当前对象this等于形参对象obj,返回零
4、对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo()方法在compareTo()中指明排序

 //指明对象排序方式: 价格从低到高;再按照产品名称从低到高
    @Override
    public int compareTo(Object o) {
       if (o instanceof Goods){
           Goods goods = (Goods)o;

           if (this.price > goods.price){
               return 1;
           }else if (this.price < goods.price){
               return -1;
           }else {
//               return 0;
               return this.name.compareTo(goods.name);
           }

           //方式二
//           return Double.compare(this.price,goods.price);
       }

       throw new RuntimeException("传入的数据类型不一样");
    }

2、定制排序:java.util.Comparator

当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,
或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那
么可以考虑使用 Comparator 的对象来排序

Comparator com = new Compare(){
	public int compare(Object o1, Object o2){
		if(o1 instanceof XXX && O2 instanceof xxx){
			
	  }	
	  	return 0//可以实现排序条件的嵌套,再来个if判断
	}
}

返回目录

五、 System类

  • System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。
    该类位于java.lang包
  • 由于该类的构造器是private的,所以无法创建该类的对象,也就是无法实
    例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便
    的进行调用
  • System类内部包含in、out和err三个成员变量,分别代表标准输入流
    (键盘输入),标准输出流(显示器)和标准错误输出流(显示器)
  • 成员方法:
    • native long currentTimeMillis():该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数
    • void exit(int status):该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等
    • void gc():该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况
    • String getProperty(String key):该方法的作用是获得系统中属性名为key的属性对应的值。系统中常见的属性名以及属性的作用如下表所示:
      Java基础个人笔记----常用类_第3张图片
      返回目录

六、 Math类

java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回
值类型一般为double型.
Java基础个人笔记----常用类_第4张图片
返回目录

七、BigInteger与BigDecimal

1、BigInteger

java.math包的BigInteger可以表示不可变的任意精度的整数。

构造器.

BigInteger(String val):根据字符串构建BigInteger对象

常用方法常用方法.

Java基础个人笔记----常用类_第5张图片

2、BigDecimal

一般的Float类和Double类可以用来做科学计算或工程计算,但在商业计算中
要求数字精度比较高,故用到java.math.BigDecimal
BigDecimal类支持不可变的、任意精度的有符号十进制定点数

构造器
  • public BigDecimal(double val)
  • public BigDecimal(String val)
常用方法
  • public BigDecimal add(BigDecimal augend)
  • public BigDecimal subtract(BigDecimal subtrahend)
  • public BigDecimal multiply(BigDecimal multiplicand)
  • public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

math.BigDecimal==类
BigDecimal类支持不可变的、任意精度的有符号十进制定点数

构造器
  • public BigDecimal(double val)
  • public BigDecimal(String val)
常用方法
  • public BigDecimal add(BigDecimal augend)
  • public BigDecimal subtract(BigDecimal subtrahend)
  • public BigDecimal multiply(BigDecimal multiplicand)
  • public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

你可能感兴趣的:(学习,Java,java)