常用类和基础API

发布时间:2023年12月30日

目录

String类的使用(高级)

String类的理解(以jdk8为主)

类的声明

内部声明的属性:(jdk8中)

字符串常量的存储位置

String的不可变性

?String实例化的两种方式

String的连接操作:+(注:以下的常量指的可能是字面量也可能指的是final修饰的常量)?

?String的构造器和常用方法

构造器:

?与数组之间的转换:

复习

?编辑

与char类型数组之间的转换

?与byte数组之间的转换

?String的常用方法

常用查找方法

StringBuffer和StringBuilder类

与String类的对比

StringBuffer和StringBuilder的可变性分析

源码启示:

常用方法

JDK8之前的常见时间API的使用

1.System类的currentTimeMillis()

2.Date类的使用

java.util.Date

java.sql.Date 对应着数据库里的Date类型(是Date的子类)

3.java.SimpleDateFormat类:用于日期时间的格式化和解析(自定义的)?

?4.Calendar日历类(抽象类)

JDK8:新的日期时间API

之前的API的问题

新的api:

LocalDate\LocalTime\LocalDateTime

Instant--->类似于Date?

?DateTimeRFormater

?使用比较器实现排序(重点)

? ?可以考虑两种方法:自然排序,定制排序???

? ?方式一:实现Comparable接口的方式

???方式二:实现Comparator接口的方式 ? ??

? ?两种方式对比

其他常用类的使用

System类

Runtime类(一般用不到)

Math类(凡是与数学运算相关的操作,大家都可以在此类中找相关的方法即可)

BigInteger类:可以表示任意长度的整数

BigDeciml类:可以表示任意精度的浮点数

Random类:nextInt(a)(随机获取从[0,a)范围的整数)


?

String类的使用(高级)

String类的理解(以jdk8为主)

类的声明

  • public final class String
    • implements java.io.Serializable, Comparable<String>, CharSequence,
  • final:String是不可被继承的
  • Serializable:可序列化的接口:凡是实现此接口类的对象就可以通过网络或本地流进行数据的传输
  • Comparable:凡是实现此接口的类,其对象都可以比较大小。

内部声明的属性:(jdk8中)

  • private final char value[];//存储字符串数据的容器
  • final:指明此·value数组一旦初始化,其地址就不可变
  • jdk9中:private final byte value[];存储字符串数据的容器

字符串常量的存储位置

  • 都存储在字符串常量池(StringTable)中.
  • 字符串常量池不允许存放两个相同的常量
  • 字符串常量池,在不同的jdk版本中,存放位置不同
    • jak7之前,存放在方法区
    • jak7及之后,存放在堆空间

String的不可变性

????????1.当对字符串变量重新赋值时,需要重新指定一个字符串常量的位置进行赋值,不能在原有的位置修改

????????2.当对现有的字符串进行拼接操作时,需要重新开辟空间保存拼接以后的字符串,不能在原有的位置修改

????????3.当调用字符串的replace()替换现有的某个字符时,(里面的操作实际上也是new新的)需要重新开辟空间保存修改以后的字符串,不能在原有的位置修改

?String实例化的两种方式

????????第一种:String s1="hello";(字面量的定义方式)

????????第二种:String s1=new String("hello");(new方式)

? ? ? ? 问?:String s1=new String("hello");在内存中创建了几个对象?俩个,一个是堆空间中new的对象,另一个是字符常量池中生成的字面量

????????

String的连接操作:+(注:以下的常量指的可能是字面量也可能指的是final修饰的常量)?

  • 常量+常量:结果仍然存在字符串常量池中
  • 常量+变量 或 变量+常量 或 变量+变量都会通过new的方式创建一个新的字符串,返回堆空间中此字符串对象的地址(创建了一个StringBuilder的实例,通过append方法添加字符串,最后调用toString方法返回一个字符串,实际上是new的一个实例)
  • 调用字符串的intern():返回的都是字符串常量池中字面量的地址
  • concat():不管常量还是变量调用此方法,同样不管参数是常量还是变量,总之调用完之后,都返回一个新new的对象

?String的构造器和常用方法

构造器:

?与数组之间的转换:

复习
与char类型数组之间的转换

?与byte数组之间的转换

?String的常用方法

  • boolean isEmpty( ):字符串是否为空

  • int length( ):返回字符串的长度
  • String concat(xx):拼接
  • boolean equals ( Object obj):比较字符串是否相等,区分大小写
  • boolean equalsIgnoreCase ( Object obj):比较字符串是否相等,不区分大小写

  • int compareTo(String other):比较两个字符串的大小,结果为负,后面的大,反之前面的大。相等为0

  • int compareToIgnoreCase(String other):忽略大小的写比较
  • String toLowerCase( ):将字符串中的大写字母都转为小写
  • String toUpperCase( ):将字符串中的小写字母都转为大写
  • String trim():去掉字符串前后的空白符
  • public String intern( ):结果在常量池中共享

常用查找方法

  • boolean contains(xx):是否包含xx

  • int indexOf(xx):从前往后找当前字符串中xx,即如果有:返回第一次出现的下标,反之返回-1

  • int indexOf(String str ,int fromIndex):返回指定字符串在此字符串中第一次出现的索引
  • int LastindexOf(xx):从后往前找当前字符串中的xx,即如果有:返回最后一次出现的下标,反之返回-1

  • int LastindexOf(String str ,int fromIndex):(这个结果为0)

  • String substring(int beginIndex): (底层是new的)

  • char数组相关方法
    • char charAt(index):返回[index]位置的字符
    • static String valueOf(char[] data):返回指定数组中表示该字符序列的String
    • static String copyValueOf(char[] data):
    • boolean startWith(xx):测试此字符串是否以指定的前缀开始
    • boolean startWith(String prefix,int toffset ):测试此字符串是否从指定索引开始的字符串是否以指定的前缀开始

    • boolean endsWith(xx):测试此字符串是否以指定的后缀结束
  • 最后
    • String replace(char oldChar , char newChar):返回一个新的字符串,他是通过用newChar替换掉了原来的所有oldChar字符。

    • String replace(CharSequence target,CharSequence replacement):

    • String replaceAll(String regex,String replacement)(超纲)
    • String replaceFirst(String regex,String replacement)(超纲)

StringBuffer和StringBuilder类

与String类的对比

  • String:不可变的字符序列;底层使用char[](jdk8及之前),底层使用byte[](jak9及之后)
  • StringBuffer:可变的字符序列;JDK1.0声明,线程安全的,效率低
  • StringBuilder:可变的字符序列;JDK5.0声明,线程不安全,效率高

StringBuffer和StringBuilder的可变性分析

源码启示:

  • 如果开发中需要频繁的针对于字符串进行增删改等操作,建议使用StringBuffer或StringBuilder替换String,因为String效率低
  • 如果开发中不涉及线程安全问题,建议使用StringBuilde替换StringBuffer
  • 如果开发中大体确定要操作字符的个数,建议使用带int capacity参数的构造器。因为可以避免底层多次扩容,性能更高

常用方法

????????增append(xx)、删delete(int start,int end) deleteCharAt(int index)、改replace(int start ,int end) setCharAt(int index)、查charAt(int index)、插insert(int index,xx)、长度 length( )、反转 reserve( )

JDK8之前的常见时间API的使用

1.System类的currentTimeMillis()

  • 获取当前时间对应的毫秒数,long类型,时间戳
  • 当前时间与1970年1月1日0时0分0秒之间的毫秒数
  • 常用来计算时间差

2.Date类的使用

java.util.Date

两个构造器

  • Date date=new Date()
  • Date date=new Date(毫秒数)

两个方法

  • toString()精确到了时分秒
  • long getTime()

java.sql.Date 对应着数据库里的Date类型(是Date的子类)

????????对应着SQL里面的date类型

3.java.SimpleDateFormat类:用于日期时间的格式化和解析(自定义的)?

格式化:日期——>字符串

解析:字符串——>日期

?

根据此表设置格式?

?4.Calendar日历类(抽象类)

创建实例

方法测试

日期时间的转化

JDK8:新的日期时间API

之前的API的问题

  • 可变性:像日期和时间这样的类应该是不可变的。
  • 偏移性:Date中的年份是从1900开始的,而月份都从0开始
  • 格式化:格式化只对Date有用,Calendar则不行。
  • 此外,他们也不是线程安全的,不能处理润秒。

新的api:

LocalDate\LocalTime\LocalDateTime

Instant--->类似于Date?

?DateTimeRFormater

?

?使用比较器实现排序(重点)

? ?可以考虑两种方法:自然排序,定制排序???

?

? ?方式一:实现Comparable接口的方式

  • ①具体的类A实现Comparable接口
  • ②重写Comparable接口中的compareTo(Object obj)方法,在此方法中指明比较类A的对象的大小标准
  • ③创建类A的多个实例,进行大小的比较或 排序

?

???方式二:实现Comparator接口的方式 ? ??

  • ①创建了一个实现了Comparator接口的实现类
  • ②实现类要求重写Comparator接口的抽象方法compare(Object o1,Object o2)方法,在此方法中指明要比较大小的对象的关系。
  • ③创建此实现类的对象,并将此对象传入到相关方法的参数位置即可。

?

? ?两种方式对比

  • 角度一:自然排序:唯一的,单一的。定制排序:灵活的,多样的
  • 角度二:自然排序:一劳永逸的。定制排序:临时的
  • 角度三:自然排序:Comparanle,compareTo(Object obj)。定制排序:Comparator,compare(Object obj1 Object obj2)。

其他常用类的使用

System类

  • 属性:out\in\err
  • 方法:gc( )\exit(int status)(0为正常退出,非零为异常退出)\currentTimeMills( )获取系统当前的时间\getProperty(String key)

Runtime类(一般用不到)

  • 对应java进程的内存使用的运行时环境,是单例的。
  • 方法:Runtime getRuntime( )\long totalMemory( )\long maxMemory()\long freeMemory( )

Math类(凡是与数学运算相关的操作,大家都可以在此类中找相关的方法即可)

  • double abs( double a)返回a的绝对值
  • double ceil(double a)返回大于等于参数的最小整数
  • double floor(double a)返回小于等于参数的最大整数
  • long round(double a) (技巧:floor(x+0.5))
  • double pow(double a,double b):返回a的b幂次方法
  • double sqrt(double a):返回a的平方根
  • double random( ):返回[0,1)的随机值
  • final double PI:返回圆周率
  • double max(double x,double y):返回两个参数的最大值
  • double min(double x,double y):返回两个参数的最小值
  • 其他acos,asin,atan,cos,sin,tan三角函数

BigInteger类:可以表示任意长度的整数

BigDeciml类:可以表示任意精度的浮点数

Random类:nextInt(a)(随机获取从[0,a)范围的整数)

?

文章来源:https://blog.csdn.net/yiyiyu66/article/details/135276292
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。