Skip to content

Latest commit

 

History

History
331 lines (262 loc) · 10.7 KB

8-常用类.md

File metadata and controls

331 lines (262 loc) · 10.7 KB

Object类

^23b675

  • Objcet类是所有类的父类
  • Objcet类java.lang包下
  • Object类只有无参构造器

常用方法有:

1. `equals()`
2. `hashCode()`
3. `wait()`
4. `clone()`
5. `finalize()`
6. `notify()`

包装类/包裹类

java的每个[[3-Java SE 入门#^93d336|基本数据类型]]都有包装类。

为何需要包装类?

  1. 集合只能存储包装类型,不能存储基本数据类型
  2. 基本数据类型不符合Java面向对象思想

基本数据类型对于的包装类型: ^03713e

byte - Byte             继承于Number -继承于Object
short - Short           继承于Number -继承于Object
int  - Integer          继承于Number -继承于Object
long - Long             继承于Number -继承于Object
float - Float           继承于Number -继承于Object
double - Double         继承于Number -继承于Object
char - Character        继承于Object
boolean - Boolean       继承于Object

使用包装类

  1. 所在包 java.lang
  2. 继承结构 Integer -Number - Object
  3. 类修饰符 final
  4. 实现的接口: Serializable: 支持序列化和反序列化 Comparable<Integer>: 比较器。使用集合时排序用
  5. 构造器: 没有无参构造 Integer(int value) Integer(String s)
  6. 字段:MAX_VALUE , MIN_VALUE ,TYPE , SIZE

装箱与拆箱

^4b0ae1

  1. 装箱 : valueOf()

    Integer i1 = Integer.valueOf(10);

    由基本数据类型转为包裹类型

  2. 拆箱:intValue()

    int i2 = new Integer(10).intValue();

    由包裹类型转为基本数据类型

常用方法

  1. compare(int x,int y)
  2. equals(Object obj)
  3. parseInt(String s)
  4. toString()

Math类

Math类的直接父类是Object
Math类包含执行基本数字运算的方法,如指数,对数,平方根和三角函数
  1. 构造器是私有的,不实现任何接口

  2. Math下的字段和方法都是静态的。因此可以使用静态导入。

    import static java.lang.Math.*

    静态导入后,使用其方法和字段值就不需要Math.PI了 可以直接PI

  3. Math无法做数值特别精细的计算

常用方法

  1. abs(int a) 返回值为 int绝对值
  2. random() 返回值[0,1) 区间内的随机数
  3. sqrt(double a) 返回平方根
  4. floor() 向下取整
  5. ceil() 向上取整
  6. round() 四舍五入

Random类

Random是java.util包下的类
Random类的直接父类是Object类
该类的实例用于生成伪随机数的流

Math.random()的底层实现也是使用了Random

Random类的随机数指定范围: nextInt(扩大倍数)

例如:获取10以内的随机整数 `new Random().nextInt(10)` 
	以上写法等价于 `Math.random()*10`

String类

String类的直接父类是Object类
String类存在于java.lang包下
String类是final修饰的,不可被继承

字符串底层通过char类型数组进行内容存储 >> JDK 8

JDK 8 之后,字符串底层通过byte类型数组来存储内容 private final byte[] value;

并且该数组是final类型,就意味着一旦被初始化,值就不可更改。

常用方法

  1. compareTo(String anotherString)

    按照字典顺序比较两个字符串

    • 如果两个字符串长度相同,内容也相同,返回0
    • 如果字符串长度相同,内容不同,则返回第一个不同的字符的ASCII码差值(前一个减去后一个)
    • 如果字符串长度不同,内容相同,返回长度的差值
    • 如果长度不同,内容也不同,则返回第一个不同的字符的ASCII码差值(前一个减去后一个)
  2. concat(String str)

    将指定的字符串连接到该字符串的末尾

    得到的是一个新的匿名字符串.

  3. isEmpty()

    判断字符串对象是否为空

    当且仅当字符串对象的length()为0时返回false

  4. substring(int beginIndex,int endIndex)

    截取字符串 范围是 [beginIndex, endIndex)

  5. split(String regex,int limit)

    将此字符串拆分为给定的regex表达

  6. toLowerCase()

    将字符串转为全小写

  7. toUpperCase()

    将字符串转为全大写

  8. equalsIgnoreCase(String anotherString)

    忽略大小写比较字符串

  9. trim()

    返回字符串,并删除任何前导和尾随空格


StringBuilder类

字符串分为两大类:不可变字符串(String)和可变字符串(StringBuffer和StringBuilder)
直接父类是Object类
实现了Serialiazable , Appendable , CharSequence接口

JDK8之前通过char[]存储单个元素

JDK8之后通过byte[]存储单个元素

StringBuilder 通过无参构造设置初始空间大小是16byte

count标记元素个数

常用方法

  1. append(String str) 拼接内容
  2. delete(int start,int end) 删除区间在[start,end)中的元素
  3. insert(int offset,char c) 在offset下标索引中插入char类型的参数c
  4. reverse() 将该字符序列反序输出
  5. replace(int start, int end, String str) 用指定的str替换索引位置处的字符内容 区间是[start,end)
  6. charAt(int index) 返回索引位置的内容
  7. setCharAt(int index, char ch) 将指定下标索引出的字符替换为ch

StringBuffer类

StringBuffer类和StringBuilder相似,构造方法和方法基本相同。

不同的是:

`StringBuffer`是线程安全的,但是效率偏低。`StringBuilder`是线程不安全的,但是效率偏高。
通常情况下创建一个可变字符串,优先考虑使用`StringBuilder`

在 Java 中,StringBuffer 是可变的字符串,通过调用方法来修改其内容,而不是创建新的对象。当你使用 append 方法修改 StringBuffer 时,它会直接在原始对象上进行更改,而不是创建一个新的对象。

总结:

StringBuffer: JDK1.0开始 效率低 线程安全

StringBuilder: JDK1.5开始 效率高 线程不安全


日期和时间类

(util包下)Date类

是java.util包下的类
直接父类是Object类

默认时间格式是:

Tue Aug 08 14:58:30 CST 2023

时间类主要用于存储时间

获取系统当前时间推荐使用: System.currentTimeMillis()

此方法通常用于衡量一些算法的耗时

(sql包下)Date类

该类的直接父类是java.util.Date
  1. 该类对象通过传入一个毫秒时间来构造: Date(long date)
  2. 打印对象输出的结果只有年月日,没有时分秒。而java.util.Date打印出来有年月日,时分秒
  3. 字符串转时间: valueOf(String s )

SimpleDateFormat类

  • 如何将String类型转换为java.util.Date类型?
    1. String转换为java.sql.Date
    2. java.sql.Date转换为java.util.Date SimpleDateFormat类可将String类型直接转换为java.util.Date 简化了流程

Calendar类

日历类 ,用来处理/计算时间。如获取某个时间的特定部分,对特定部分做加减操作

  1. Calendar是一个抽象类。提供了一个静态方法getInstance()来获取实例

    Calendar calendar = Calendar.getInstance();

  2. DateCalendar之间相互转换

    Calendar转为Date: c.getTime(); Date转为Calendar: c.setTime(date)

  3. 操作时间

    获取某个部分: get(int i)

     获取年:`get(Calendar.YEAR)`
     获取月:`get(Calendar.MONTH)`
     ...
    
  4. void add(int field,int amount)

    为给定日历的字段添加或减去指定的偏移量

    例如:

//当前系统时间为2023/8/8
c.add(Calendar.YEAR,10);    //年份偏移量 +10
c.add(Calendar.MONTH, -2);   //月份偏移量 -2
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
System.out.println(sdf.format(c.getTime()));
----------------------------
输出结果: 2033-06-08
  1. void set(int field,int value)

    给指定的字段设定值

    例如:calendar.set(Calendar.YEAR,2000)

Calendar中的静态字段值:

  1. ERA(时代):
  • BC(Before Christ,公元前)
  • AD(Anno Domini,公元)
  1. YEAR(年):
  • 表示年份,如2023、2024等。
  1. MONTH(月):
  • 月份,范围从0(一月)到11(十二月)。
  1. WEEK_OF_YEAR(年中周数):
  • 表示一年中的周数,范围从1到53。
  1. WEEK_OF_MONTH(月中周数):
  • 表示一个月中的周数,范围从1到6。
  1. DATE(日):
  • 表示一个月中的日期,范围从1到31。
  1. DAY_OF_MONTH(月中天数):
  • 表示一个月中的天数,范围从1到31。
  1. DAY_OF_WEEK(星期几):
  • 表示一周中的某天,范围从1(星期日)到7(星期六)。
  1. DAY_OF_WEEK_IN_MONTH(月中第几周的星期几):
  • 表示一个月中的第几周的星期几。
  1. AM_PM(上午/下午):
  • 表示上午(0)或下午(1)。
  1. HOUR(时):
  • 12小时制的小时数,范围从0到11。
  1. HOUR_OF_DAY(天中的小时数):
  • 24小时制的小时数,范围从0到23。
  1. MINUTE(分):
  • 分钟数,范围从0到59。
  1. SECOND(秒):
  • 秒数,范围从0到59。
  1. MILLISECOND(毫秒):
  • 毫秒数,范围从0到999。

JDK8新增的日期时间API

LocalDate /LocalTime/ LocalDateTime

  1. 创建本地当前时间: now()
LocalDate localDate = LocalDate.now();  
LocalTime localTime = LocalTime.now();  
LocalDateTime localDateTime = LocalDateTime.now();
  1. 设置日期时间 : of()
LocalDate localDate1 = LocalDate.of(2023, 9, 9);  
LocalTime localTime1 = LocalTime.of(15, 23,45);  
LocalDateTime localDateTime1 = LocalDateTime.of(2023, 8, 9, 8, 5, 45);
  1. 获得属性方法 : getXXX()
System.out.println(localDate.getYear());  
System.out.println(localDate.getMonth());  
System.out.println(localDate.getMonthValue());  
System.out.println(localDate.getDayOfMonth());  
System.out.println(localDate.getDayOfWeek());
  1. 对时间某一部分设置,增加或减少 :withMonths() plusMonths() minusMonths()
//localDate 是当前时间的对象
LocalDate localDate2 = localDate.withMonth(12);  
LocalDate localDate3 = localDate.plusMonths(1);  
LocalDate localDate4 = localDate.minusMonths(5);
=============================
以上代码打印结果是:
2023-12-09
2023-09-09
2023-03-09

DateTimeFormatter

  1. String 和时间类型转换
    • String转为时间 parse(String str)

      DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy/MM~~dd HH:mm@ss");

      System.out.println(dtf2.parse("2028/10~~01 15:31@28"));

    • 时间转为String format(LocalDateTime lc)

      //在JDK8以上的版本,该语句可能会报错 DateTimeFormatter dtf = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG) System.out.println(dtf.format(LocalDateTime.now()));