包装类

在Java中基本数据类型都存放在栈内存中,那我们如果想把基本数据类型存放在堆中,那该如何来进行处理呢?这时我们就可以使用包装类来实现。

基本数据类型 对应的包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character

基本数据类型转换为引用数据类型称为装箱
包装好的数据类型转换为基本数据类型称为拆箱

  1. Integer num1 = 12;// 自动装箱
  2. intnum2 = num1;// 自动拆箱

System

将指定源数组中的数组从指定位置复制到目标数组的指定位置。
System.in:输入
System.out:输出
System.err:输出错误
System.arraycopy:数据拷贝

  1. // System.arraycopy(源数组, 从源数组指定索引开始截取, 目标数组, 从目的数组指定的位置开始存放, 要复制的数组元素的数量);
  2. System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
  3. // 例:int[] arr = {5,8,4,3,9,7};
  4. int[] newArr = new int[10];
  5. System.arraycopy(arr, 0, newArr, 2, arr.length);
  6. System.out.println(Arrays.toString(newArr));

获取JVM环境在运行时的数据

  1. /**
  2. * 获取Java程序运行时操作系相关的数据
  3. */
  4. public class TestSystem {
  5. public static void main(String[] args) {
  6. // 获取当前Java程序运行时,操作系统的名称
  7. String osName= System.getProperty("os.name");
  8. System.out.println(osName); // Windows 10
  9. // 获取操作系统位数(os.arch 获取操作系统的架构)
  10. String arch = System.getProperty("os.arch");
  11. System.out.println(arch);
  12. // 获取操作系统当前正在使用的目录类路径
  13. String dir = System.getProperty("user.dir");
  14. System.out.println(dir);
  15. }
  16. }

Random

该类的实例用于生成伪随机数的流。Random返回随机数的范围为[0, 1);

  1. public static void main(String[] args) {
  2. Random random = new Random();
  3. int num = random.nextInt(10); // 随机输出一个[0, 10)之间的数字
  4. System.out.println(num);
  5. }

Math

Math类包含执行基本数字运算的方法,如基本指数,对数,平方根和三角函数。
常用方法:

  1. public static void main(String[] args) {
  2. System.out.println("圆周率" + Math.PI);
  3. System.out.println("绝对值:" + Math.abs(-8));
  4. System.out.println("向上取整:" + Math.ceil(3.14));
  5. System.out.println("向下取整:" + Math.floor(3.14));
  6. System.out.println("返回两个数的较大值:" + Math.max(2, 8));
  7. System.out.println("返回两个数的较小值:" + Math.min(2, 8));
  8. System.out.println("平方根:" + Math.sqrt(8));
  9. System.out.println("计算2的8次方" + Math.pow(2, 8));
  10. System.out.println("正弦值" + Math.sin(30));
  11. System.out.println("余弦值" + Math.cos(30));
  12. System.out.println("正切值" + Math.tan(30));
  13. System.out.println("四舍五入:" + Math.round(10.5));
  14. System.out.println("四舍五入:" + Math.round(-10.5));
  15. }

UUID

通用唯一识别码( Universally Unique Identifier )。一个表示不可变的通用唯一标识符(UUID)的类。SinceJDK1.5

  1. import java.util.UUID;
  2. /**
  3. * 面试题:如何产生一个唯一识别码(标识符)
  4. */
  5. public static void main(String[] args) {
  6. // 随机产生一个UUID对象(通用唯一识别码)
  7. UUID randomUUID = UUID.randomUUID();
  8. System.out.println(randomUUID.toString());
  9. }

Runtime

能够获取程序在运行时的数据(总的堆内存空间,自由(剩余)堆内存空间),还可以启动进程

内存使用率

  1. import java.math.BigDecimal;
  2. import java.math.MathContext;
  3. import java.math.RoundingMode;
  4. public static void main(String[] args) {
  5. // 获取总空间
  6. Runtime runtime = Runtime.getRuntime();
  7. // 获取JVM总空间
  8. long total = runtime.totalMemory();
  9. // 获取JVM空闲空间
  10. long free = runtime.freeMemory();
  11. // 当前使用空间
  12. long usedMemory = total - free;
  13. // 获取当前使用率
  14. double useRate = 1.0*100*usedMemory/total;
  15. /* BigDecimal:有效位的数进行精确的运算
  16. * MathContext(指定的精度, 舍入模式):根据上下文设置进行舍入
  17. * RoundingMode:指定丢弃精度的数值运算的舍入行为
  18. */
  19. BigDecimal bDecimal = new BigDecimal(useRate, new MathContext(3, RoundingMode.HALF_UP));
  20. System.out.println("使用率:" + bDecimal + "%");
  21. }

Runtime总常见的陷阱https://www.jianshu.com/p/af4b3264bc5d

日期工具类

Date

日期类:一般用来获取展示时间的类。

  1. public static void main(String[] args) {
  2. // currentTimeMillis:获取从1970.01.01 00:00:00到现在的毫秒数
  3. long time = System.currentTimeMillis();
  4. System.out.println(time);
  5. Date date = new Date();
  6. System.out.println(date); // Sat Sep 07 20:54:07 CST 2019
  7. }

SimpleDateFormat

格式化时间:常用的标准写法“ yyyy-MM-dd HH:mm:ss ”。

  1. import java.util.Date;
  2. import java.text.SimpleDateFormat;
  3. public class SimpleDateFormatTool {
  4. public static void main(String[] args) {
  5. Date date = new Date();
  6. /*
  7. * G :年代标志符
  8. * y :年
  9. * M :月
  10. * d :日
  11. * h :小时(12小时制)
  12. * H :小时(24小时制)(0-23)
  13. * m :分
  14. * s :秒
  15. * S :毫秒
  16. * E :星期
  17. * D :一年中的第几天
  18. * F :一个月中的第几个星期
  19. * w :一年中的第几周
  20. * W :一个月中的第几周
  21. * k :一天中的小时数(1-24)
  22. * K :上午(am)/下午(pm)中的小时数(0-11)
  23. * z/Z :时区
  24. */
  25. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  26. // 将日期时间转换为指定的格式
  27. String format = sdf.format(date);
  28. System.out.println(format);
  29. }
  30. }

Calendar

Calendar类是一个抽象类,不可以使用new关键字直接创建实例。
Calendar可以为在某一特定时刻和一组之间的转换的方法 calendar fields(日历域) 如YEAR , MONTH , DAY_OF_MONTH , HOUR 等等,以及用于操纵该日历字段,如获取的日期下个星期。

  1. import java.util.Calendar;
  2. /**
  3. * 使用默认时区和区域设置获取日历
  4. */
  5. public class TestCalendar {
  6. public static void main(String[] args) {
  7. Calendar ca = Calendar.getInstance();
  8. // get:返回给定日历字段的值。
  9. // YEAR:年份
  10. int year = ca.get(Calendar.YEAR);
  11. System.out.println(year);
  12. // MONTH:月份
  13. System.out.println(ca.get(Calendar.MONTH)+1);
  14. // DATE:本月的日期
  15. System.out.println(ca.get(Calendar.DATE));
  16. // DAY_OF_MONTH:一周中的日期
  17. System.out.println(ca.get(Calendar.DAY_OF_MONTH));
  18. // 一个月的第几周
  19. System.out.println(ca.get(Calendar.DAY_OF_WEEK_IN_MONTH));
  20. // 一个月的第几天
  21. System.out.println(ca.get(Calendar.DAY_OF_MONTH));
  22. // HOUR_OF_DAY:当天的小时数
  23. System.out.println(ca.get(Calendar.HOUR_OF_DAY));
  24. // MINUTE:分
  25. System.out.println(ca.get(Calendar.MINUTE));
  26. // SECOND:秒
  27. System.out.println(ca.get(Calendar.SECOND));
  28. // 注意:静态成员和静态方法不要使用名称来调用,必须使用名称来调用。
  29. System.out.println(ca.get(ca.SECOND));
  30. // set:设置日历字段的值
  31. // set(int field, nt value);
  32. // field -> 给定的日历字段
  33. // value -> 要为给定日历字段设置的值
  34. ca.set(Calendar.YEAR, 2020);
  35. Date time = ca.getTime();
  36. System.out.println(time);
  37. // set(int year, int month, int date, int hourOfDay, int minute, int second);
  38. // year -> 用于设置 YEAR日历字段的值。
  39. // month -> 用于设置MONTH日历字段的值。 月值为0。 例如,1月份为0。
  40. // date -> 用于设置 DAY_OF_MONTH日历字段的值。
  41. // hourOfDay -> 用于设置 HOUR_OF_DAY日历字段的值。
  42. // minute -> 用于设置 MINUTE日历字段的值。
  43. // second -> 用于设置 SECOND日历字段的值。
  44. }
  45. }

JDK1.8以后新增的几种日期工具类

LocalDate

LocalDate是不可变的和线程安全的。
LocalDate是一个不可变的日期时间对象,表示日期,通常被视为年月日。 也可以访问其他日期字段,例如日期,星期几和星期。

  1. import java.time.LocalDate;
  2. public class TestLocalDate {
  3. public static void main(String[] args) {
  4. // 获取当前日期(年-月-日)
  5. LocalDate time = LocalDate.now();
  6. // 将日期转换成字符串类型
  7. String str = time.toString();
  8. System.out.println(str);
  9. // 设置日期 of(年份, 月份, 月中的天数)
  10. LocalDate of = LocalDate.of(2020, 10, 1);
  11. System.out.println(of);
  12. // 获取年
  13. System.out.println(time.getYear());
  14. // 获取月
  15. System.out.println(time.getMonth());
  16. // 获取当前月的天数
  17. System.out.println(time.getDayOfMonth());
  18. // 获取一年中的天数
  19. System.out.println(time.getDayOfYear());
  20. // 获取当天星期几
  21. System.out.println(time.getDayOfWeek());
  22. }
  23. }

LocalTime

LocalTime是不可变的和线程安全的。
LocalTime是一个不可变的日期时间对象,代表一个时间,通常被看作是小时 - 秒。 时间表示为纳秒精度。

  1. import java.time.LocalTime;
  2. public class TestLocalDate {
  3. public static void main(String[] args) {
  4. // now():获取当前时间(时-分-秒-纳秒)
  5. // withNano(0):去除纳秒
  6. LocalTime time = LocalTime.now().withNano(0);
  7. // 将时间转换成字符串类型
  8. String str = time.toString();
  9. System.out.println(str);
  10. // 获取小时
  11. System.out.println(time.getHour());
  12. // 获取分钟
  13. System.out.println(time.getMinute());
  14. // 获取秒
  15. System.out.println(time.getSecond());
  16. }
  17. }

LocalDateTime

LocalDateTime是不可变的和线程安全的。
LocalDateTime是一个不可变的日期时间对象,代表日期时间,通常被视为年 - 月 - 日 - 时 - 分 - 秒。 也可以访问其他日期和时间字段,例如日期,星期几和星期。 时间表示为纳秒精度。

  1. import java.time.LocalDateTime;
  2. import java.time.format.DateTimeFormatter;
  3. /**
  4. * LocalDateTime可以认为是LocalDate和LocalTime的结合体。
  5. */
  6. public class TestLocalDateTime {
  7. public static void main(String[] args) {
  8. // now():获取当前时间
  9. LocalDateTime time = LocalDateTime.now();
  10. System.out.println(time); // 2019-09-08T14:10:06.662
  11. // withNano(0):去除纳秒
  12. LocalDateTime withNano = time.withNano(0);
  13. System.out.println(withNano); // 2019-09-08T14:10:06
  14. // JDK1.8以后的日期转换类 (通过定义格式可以把“T”去掉)
  15. DateTimeFormatter ofPattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  16. String formatTime = ofPattern.format(time);
  17. System.out.println(formatTime); // 2019-09-08 14:10:06
  18. }
  19. }

Flie类

File:文件和目录路径名的抽象表示代表表磁盘中实际存在的文件和目录

  1. import java.io.File;
  2. public class TestFile {
  3. public static void main(String[] args) {
  4. // 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例
  5. // 注意:多层路径下用“\\”来连接
  6. new File("text\\Test.java");
  7. // 从父抽象路径名和子路径名字符串创建新的 File实例
  8. File file = new File("text", "Test.java");
  9. System.out.println(file);
  10. }
  11. }

exists()

测试此路径下的文件或目录是否存在,true(存在)、false(不存在)。

  1. boolean exists = file.exists();
  2. System.out.println(exists);

isDirectory()

测试此路径名表示的文件是否为目录,true(是目录)、false(不是目录)。

  1. boolean directory = file.isDirectory();
  2. System.out.println(directory);

isFile()

测试此路径名表示的文件是否为文件,true(是文件)、false(不是文件)。

  1. boolean file2 = file.isFile();
  2. System.out.println(file2);

创建目录、文件及删除

mkdir()

创建由此路径名命名的目录,true(创建成功)、false(创建失败);只能创建一个目录。

  1. File file= new File("textDemo");
  2. if (!file.exists()) {
  3. boolean mkdir = file.mkdir();
  4. System.out.println(mkdir);
  5. }else {
  6. System.out.println(false);
  7. }

mkdirs()

创建由此路径名命名的目录,包括所有必需但不存在的父目录,true(创建成功)、false(创建失败);可创建一个目录,也可创建多及目录(推荐)

  1. File file= new File("textDemo\\aaa\\bbb");
  2. if (!file.exists()) {
  3. boolean mkdir = file.mkdirs();
  4. System.out.println(mkdir);
  5. }else {
  6. System.out.println(false);
  7. }

createNewFile()

当该名称的文件尚不存在时,创建一个由该路径名命名的新的空文件,true(创建成功)、false(创建失败)。

  1. import java.io.File;
  2. public class TestFile {
  3. public static void main(String[] args) {
  4. // 从父抽象路径名和子路径名字符串创建新的 File实例
  5. File file = new File("text", "TestDemo.java");
  6. System.out.println(file);
  7. // 这里需要抛出异常
  8. try {
  9. boolean createNewFile = file.createNewFile();
  10. System.out.println(createNewFile);
  11. } catch (IOException e) {
  12. e.printStackTrace();
  13. }
  14. }
  15. }

delete()

删除由此抽象路径名表示的文件或目录。 如果此路径名表示目录,则目录必须为空才能删除。true(删除成功)、false(删除失败)。

  1. boolean delete = file.delete();
  2. System.out.println(delete);

注意:此方法删除,直接删除,不进回收站,谨慎使用。

获取路径

  1. import java.io.File;
  2. public class GetPath {
  3. public static void main(String[] args) {
  4. File file = new File("text", "Test.java");
  5. // 返回此抽象路径名的绝对形式
  6. File absoluteFile = file.getAbsoluteFile();
  7. System.out.println(absoluteFile);
  8. // 返回此抽象路径名的绝对路径名字符串
  9. String absolutePath = file.getAbsolutePath();
  10. System.out.println(absolutePath);
  11. // 返回父目录的路径名
  12. File parentFile = file.getParentFile();
  13. System.out.println(parentFile);
  14. // 将此抽象路径名转换为路径名字符串
  15. String fileName = file.getName();
  16. System.out.println(fileName);
  17. }
  18. }

length()

返回路径名表示的文件的长度(字节数)

  1. long length = file.length();
  2. System.out.println(length);

list()

返回一个字符串数组,由此路径名表示的目录中的所有文件和目录

  1. File file = new File("D:\\学习\\笔记\\Java\\Java SE");
  2. String[] list = file.list();
  3. for (String str : list) {
  4. System.out.println(str);
  5. }

listFiles()

获取指定路径下的所有文件的路径

  1. File file = new File("D:\\学习\\笔记\\Java\\Java SE");
  2. File[] listFiles = file.listFiles();
  3. for (File file2 : listFiles) {
  4. System.out.println(file2);
  5. }

获取指定路径下以某后缀结尾的所有文件的路径

  1. import java.io.File;
  2. import java.io.FilenameFilter;
  3. public class TestFileFilter {
  4. public static void main(String[] args) {
  5. File file = new File("D:\\学习\\笔记\\Java\\Java SE");
  6. File[] listFiles = file.listFiles(new TestFileFilterImpl());
  7. for (File file2 : listFiles) {
  8. System.out.println(file2);
  9. }
  10. }
  11. // FilenameFilter -->文件过滤器
  12. // 实现FilenameFilter接口需重写accept()方法
  13. static class TestFileFilterImpl implements FilenameFilter {
  14. // 滤波器的方法
  15. @Override
  16. public boolean accept(File dir, String name) {
  17. // 由指定的字符串的后缀进行过滤
  18. return name.endsWith(".md");
  19. }
  20. }
  21. }

获取指定路径下以某后缀结尾的所有文件的路径(lambda写法

  1. import java.io.File;
  2. public static void main(String[] args) {
  3. File file = new File("D:\\学习\\笔记\\Java\\Java SE");
  4. File[] listFiles = file.listFiles((dir,name)->name.endsWith(".md"));
  5. for (File file2 : listFiles) {
  6. System.out.println(file2);
  7. }
  8. }

listRoots()

获取系统所有的盘符。

  1. File[] listRoots = File.listRoots();
  2. for (File file2 : listRoots) {
  3. System.out.println(file2);
  4. }

磁盘使用率

  1. import java.io.File;
  2. import java.math.BigDecimal;
  3. import java.math.MathContext;
  4. import java.math.RoundingMode;
  5. /**
  6. * 计算磁盘使用率
  7. */
  8. public class TestFileDiskRage {
  9. public static void main(String[] args) {
  10. File file = new File("..");
  11. System.out.println(file.getAbsolutePath());
  12. // 当前磁盘总空间
  13. long totalSpace = file.getTotalSpace();
  14. // 空闲空间
  15. long freeSpace = file.getFreeSpace();
  16. // 已使用的空间
  17. double usageRate = 1.0*100*(totalSpace - freeSpace)/totalSpace;
  18. // BigDecimal:有效位的数进行精确的运算
  19. // MathContext(指定的精度, 舍入模式):根据上下文设置进行舍入
  20. // RoundingMode:指定丢弃精度的数值运算的舍入行为
  21. BigDecimal bDecimal = new BigDecimal(usageRate, new MathContext(3, RoundingMode.HALF_UP));
  22. System.out.println("当前磁盘使用率:" + bDecimal + "%");
  23. }
  24. }

删除目录

删除某个文件夹下面所有的子文件夹和文件

  1. import java.io.File;
  2. public class TestDeleteFile {
  3. public static void main(String[] args) {
  4. File file = new File("textDemo");
  5. deleteFolderOrFile(file);
  6. }
  7. public static boolean deleteFolderOrFile(File file){
  8. // 判断该路径是否存在并且该路径是否是文件夹
  9. if (file.exists() && file.isDirectory()) {
  10. // //获取路径下面所有的文件和目录列表
  11. File[] listFiles = file.listFiles();
  12. // 遍历当前文件夹的所有文件及目录
  13. for (File allFilePath : listFiles) {
  14. // File(parent, child):
  15. // parent:父路径
  16. // child:子路径的文件名或者目录名
  17. File allFile = new File(file, allFilePath.getName());
  18. // 递归进行查找删除(每次自己调用自己都有一个压栈的过程)
  19. deleteFolderOrFile(allFile);
  20. }
  21. }
  22. //当路径是文件直接删除
  23. return file.delete();
  24. }
  25. }

枚举(enum)

枚举enum)类型是JDK1.5新增的特性,存放在 java.lang 包中,创建枚举需要使用 enum 关键字来创建。
定义枚举格式:

  1. 修饰符 enum 枚举名 {
  2. 枚举体(常量列表)
  3. }

例1:

  1. public enum EWeek {
  2. MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;
  3. }

例2:

  1. public enum EColour {
  2. RED((byte) 1) {
  3. @Override
  4. public void color() {
  5. System.out.println("红色");
  6. }
  7. },
  8. YELLOW((byte) 2) {
  9. @Override
  10. public void color() {
  11. System.out.println("黄色");
  12. }
  13. },
  14. TEAL((byte) 3) {
  15. @Override
  16. public void color() {
  17. System.out.println("青色");
  18. }
  19. },
  20. BLUE((byte) 4) {
  21. @Override
  22. public void color() {
  23. System.out.println("蓝色");
  24. }
  25. };
  26. private byte id;
  27. public byte getId() {
  28. return id;
  29. }
  30. private EColour(byte id) {
  31. this.id = id;
  32. }
  33. /**
  34. * 内部定义颜色抽象方法,枚举中的所有类型都要重写该方法
  35. */
  36. public abstract void color();
  37. }