JavaSE进阶——常用类
文章目录
- 常用类
常用类
String类
字符串常量池的迁移和方法区内存的演变
String类相信大家都很熟悉了。这部分内容就不多赘述了,简单讲讲内存和常用方法就好了。
以前的字符串常量池存储在方法区中。随着jdk的不断优化,方法区也变得“四分五裂”了。现在也没了方法区,而是使用用元空间。
直接上图:
可以清楚的看到,字符串常量池的在jdk1.6之后位置就已经发生了改变。大概就了解到这里吧,我也没深入太多。
String类常用的方法
String类的方法有很多,使用时可以查文档:
- trim() :去除首尾空格
- isEmpty() :判断是否为空字符串
- equals(Object obj) :将此字符串与指定对象进行比较。
- compareTo(String str) :按字典顺序比较两个字符串。
- contains(String/CharSequence str/s): 判断当前字符串是否包含此字符/字符串
- 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保存到字符串常量池中。也就是说,当出现大量使用 ’ + ’ 进行字符串拼接的时候,会不断的有新的字符串加入字符串常量池。就像水杯一样,总是容量不是无限的,迟早会有溢出的一天。所以我们才需要使用StringBuffer或StringBuilder。
StringBuilder和StringBuffer则并不会出现这种情况。因为StringBuilder和StringBuffer只是将后面新加入的字符串直接放在了原来字符串的末尾,此种方式没有拼接,没有再开其他的空间。
- StringBuffer与StringBuilder的区别:
StringBuffer类:线程安全的,用于多线程
StringBuilder类:非线程安全的,用于单线程 - StringBuilder与StringBuffer的使用
两者使用方法都差不多,使用步骤如下-
) 创建StringBuilder/StringBuffer对象
-
)使用类中的方法 :
字符串追加: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....}
随机类
随机类:可以产生随机值的类。
- 产生随机整数:
Random r = new Random();System.out.println(r.next());
- 产生随机小数(0~1)
System.out.println(Math.random());