Java常用类解析总结

字符串相关的类

String的特性

  • String类:代表字符串。Java程序中所有的字符串字面量都作为此类的实例实现
  • String是一个final类,代表_不可变的字符序列_
  • 字符串是常量,用双引号引起表示。他们的值在创建之后不能更改
  • String对象的字符内容是存储在一个字符数组 value[]中的
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

    /** Cache the hash code for the string */
    private int hash; // Default to 0
   	}

结论:

  • 常量与常量的拼接结果是在常量池中,且常量池中不会存在相同内容的常量
  • 只要其中有一个是变量,结果就在堆中
  • 如果拼接结果调用 intern()方法,返回值就在常量池中

常用API

  • int length(): 返回字符串的长度
  • char charAt(): 返回某索引处的字符
  • boolean isEmpty(): 判断字符串是否是空字符串
  • String toLowerCase(): 将字符转换为小写
  • String toUpperCase(): 将字符转换为大写
  • String trim(): 返回字符串的副本,忽略前后空格
  • boolean equals(Object obj): 比较字符串的内容是否相同
  • boolean equalsIgnoreCase(String anotherString): 与equals方法类似,忽略大小写
  • String concat(String str): 将指定字符串连接到此字符串的结尾,等价于“+”
  • int compareTo(String anotherString): 比较两个字符串的大小
  • String substring(int beginIndex): 返回一个新的字符串,它是此字符串的从beginIndex开始截取到字符串末尾
  • String substring(int beginIndex,int endIndex): 返回一个新字符串,它是此字符串从beginIndex开始 ,到endIndex-1结束
  • boolean endsWith(String suffix): 测试此字符串是否以指定的后缀结束
  • boolean startsWith(String prefix): 测试此字符串是否以指定的前缀开始
  • boolean startsWith(String prefix,int toffset): 测试此字符串从指定索引开始的子字符串是否以指定前缀开始
  • boolean contains(CharSequence s): 当且仅当此字符串包含指定的char值序列时,返回true
  • int indexOf(String str): 返回指定字符串在此字符串中第一次出现出的索引
  • int indexOf(String str,int fromIndex): 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始
  • int lastIndexOf(String str): 返回指定子字符串在此字符串中最右边出现处的索引
  • int lastIndexOf(String str,int fromIndex): 返回指定子字符串在此字符串中最后一次出现的索引,从指定的所引处开始寻找
  • String replace(char oldChar,char newChar): 返回一个新的字符串,它是通过newChar替换字符串中出现的所有oldChar得到的
  • String replace(CharSequence target,CharSequence replacement): 使用指定的字面值替换序列,替换此字符串所有匹配字面值目标序列的子字符串
  • String replaceAll(String regex,String replacement): 使用给定的replacement 替换此字符串所有匹配给定的正则表达式的子字符串
  • String replaceFirst(String regex,String replacement): 使用给定的replacement替换此字符串匹配给定的正则表达式的第一个子字符串
  • boolean matches(String regex): 返回此字符串是否匹配给定的正则表达式
  • String[] split(String regex): 根据给定的正则表达式的匹配拆分此字符串
  • String[] split(String regex,int limit): 根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全放在最后一个元素中

String、StringBuffer、StringBuilder类对比

  1. 三者有何异同?
    String: 不可变的字符序列;底层用char[]进行存储
    StringBuffer: 可变的字符序列;线程安全,效率低;底层用char[]进行存储
    StringBuilder: 可变的字符序列;JDK5.0新增,线程不安全的,效率高;底层用char[]进行存储
    String 底层使用的是一个 final char[] 进行存储,而StringBuild和StringBuffer使用的是一个char[]进行存储。
    同时,StringBuffer和StringBuilder初始化时使用的是new char[16]
  2. 扩容问题:默认情况下,扩容为原来的2倍+2,同时将原有数组的元素复制到新的数组中。
  3. 建议:开发中建议使用:StringBuffer(int capacity) 或 StringBuilder(int capacity),尽量避免扩容

StringBuffer类的常用方法

  • StringBuffer append(XXX):提供了很多append()方法,用于进行字符串拼接
  • StringBuffer delete(int start,int end):删除指定位置的内容
  • StringBuffer replace(int start,int end,String str): 把[start,end)位置替换为str
  • StringBuffer insert(int offset,xxx): 在指定位置插入xxx
  • StringBuffer reverse(): 把当前字符序列逆转

JDK8之前的日期时间API

  1. java.lang.System类
    System类提供的 public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。此方法适用于计算时间差
  2. java.util.Date 类
    表示特定的瞬间,精确到毫秒
    • 构造器:
      Date(): 使用无参构造器创建的对象可以获取本地当前时间
      Date(long date)
    • 常用方法:
      getTime(): 返回自1970年1月1日00:00:00 GMT以来此Date对象表示的毫秒数
      toString(): 把此Date对象转换为以下形式的String:dow mon dd hh:mm:ss zzz yyy
      其中dow是一周中的某一天(Sun,Mon,Tue,Wed,Thu,Fri,Sat),zzz是时间标准
  3. java.text.SimpleDateFormat类
    Date类的API不易于国际化,SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类
    允许进行格式化:日期–>文本 解析:文本–>日期
    • 格式化:
      SimpleDateFormat(): 默认的模式和语言环境创建对象
      public SimpleDateFormat(String pattern): 该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用
      public String format(Date date): 方法格式化时间对象date
    • 解析:
      public Date parse(String source): 从给定字符串的开始解析文本,以生成一个日期
  4. java.util.Calendar(日历)类
    • Calendar是一个抽象基类,主要用于完成日期字段之间相互操作的功能
    • 获取Calendar实例的方法
      • 使用Calendar.getInstance()方法
      • 调用它的子类GregorianCalendar的构造器
    • 一个Calendar的实例是系统时间的抽象表示,通过 get(int field)方法来取得想要的时间信息。
      • public void set(int field,int value);
      • public void add(int field,int amount);
      • public final Date getTime();
      • public final void setTime(Date date);

JDK8中新日期时间API

背景:JDK8之前的API有一下几个不足
可变性:像日期和时间这样的类应该是不可变量的
偏移性:Date中的年份是从1900年开始,月份是从0开始
格式化:格式化只能针对Date,Calendar则不能使用
此外,线程不安全;也不能处理闰秒

  • 第三次引入的API是成功的,并且Java 8中引入的java.time API已经纠正了过去的缺陷。
  • Java 8 吸收了 Joda-Time的精华,以一个新的开始为Java创建优秀的API。新的 java.Time 中包含了所有关于本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration)的类。历史悠久的Date类新增了toInstant()方法,用于把Date转换成新的表示形式。这些新增的本地化时间日期API大大简化了日期时间和本地化的管理
  • java.time 包含值对象的基础包
  • java.time.chrono 提供对不同的日历系统的访问
  • java.time.format 格式化和解析时间和日期
  • java.time.temporal 包括底层框架和扩展特性
  • java.time.zone 包含时区支持的类
  • LocalDate、LocalTime、LocalDateTime类是其中较重要的几个类,他们的实例是不可变对象
    • LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储生日、纪念日等日期
    • LocalTime表示一个时间,而不是日期
    • LocalDateTime是用来表示日期和时间,这是一个最常用的类之一
方法描述
now()静态方法,根据当前时间创建对象/指定时区的对象
of()静态方法,根据指定日期/时间创建对象
getDayOfMonth()/getDayOfYear()获得月份天数(1-31)/获得年份天数(1-366)
getDayOfWeek()获得星期几(返回一个DayOfWeek枚举值)
getMonthd()获得月份,返回一个Month枚举值
getMonthValue()/getYear()获得月份(1-12)/获得年份
getHour()/getMinute/getSecond()获得当前对象对应的小时、分钟、秒
withDayOfMonth()/withDayOfYear()/withMonth()/withYear()将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象
plusDays(),plusWeeks(),plusMonths(),plusYears(),plusHours()向当前对象添加几天、几周、几个月、几年、几小时
minusMonths(),minusWeeeks(),minusDays(),minusYears(),minusHours()从当前对象减去几月、几周、几天、几年、几小时

瞬时:Instant

  • Instant: 时间线上的一个瞬时点。这可能被用来记录应用程序中的时间时间戳
方法描述
now()静态方法,返回默认UTC时区的Instant类的对象
ofEpochMilli(long epochMilli)静态方法,返回在1970-01-01 00:00:00基础上加上指定毫秒数之后的Instant类的对象
atOffset(ZoneOffset offset)结合即时的偏移量来创建一个 OffsetDateTime
toEpochMilli()返回1970-01-01 00:00:00 到当前时间的毫秒数,即为时间戳

格式化与解析日期或时间

java.time.format.DateTimeFormatter类:该类提供了三种格式化方法:

  • 预定义的标准格式。如:
    ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
  • 本地化相关的格式。如: ofLocalizedDateTime(FormatStyle.LONG)
  • 自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss E”)
方法描述
ofPattern(String pattern)静态方法,返回一个指定字符串格式的DateTimeFormatter
format(TemporalAccessor t)格式化一个日期、时间,返回字符串
parse(CharSequence text)将指定格式的字符串序列解析为一个日期、时间

Java比较器

java实现对象排序的方式有两种:
- 自然排序:java.lang.Comparable
- 定制排序:java.util.Comparator

Comparable接口的使用

使用实例:

  1. 像String、包装类等实现了Comparable接口,重写了compareTo()方法,给出了比较两个对象大小的规则
  2. 重写compareTo(obj)的规则:
    如果当前对象this大于形参对象obj,则返回正整数
    如果小于则返回负整数数
    如果等于返回零

Comparator定制排序

  • 当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,或者实现了java.lang.Comparable接口的排序规则不合适当前的操作,那么可以考虑使用Comparator的对象来排序,强行对多个对象进行整体排序的比较
  • 重写compare(Obj obj1,Obj obj2)方法。o1>o2,返回正整数,等于返回0,小于返回负整数。
  • 可以将Comparator传递给sort方法(如Collections.sort或Arrays.sort),从而允许在排序顺序上实现精确控制。
  • 还可以使用Comparator来控制某些数据结构的顺序,或者为那些没有自然排序的对象collection提供排序

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.versionJava运行时环境版本
java.homeJava安装目录
os.name操作系统的名称
os.version操作系统的版本
user.name用户的账户名称
user.home用户的主目录
user.dir用户的当前工作目录

Math类

java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回值类型一般为double型。

方法方法说明
abs绝对值
acos,asin,atan,cos,sin,tan三角函数
sqrt平方根
pow(double a,double b)a的b次幂
log自然对数
expe为底指数
max(double a,double b)求最大值
min(double a,double b)求最小值
random()返回0.0到1.0的随机数
long round(double a)double类型转换为long类型(四舍五入)
toDegrees(double angrad)弧度---->角度
toRadians(double angdeg)角度---->弧度

BigInteger与BigDecimal

BigInteger

  • Integer类作为int 的包装类,能存储的最大整型值为2^31-1
  • Long类型最大为2^63 -1。如果要表示更大的数,不管是基本数据类型还是他们的包装类都无能为力
  • java.math包的BigInteger可以表示不可变的任意精度的整数。BigInteger提供所有Java的基本整数操作符的对应物。并提供java.lang.Math的所有相关方法。另外,BigInteger还提供一下运算符:模算术,GCD计算,质数测试,素数生成,位操作以及一些其他操作。
  • 构造器
    BigInteger(String val): 根据字符串构建BigInteger对象

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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值