> 文档中心 > JavaSE进阶——常用类

JavaSE进阶——常用类

文章目录

  • 常用类
    • String类
      • 字符串常量池的迁移和方法区内存的演变
      • String类常用的方法
      • StringBuilder与StringBuffer
    • Date日期类
      • Date日期类对象的创建
    • 数字格式化类
    • 包装类
      • 自动装箱和自动拆箱
    • 枚举类
    • 随机类

常用类

String类

字符串常量池的迁移和方法区内存的演变

String类相信大家都很熟悉了。这部分内容就不多赘述了,简单讲讲内存和常用方法就好了。
以前的字符串常量池存储在方法区中。随着jdk的不断优化,方法区也变得“四分五裂”了。现在也没了方法区,而是使用用元空间。
直接上图:
在这里插入图片描述可以清楚的看到,字符串常量池的在jdk1.6之后位置就已经发生了改变。大概就了解到这里吧,我也没深入太多。

String类常用的方法

String类的方法有很多,使用时可以查文档

  1. trim() :去除首尾空格
  2. isEmpty() :判断是否为空字符串
  3. equals(Object obj) :将此字符串与指定对象进行比较。
  4. compareTo(String str) :按字典顺序比较两个字符串。
  5. contains(String/CharSequence str/s): 判断当前字符串是否包含此字符/字符串
  6. String.valueOf(Object obj):将obj转换为String类型

我觉得以上差不多就是经常用的。

StringBuilder与StringBuffer

StringBuilder与StringBuffer两个类的作用主要就是通过append()方法对字符串进行拼接。
是不是很奇怪为什么要用这两个类去进行字符串拼接?用 ’ + ’ 号不就行了吗?
实际上这是因为频繁的使用 ’ + ’ 进行字符串拼接会消耗大量的内存。
举个栗子:
问:以下代码有几个对象?

String s1 = "hello";String s2 = "world";System.out.println(s1+s2);

答案:3个。
为什么呢?因为s1+s2会产生新的String对象,这个新对象的内容就是helloworld,并且会把helloworld保存到字符串常量池中。也就是说,当出现大量使用 ’ + ’ 进行字符串拼接的时候,会不断的有新的字符串加入字符串常量池。就像水杯一样,总是容量不是无限的,迟早会有溢出的一天。所以我们才需要使用StringBufferStringBuilder

StringBuilder和StringBuffer则并不会出现这种情况。因为StringBuilder和StringBuffer只是将后面新加入的字符串直接放在了原来字符串的末尾,此种方式没有拼接,没有再开其他的空间

  1. StringBuffer与StringBuilder的区别:
    StringBuffer类:线程安全的,用于多线程
    StringBuilder类:非线程安全的,用于单线程
  2. StringBuilder与StringBuffer的使用
    两者使用方法都差不多,使用步骤如下
    1. ) 创建StringBuilder/StringBuffer对象

    2. )使用类中的方法 :

       字符串追加:append(String str) 删除:delete(int startIndex,int endIndex)删除从startIndex下标到endIndex下标但不包括endIndex下标的字符串 插入:insert(int offset , String str)在指定下标后加入指定字符串

Date日期类

Date日期类对象的创建

创建语法

Date date = new Date();

此时输出的是当前时间。
在这里插入图片描述可以看到这个日期的格式并不符合我们日常的日期格式。那么我们应该怎么办呢?
这个时候Date日期类格式化类就可以帮助我们重新设置日期格式。
Date日期格式化类有:DateFormat类、SimpleDateFormat类。

通过查看源代码或者查看jdk帮助文档我们可以知道DateFormat类是一个抽象类。
在这里插入图片描述
而SimpleDateFormat是DateFormat的实现类。
在这里插入图片描述所以我们在使用时最好使用多态机制。
那么,到底怎么使用呢?

看代码:

public class T{    public static void main(String[] args){ Date date = new Date(); DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分sss秒"); String time = df.format(date); System.out.println(time);    }}

输出结果:
在这里插入图片描述
我们可以通过SimpleDateFormat的构造方法传入我们想要的日期格式。
在这里插入图片描述
再通过format()方法进行转换,最后返回日期的是字符串格式。
在这里插入图片描述

y代表年,M表示月,d表示日。具体可在jdk帮助文档中查询。这里附上我查询到的字符表格:
在这里插入图片描述简单吧。

数字格式化类

接口类:NumberFormat
接口实现类:DecimalFormat
使用方法和日期类相似。

public class T{    public static void main(String[] args){ NumberFormat nf = new DecimalFormat("000,000.00"); double d = 1002348.45678; String dd = nf.format(d); System.out.println(dd);    }}

注意:这里的0是特殊图案字符。也有一张对应的表。我们需要根据表中的字符来设计数字格式,不是随意写的。
在这里插入图片描述

包装类

包装类实际上就是8大基本数据类型的对象类型。
啥意思呢?
我的理解是:基本数据类型无法创建对象,这没毛病吧?包装类起到的作用就是将基本数据类型进行包装成对象。

    8大基本类型: -----------------------   8大基本类型的对象类型    byteByteshortShortintInteger longLongfloatFloatdoubleDoublebooleanBooleancharCharacter

自动装箱和自动拆箱

自动装箱

Integer i = 10;

这就是自动装箱。10是int类型,自动转为了Integer,而不用加强转符号。

自动拆箱

Integer i = 10;int b = i;

这就是自动拆箱。Integer类型直接转为int类型。

枚举类

枚举类一次可以产生多个对象的方式。
枚举是一种引用数据类型。
关键字Enum。
定义语法:

访问修饰符 enum 枚举名{对象1,对象2....}

随机类

随机类:可以产生随机值的类。

  1. 产生随机整数:
Random r = new Random();System.out.println(r.next());
  1. 产生随机小数(0~1)
System.out.println(Math.random());