![c13b7fab3fc685068a752a214ffa057c.png](https://i-blog.csdnimg.cn/blog_migrate/f305c278a0192df8b8a8f741180ee7e9.jpeg)
今天给大家分享一些Java 常用类,这些常用类,就是在我们程序开发中非常的实用,使用频率也非常的高。
1. 包装类的基本用法:
1.1 为什么需要包装类?
Java并不是纯面向对象的语言。Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的。但是我们在实际使用中经常需要将基本数据转化成对象,便于操作。 比如: 集合的操作,这时,我们就需要将基本类型转化成对象。
1.2 包装类的继承关系如下:
![e28b252f97ee3c8b53710f20fa68420b.png](https://i-blog.csdnimg.cn/blog_migrate/d586352fdb58c8cd5c12b24bd6ffd8ae.jpeg)
Character 和 Number、 Boolean 直接继承 Object。
Byte、 Short、 Integer 、Float、 Double 直接继承 Number类。
1.3 自动装箱和自动拆箱。
自动装箱:基本类型就自动地封装到与它相同的类型的包装类中。
自动拆箱:包装类对象自动转换成基本类型数据。
1.4 Integer类中的内部类IntegerCache的作用
IntegerCache: Cache 为[-128,127]的一个数组,IntegerCache有一个静态的Integer数组,在类加载时将 -128到127的 Integer对象创建了,并保存在cache数组中,一旦程序调用了valueof 方法,如果取的值是在 -128到127之间,就直接在cache缓存数组中去取Integer对象,超出范围就new一个对象。
2. String 类。
2.1 String类的底层数据结构:char类型的数组。
2.2 为什么String类的值只能被共享不能被更改?
String类对象代表不可变的Unicode字符序列,因此我们可以将String对象称为“不可变对象”。指的是对象内部的成员变量的值无法再改变。打开String类的源码:
![ac98f6c480f14a5c05dbcdfb5da01602.png](https://i-blog.csdnimg.cn/blog_migrate/b03f2bde9ac0e02e39efd926dc9905a8.jpeg)
我们发现字符串内容全部存储到value[]数组中,而变量value是final类型的,也就是常量(即只能被赋值一次)。 这就是“不可变对象”的典型定义方式。
3. StringBuffer和StringBuilder ,String类。
3.1 StringBuffer与StringBuilder的异同点是什么?
StringBuffer和StringBuilder 类相同点: 可变的字符串。
StringBuffer和StringBuilder 类不同点:
- StringBuilder: 效率高,安全性低
- StringBuffer:效率低,安全性高。
3.2 String与StringBuffer的异同点是什么?
相同点:都可以创建一个字符串。
(1) 不同点:简单地说,就是一个变量和常量的关系。StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象。
(2) String:在String类中没有用来改变已有字符串中的某个字符的方法,由于不能改变一个Java字符串中的某个单独字符,所以在JDK文档中称String类的对象是不可改变的。然而,不可改变的字符串具有一个很大的优点:编译器可以把字符串设为共享的
(3) StringBuffer是线程安全的,在多线程程序中也可以很方便的进行使用,但是程序的执行效率相对来说就要稍微慢一些。
(4) StringBuffer类属于一种辅助类,可预先分配指定长度的内存块建立一个字符串缓冲区。这样使用StringBuffer类的append方法追加字符 比 String使用 + 操作符添加字符 到 一个已经存在的字符串后面有效率得多。因为使用 + 操作符每一次将字符添加到一个字符串中去时,字符串对象都需要寻找一个新的内存空间来容纳更大的字符串,这无凝是一个非常消耗时间的操作。添加多个字符也就意味着要一次又一次的对字符串重新分配内存。使用StringBuffer类就避免了这个问题。
3.3 String为什么称为不可变字符?
虽然String、StringBuffer和StringBuilder都是final类,它们生成的对象都是不可变的,而且它们内部也都是靠char数组实现的,但是不同之处在于,String类中定义的char数组是final的,而StringBuffer和StringBuilder都是继承自AbstractStringBuilder类,它们的内部实现都是靠这个父类完成的,而这个父类中定义的char数组只是一个普通是私有变量,可以用append追加。因为AbstractStringBuilder实现了Appendable接口。
3.4 StringBuffer与StringBuilder为什么称为可变字符?
虽然String、StringBuffer和StringBuilder都是final类,它们生成的对象都是不可变的,而且它们内部也都是靠char数组实现的,但是不同之处在于,String类中定义的char数组是final的,而StringBuffer和StringBuilder都是继承自AbstractStringBuilder类,它们的内部实现都是靠这个父类完成的,而这个父类中定义的char数组只是一个普通是私有变量,可以用append追加。因为AbstractStringBuilder实现了Appendable接口。
String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?www.cnblogs.com4. java.uitl.Date类
4.1 日期时间相关类有以下这些:
- java.util.Timezone
- java.util.Calendar
- java.util.Date
- java.text.DateFormat
- java.text.SimpleDateFromat
- java.util.GregorianCalendar
5. File类。
5.1 File类的作用。
- 可以实现获取文件和目录属性等功能。
- 可以实现对文件和目录的创建、删除等功能。
- File 不能访问文件内容。
5.2 File类操作目录与文件的常用方法有哪些?
操作文件常用方法:
1.createNewFile() 创建文件
2.delete()删除文件。
1. getAbsolutePath()获取文件绝对路径。
2. getName() 获取文件名。
3. getPath()获取文件相对路径。
4. isFile()是否是一个文件。
5. length()返回文件中内容字节数。
![bf8fb28f17dcf4a761e4b80e9ba37632.png](https://i-blog.csdnimg.cn/blog_migrate/eaddb91a7538d50605582f126f794922.jpeg)
操作目录常用方法:
1. isDirectory() 是否是一个目录
2. exists() 目录是否存在。
3. mkdir() 创建单层目录。
4. mkdirs(); 创建多层目录
5. list():返回一个String类型的数组,里面是文件或者目录名。
6. listFile(): 返回文件类型的列表对象。 元素是包含相对路径的。
![c96d1b5e67b558ef1e1044678ecb7cb0.png](https://i-blog.csdnimg.cn/blog_migrate/dc5344c8694cc4bfa2cc672a59d69cae.jpeg)