文章目录

  • 常用类
    • Objects
      • `equals()`
      • `isNull()`
      • `requireNonNull()`
    • Math
    • Arrays
      • `binarySearch()`
      • `toString()`
      • `sort()`
      • `copyOf()`
    • BigDecimal
      • 概念
      • 常用构造方法
      • 常用方法
        • 加减乘除
        • 获取对应数字类型
    • Date
    • DateFormat
      • `format()`
      • `parse()`
    • Calendar
      • ==注意==
      • `get()`
      • `set()`
      • `add()`
      • `getTime()`
      • `getActualMaxinum()`
    • 字符串
      • String
        • 存储
        • 字符串常量池
          • ==引申==:为什么要避免“+”拼接?
        • 构造方法
          • `String(byte[] bytes)`
          • `String(byte[] bytes,String charsetName)`
        • 常用方法
          • `subString()`
      • StringBuilder 和 StringBuffer

常用类

Objects

equals()

源代码:

public static boolean equals(Object a, Object b) {return (a == b) || (a != null && a.equals(b));
}

在使用 Objects的 equals 方法前,我们要保证,我们对比的对象,也重写了 equals 方法

我们之所以不直接使用比对对象重写的 equals 方法,是因为担心比对对象的某一个是 null:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-llpmPxq2-1619949680298)(/Users/faro_z/Library/Application Support/typora-user-images/image-20210430132841642.png)]

使用 Objects.equals(),是会进行空判断的:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oWdQ872h-1619949680300)(/Users/faro_z/Library/Application Support/typora-user-images/image-20210430133002380.png)]

用这个方法来判断 String,可以保证不会出现空指针异常

isNull()

判断对象是否为空

public static boolean isNull(Object obj) {return obj == null;
}

requireNonNull()

如果传入的对象为空,抛出异常

public static <T> T requireNonNull(T obj) {if (obj == null)throw new NullPointerException();return obj;
}

Math

这个看 API 文档就好了

Arrays

binarySearch()

二分查找,其重载很多,具体看 APi 或者代码提示

在使用前,一定要对数组进行排序

toString()

就是将数组变为字符串

这里,我主要看中源码作者对 for 循环的使用方法

public static String toString(int[] a) {if (a == null)return "null";int iMax = a.length - 1;if (iMax == -1)return "[]";StringBuilder b = new StringBuilder();b.append('[');for (int i = 0; ; i++) {b.append(a[i]);if (i == iMax)return b.append(']').toString();b.append(", ");}}

sort()

顾名思义,就是排序

源码作者使用的是快速排序

public static void sort(int[] a) {DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);}

copyOf()

用来为数组进行动态扩容

public static int[] copyOf(int[] original, int newLength) {int[] copy = new int[newLength];System.arraycopy(original, 0, copy, 0,Math.min(original.length, newLength));return copy;}

使用方法如下:

 int[] arr={3,6,23,7,0,65,1};
System.out.println(arr.length);
arr = Arrays.copyOf(arr, 20);
System.out.println(arr.length);
System.out.println(Arrays.toString(arr));

BigDecimal

概念

java 中的 double 进行加减法运算,会出现精度问题

这对于有高精度要求的程序,是致命的

而 BigDecimal,就是为了解决这一问题

常用构造方法

public BigDecimal(String val) {}

常用方法

加减乘除

获取对应数字类型

Date

所有对应方法都已经过时,现在 Date 只有一个作用,就是表示时间

DateFormat

用来格式化时间

一般,都是使用其子类SimpleDateFormat

format()

将 Date()类型,按照指定格式格式化

    public static void main(String[] args) {        SimpleDateFormat sdf = new SimpleDateFormat("yyyy 年 MM 月 dd 日 HH 时 mm 分 ss 秒");        String text = sdf.format(new Date());        System.out.println(text);    }

y : 年

M : 月

d : 日

H : 时

m : 分

s : 秒

S : 毫秒

SimpleDateFormat中,只有占位符的位置会被替换,其他的部分可以按照要求随意填写

public static void main(String[] args) {        // SimpleDateFormat sdf = new SimpleDateFormat("yyyy 年 MM 月 dd 日 HH 时 mm 分 ss 秒");        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd   HH:mm:ss");        String text = sdf.format(new Date());        System.out.println(text);    }

parse()

按照指定格式,解析时间字符串

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = sdf.parse("2021-5-2 15:25:00");System.out.println(date.getTime());

Calendar

这玩意儿,是为了能通过不同时区,创建时间对象的

我们知道,泰国,日本使用的时间比较特殊,比如说日本,是什么水曜年这些东西,那这些年的表示,就需要使用 Calendar

因为 Calendar 是抽象类,所以,我们要调用 getInstance()方法,去获取对象:

调用 getInstance()构造:

 public static Calendar getInstance(TimeZone zone,                                       Locale aLocale)    {        return createCalendar(zone, aLocale);    }
private static Calendar createCalendar(TimeZone zone,                                           Locale aLocale)    {        CalendarProvider provider =            LocaleProviderAdapter.getAdapter(CalendarProvider.class, aLocale)                                 .getCalendarProvider();        if (provider != null) {            try {                return provider.getInstance(zone, aLocale);            } catch (IllegalArgumentException iae) {                // fall back to the default instantiation            }        }        Calendar cal = null;        if (aLocale.hasExtensions()) {            String caltype = aLocale.getUnicodeLocaleType("ca");            if (caltype != null) {                switch (caltype) {                case "buddhist":                cal = new BuddhistCalendar(zone, aLocale);                    break;                case "japanese":                    cal = new JapaneseImperialCalendar(zone, aLocale);                    break;                case "gregory":                    cal = new GregorianCalendar(zone, aLocale);                    break;                }            }        }        if (cal == null) {            // If no known calendar type is explicitly specified,            // perform the traditional way to create a Calendar:            // create a BuddhistCalendar for th_TH locale,            // a JapaneseImperialCalendar for ja_JP_JP locale, or            // a GregorianCalendar for any other locales.            // NOTE: The language, country and variant strings are interned.            if (aLocale.getLanguage() == "th" && aLocale.getCountry() == "TH") {                cal = new BuddhistCalendar(zone, aLocale);            } else if (aLocale.getVariant() == "JP" && aLocale.getLanguage() == "ja"                       && aLocale.getCountry() == "JP") {                cal = new JapaneseImperialCalendar(zone, aLocale);            } else {                cal = new GregorianCalendar(zone, aLocale);            }        }        return cal;    }

注意

Calendar 的月,是从0开始的,也就是说我们的 5 月,在 Calendar 中,显示的是 4

get()

按照单位,获取数据

Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
System.out.println(year);

set()

cal.set(Calendar.YEAR,1); //将年份设置为 1
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
System.out.println(year);
System.out.println(month);

add()

按照指定单位,增加年份

Calendar cal = Calendar.getInstance();
System.out.println("当前年份:"+cal.get(Calendar.YEAR));
cal.add(Calendar.YEAR,1);
System.out.println("年份+1后:"+cal.get(Calendar.YEAR));

下面这个实验,说明,calendar 中,月份的范围是0-11

Calendar cal = Calendar.getInstance();
cal.set(Calendar.MONTH,11);
System.out.println("将当前月份设置为 11(实际为 12 月):"+cal.get(Calendar.MONTH));
cal.add(Calendar.MONTH,1);
System.out.println("为月份+1后:"+cal.get(Calendar.MONTH));

getTime()

获取日历时间表示的 Date 对象

Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));

getActualMaxinum()

获取当前单位的最大值

获取当前年份的最大月数:

Calendar cal = Calendar.getInstance();
System.out.println(cal.getActualMaximum(Calendar.MONTH));

注意:因为 Calendar 的月,是从 0 开始数的,所以,这里显示的 11,其实是 12 月!!

字符串

String

存储

如果两个字符串内容完全相同,则指向同一个内存区域

字符串常量池

使用字符串常量池的目的,是为了保证字符串的使用效率,不然,频繁的创建和销毁,会影响系统的性能。

字符串常量池在方法区中

下面,给个图示:

String str1 = “abc”;
String str2 = “abc”;
String str3 = “abc”;
String str4 = new String(“abc”);
String str5 = new String(“abc”);
String str6 = new String(“abc”);

了解了上面的知识,我们可以出一个面试题

面试题:String str4 = new String(“abc”) 创建多少个对象?

  1. 在常量池中查找是否有“abc”对象

    • 有则返回对应的引用实例
    • 没有则创建对应的实例对象
  2. 在堆中 new 一个 String(“abc”) 对象
  3. 将对象地址赋值给str4,创建一个引用

所以,常量池中没有“abc”字面量则创建两个对象,否则创建一个对象,以及创建一个引用

引申:为什么要避免“+”拼接?

假设我们有这么一段代码:

String text1 = "锄禾日当午";
String text2 = "汗滴禾下土";
String text3 = "床前明月光";
text1=text1+text2+text3;
System.out.println(text1);

我们来看看在内存中,是个什么样子:

  • 创建完三个新字符串,是这个样子:

  • 每次“+”,都要在字符串常量池新申请一个空间

  • 不再被使用的区域,成了“垃圾”,(但不会被回收)

text1 在拼接前指向的位置,和拼接中的副产物,因为不会再被引用(除非又有一个新字符串,内容和这两个部分一模一样),所以成了’垃圾’,但是因为字符串常量池是永久代,所以,这些‘垃圾’不会被 GC 回收,会一直存在于内存中。

所以,如果大量使用“+”去拼接字符串的话,久而久之,就会在内存中,产生大量不会去被回收的垃圾,那程序就会越运行,越卡

就是因为上面的原因,很多人用 java 搞爬虫,一旦用了很多“+”操作,就会导致程勋运行占用大量内存

如果要搞字符串拼接,请使用 StringBuffer,或者StringBuilder

构造方法

我们一般直接使用String str = "aaa"这种方式创建,但是也会有下面这些方式创建

String(byte[] bytes)

通过字节数组创建

String(byte[] bytes,String charsetName)

指定编码类型,通过字节数组创建

常用方法

subString()

获得子串,包头去尾

String str = "abcde";
System.out.println(str.substring(1,2));

StringBuilder 和 StringBuffer

二者的使用其实差不多,区别只是在于线程是否安全

StringBuilder线程不安全,但是效率高

StringBuffer线程安全,但是效率低

我们就那 StringBuilder 举例:

StringBuilder sb = new StringBuilder();
sb.append("锄禾日当午");
sb.append("汗滴禾下土");
System.out.println(sb.toString());

使用 append()替代 String 中的“+”操作,append过程中,产生的垃圾,因为是在新生代,所以会被 GC 回收,这样,就不会造成内存浪费

Java常用类,指导手册相关推荐

  1. 返回值 包装类_(九)Java常用类

    (九)Java常用类 String类 概述 /*String:字符串,使用一对""来表示. * 1.String声明为final,不能被继承. * 2.String实现了Seria ...

  2. java 类 函数,java常用类和函数

    JAVA中常用类的常用方法_计算机软件及应用_IT/计算机_专业资料.. JAVA 中常用类的常用方法 一. java.lang.Object 类 1. clone ()方法 创建并返回此对象的... ...

  3. Java常用类(谷粒商城学习记录)

    Java常用类 谷粒商城学习记录 谷粒商城学习记录 谷粒商城学习记录 干嘛老是提示我与别人的文章相似呢?真的是我自己整理的啊啊啊 老是提示与这个文章相似 https://blog.csdn.net/c ...

  4. JavaEE基础第9章Java常用类

    第9章Java常用类 字面量的定义方式都是存在常量池中的,常量池中不会存储多个一样的字符串,在定义一个字符串的时候会先去常量池中找有没有存在的,有就将地址传过去,没有就新建. String字符串 概念 ...

  5. 这些Java常用类,你必须要学会,还不快快收藏?(近两万字详细介绍)

    零基础学习之Java常用类 概述 包装类 和数学相关的类 String类 创建字符串对象 使用构造方法 使用静态方法 使用" " + 拼接 字符串对象的比较 字符串的常用方法 可变 ...

  6. Java常用类之要点总结

    Java常用类之要点总结

  7. java map常用类及其方法_Day50.Map类常用的方法 -Java常用类、集合#、IO

    Day50.Map类常用的方法 -Java常用类.集合#.IO Day50.Map类常用的方法 -Java常用类.集合#.IO Map类常用的方法 . 总结: 常用方法 添加: put(Object ...

  8. java常用类的方法,java常用类的使用方法

    java常用类的使用方法 Interger:整数类型 1.属性. static int MAX_VALUE:返回最大的整型数: static int MIN_VALUE:返回最小的整型数: stati ...

  9. 48 java常用类_10 _Calendar类

    48 java常用类_10 _Calendar类 Calendar提供了获取或设置各种日历字段的方法. 构造方法 : protected Calendar(); //由于修饰符是protected,所 ...

  10. java 常用类 - 大数据运算

    java 常用类 - 大数据运算 在 Java中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类.这两个类用于高精度计算,其中 ...

最新文章

  1. 开放源码,华为鸿蒙HarmonyOS 2.0来了
  2. python键盘输入代码,python监控键盘输入实例代码
  3. Hadoop权威指南学习笔记三
  4. 又肝了下微服务 API 网关“金刚”,也是蛮香的~
  5. android 自定义刷新控件,Android开发中MJRefresh自定义刷新动画效果
  6. 如何写一手好 SQL 【频繁出现慢SQL告警的优化方案】
  7. Bash数组操作教程
  8. Oracle dbms_random随机函数包
  9. 菜鸟驿站发布“新成长计划” 未来三年要让站点平均收入翻倍
  10. 两年质保,只此一加!一加9系列推出两年质保
  11. 【Swing】了解Swing,Swing是什么?
  12. java虎牙app弹幕_虎牙直播随机弹幕插件(OBSS)
  13. 高通SDX12:SFE(shortcut-fe)软加速驱动效果调测
  14. total commander 自定义快捷键
  15. TIA博途S7-1200学习笔记——指令集
  16. 量子加密通信与量子传感技术相关精简介绍
  17. 《版式设计——日本平面设计师参考手册》—第1章如何存储旧版本的InDesign文件...
  18. 湖北电信天邑TY1608_S905L3B_MT7668_卡刷固件包
  19. C#在Pdf画统计图表之【雷达图】(以五边形为例)
  20. 基于Sentence-Bert的检索式问答系统

热门文章

  1. python 题库app_中国大学MOOC的APP慕课2021用Python玩转数据题库及答案
  2. Cookie、代理服务器
  3. pages使用教程|图像填充功能如何使用?怎么样在pages文稿中用图像填充文本?
  4. 20145202马超《java》实验四
  5. VC++软件界面风格简单美化
  6. 计算机 小学数学应用题教学设计,小学数学优秀教学设计让信息技术走进数学课堂...
  7. Flask最基本示例
  8. 收件地址解析成 省+市+区+详细地址的形式
  9. DSHOW 显示视频
  10. ssm毕设项目理发店预约系统wc712(java+VUE+Mybatis+Maven+Mysql+sprnig)