包装类

有时需要将基本数据转化成对象。

基本数据类型 包装类
char Character
int integer

image.png

自动装箱/拆箱

image.png

缓存问题

image.png
image.png
同样是用==判断两个Integer对象,为何结果会不一样?
因为在[-128,127]之间的数字是被缓存的(实际就是系统初始的时候,创建了一个[-128,127]之间的一个缓存数组),需要时被直接调用,所以在同一地址。而这个范围之外的数字就需要new一个缓存外的对象,地址自然就不同了

String类

字符串比较要用equals
String字符串不可变(源码里有final),StringBuilder可变
StringBuilder线程不安全,效率高(一般用他),StringBuffer线程安全,效率低
image.pngimage.png
地址没变,内容改变

StringBuilder运用(增删改查

image.png

append方法的高效与String陷阱

image.png程序极易崩溃,绝对不能出现这样的代码。
每次循环的时候都会产生一个i对象,然后再产生一个新的str8对象,循环5k次,一共1w个对象
正确姿势:
image.png
这样就不需要产生额外的对象(当然也会产生对象,只不过这些对象直接往sb字符串里添加了,更高效

Date类

所在包 import java.util.Date;
以后遇到日期处理:使用Canlendar日期类
关于Date只掌握这几个就够了
image.png

DateFormat类

时间对象 指定格式的字符串 相互转换
Dateformat是一个抽象类,一般使用它的子类SimpleDateFormat
image.png

Calendar日历类

抽象类,提供关于日期计算的相关功能。比如:年月日时分秒的展示和计算
GregorianCalendar 是其具体子类,提供世界上大多国家/地区使用的标准日历系统

  1. package cn.sxt.dyq;
  2. import java.util.Calendar;
  3. import java.util.Date;
  4. import java.util.GregorianCalendar;
  5. public class TestCalendar {
  6. public static void main(String[] args) {
  7. Calendar calendar = new GregorianCalendar(2999, 10, 9, 22, 10, 50);
  8. int year = calendar.get(calendar.YEAR);
  9. int month = calendar.get(calendar.MONTH);
  10. int day = calendar.get(calendar.DATE); // 也可以使用DAY_OF_MONTH
  11. int weekday = calendar.get(calendar.DAY_OF_WEEK); // 星期几 1-7:1:星期日
  12. System.out.println(year);
  13. System.out.println(month);// 0-11表示对应的月份。 0是1月,1是2月...
  14. System.out.println(weekday);
  15. System.out.println(day);
  16. // 设置日期相关元素
  17. Calendar c2 = new GregorianCalendar();
  18. c2.set(Calendar.YEAR, 8012);
  19. System.out.println(c2);
  20. // 日期的计算
  21. // 往后100天的时间
  22. Calendar c3 = new GregorianCalendar();
  23. c3.add(Calendar.DATE, 100);
  24. // c3.add(Calendar.DATE, -100); 往前100天的时间
  25. System.out.println(c3);
  26. // 日期对象和时间对象的转化
  27. Date d4 = c3.getTime();
  28. Calendar c4 = new GregorianCalendar();
  29. c4.setTime(new Date());
  30. printCalender(c4);
  31. }
  32. public static void printCalender(Calendar c) {
  33. // 打印 1918年10月10日 11:23:45 周三
  34. int year = c.get(Calendar.YEAR) + 1;
  35. int month = c.get(Calendar.MONTH) + 1;
  36. int date = c.get(Calendar.DAY_OF_MONTH);
  37. int dayweek = c.get(Calendar.DAY_OF_WEEK) - 1;
  38. String dayweek2 = dayweek == 0 ? "日" : dayweek + "";
  39. int hour = c.get(Calendar.HOUR);
  40. int minute = c.get(Calendar.MINUTE);
  41. int second = c.get(Calendar.SECOND);
  42. System.out.println(
  43. year + "年" + month + "月" + date + "日 " + hour + "时" + minute + "分" + second + "秒 " + "周" + dayweek);
  44. }
  45. }

可视化日历程序

  1. package cn.sxt.dyq;
  2. import java.text.DateFormat;
  3. import java.text.ParseException;
  4. import java.text.SimpleDateFormat;
  5. import java.util.Calendar;
  6. import java.util.Date;
  7. import java.util.GregorianCalendar;
  8. /**
  9. * 可视化日历程序
  10. *
  11. * @author DYQ
  12. *
  13. */
  14. public class TestCalender2 {
  15. public static void main(String[] args) throws ParseException {
  16. String str = "2020-9-10";
  17. DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
  18. Date date = df.parse(str);
  19. Calendar c = new GregorianCalendar();
  20. c.setTime(date);
  21. System.out.println("日\t一\t二\t三\t四\t五\t六");
  22. c.set(Calendar.DAY_OF_MONTH, 1);
  23. for (int i = 0; i < c.get(Calendar.DAY_OF_WEEK) - 1; i++) {
  24. System.out.print("\t");
  25. }
  26. int days = c.getActualMaximum(Calendar.DATE);
  27. for (int i = 1; i <= days; i++) {
  28. System.out.print(c.get(Calendar.DAY_OF_MONTH) + "\t");
  29. if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
  30. System.out.println();
  31. }
  32. c.add(Calendar.DAY_OF_MONTH, 1);
  33. }
  34. }
  35. }
  1. package cn.sxt.dyq;
  2. import java.text.DateFormat;
  3. import java.text.ParseException;
  4. import java.text.SimpleDateFormat;
  5. import java.util.Calendar;
  6. import java.util.Date;
  7. import java.util.GregorianCalendar;
  8. /**
  9. * 可视化日历02
  10. *
  11. * @author DYQ
  12. *
  13. */
  14. public class TestCalendar3 {
  15. public static void main(String[] args) throws ParseException {
  16. System.out.println("请输入日期(格式:2020-9-10):");
  17. java.util.Scanner scanner = new java.util.Scanner(System.in);
  18. String str = scanner.nextLine();
  19. DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
  20. Date date = df.parse(str);
  21. Calendar c = new GregorianCalendar();
  22. c.setTime(date);
  23. int day = c.get(Calendar.DAY_OF_MONTH);
  24. int days = c.getActualMaximum(Calendar.DATE);
  25. System.out.println("日\t一\t二\t三\t四\t五\t六");
  26. c.set(Calendar.DAY_OF_MONTH, 1);
  27. for (int i = 0; i < c.get(Calendar.DAY_OF_WEEK) - 1; i++) {
  28. System.out.print("\t");
  29. }
  30. for (int i = 1; i <= days; i++) {
  31. if (day == c.get(Calendar.DAY_OF_MONTH)) {
  32. System.out.print(c.get(Calendar.DAY_OF_MONTH) + "*\t");
  33. } else {
  34. System.out.print(c.get(Calendar.DAY_OF_MONTH) + "\t");
  35. }
  36. if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
  37. System.out.println();
  38. }
  39. c.add(Calendar.DAY_OF_MONTH, 1);
  40. }
  41. }
  42. }

Math类

image.png

Random类

image.png