文章目录
常用类
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大基本类型的对象类型
    byte				       Byte
	short				       Short
	int				       Integer 
	long				       Long
	float				       Float
	double				       Double
	boolean				       Boolean
	char				       Character
 
自动装箱和自动拆箱
自动装箱:
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());










