Java常用类(建议收藏)

在Java中,类是一个非常重要的东西,想要学好Java(做到简历上的精通Java),我们不仅要自己能够根据业务需求创建合适的类,进行相关的开发,还要必须要学会使用Java常用类,这样才能获得更高的效率。在Java中常用类主要包括:

  • 包装类
  • 和数学相关的类(Math)
  • String类(字符串)
  • 可变字符序列(StringBuilder和StringBuffer)
  • 时间日期(Date)

下面呢,就介绍下Java常用类,帮助各位更进一步。(内容比较多,水平有限,感谢指正!)

前面有文章说过这个内容,可以看下:近7000字长文详细讲解Java包装类,面试稳了

在计算机中进行数学计算是及其重要的一项工作,因此非常用必要提前设计一个类,来满足基本数学函数所需要的属性和方法。在Java中,这个类就是和数学相关的一个常用类,即Math类。其类在源码中的定义如下:

Math 被定义成了final类,所以是不能被继承的;另外Math的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。

Math类中常用的属性和方法列举如下:

String类代表字符串,在Java中字符串属于对象,Java 提供了 String 类创建和操作字符串。其类在源码中的定义如下:

从源码中我们可以看出:

  • 字符串是常量;它们的值在创建之后不能更改;其构造方法有多种;
  • 其方法有静态和非静态的,即有的需要通过类名调用,有的需要通过对象名调用。
  • 字符串的对象是不可变对象,意味着一旦进行修改,就会产生新对象,因此其不适合大量修改字符串的场景使用。字符串对象设计为不可变,那么所以字符串有常量池来保存很多常量对象。

如果程序中涉及到大量的字符串的修改操作,那么此时的时空消耗比较高。可能需要考虑使用StringBuilder或StringBuffer的可变字符序列(这两个后面会介绍)

  • String对象内部是用字符数组进行保存的;例如:“abc” 等效于 char[] data={ ‘a’ , ‘b’ , ‘c’ }`。

JDK1.9之前有一个char[] value数组,JDK1.9之后byte[]数组

常量池在不同时期位置不同,具体如下:

①JDK1.6及其之前:方法区

②JDK1.7:堆

③JDK1.8:元空间

下面进一步说明String类及其常用的方法。

使用构造方法

使用构造方法创建字符串有三种形式:

  • 直接赋值,类似于基本数据类型就可以(创建一个,在常量池中)
  • 通过对象赋值,参数是字符串(创建两个对象,首先指向堆中的一个字符串对象,然后堆中字符串的value数组指向常量池中常量对象的value数组)
  • 也是使用通过对象赋值,只不过参数是数组,数组里面是char类型的数据(创建两个对象,同上)

使用静态方法

这是String类自定义的静态方法;介绍如下:

  • copyValueOf(char data[]) 返回指定数组中表示该字符序列的 String
  • copyValueOf(char data[], int offset, int count)返回指定数组中表示该字符序列的 String
  • valueOf(char c)返回指定数组中表示该字符序列的 String
  • valueOf(char data[], int offset, int count)返回指定数组中表示该字符序列的 String
  • valueOf(int i) 支持各种数据类型(int改为其他的也行),返回各种数据类型的value参数的字符串表示形式。

其源代码如下:

使用\” \” + 拼接

Java 语言提供对字符串串联符号(\”+\”)以及将其他对象转换为字符串的特殊支持(toString()方法)。在String类型中,任意数据类型与\” \”进行拼接,结果都是字符串。

代码示例如下:

这里既然说到了拼接,就不得不说字符串其拼接的特殊性问题,即不同形式创建的字符串所存储的位置是不同的,这也就使得即使字符串内容相同,但进行 == 比较时候,结果不同。其具体分类如下:

  • 常量和常量:结果是常量池
  • 常量与变量 或 变量与变量:结果是堆
  • 任何形式拼接后调用intern方法:结果在常量池
  • 使用contcat()方法拼接:结果在堆

代码示例:

字符串的比较有很多种方式,不同方式比较的东西和形式不一样。其比较方式如下:

  • ==:比较是对象的地址
  • equals:String类型重写equals方法,比较是对象的内容(区分大小写)
  • equalsIgnoreCase:比较的是对象的内容(不区分大小写)
  • compareTo:String类型重写了Comparable接口的抽象方法,自然排序,按照字符的Unicode编码值进行比较大小的(区分大小写)
  • compareToIgnoreCase:按照字符的Unicode编码值进行比较大小(不区分大小写)

代码示例

String类是非常常用的类,其方法也有很多,但并不是所有的方法都使用的那么频繁,所以在这里介绍了字符串的常用方法是有必要滴。常用方法介绍如下:

查找相关

  • boolean contains(xx):是否包含xx
  • int indexOf(xx):从前往后找当前字符串中xx,即如果有返回第一次出现的下标,要是没有返回-1
  • int lastIndexOf(xx):从后往前找当前字符串中xx,即如果有返回最后一次出现的下标,要是没有返回-1
  • String substring(int beginIndex) :返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。

代码示例

字符串相关

  • String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。
  • char charAt(index):返回[index]位置的字符
  • har[] toCharArray(): 将此字符串转换为一个新的字符数组返回
  • String(char[] value):返回指定数组中表示该字符序列的 String。
  • String(char[] value, int offset, int count):返回指定数组中表示该字符序列的 String
  • static String copyValueOf(char[] data): 返回指定数组中表示该字符序列的 String
  • static String copyValueOf(char[] data, int offset, int count):返回指定数组中表示该字符序列的 String
  • static String valueOf(char[] data, int offset, int count) : 返回指定数组中表示该字符序列的 String
  • static String valueOf(char[] data) :返回指定数组中表示该字符序列的 String

解码编码相关

  • byte[] getBytes():编码,把字符串变为字节数组,按照平台默认的字符编码进行编码
  • yte[] getBytes(字符编码方式):按照指定的编码方式进行编码
  • new String(byte[] ) 或 new String(byte[], int, int):解码,按照平台默认的字符编码进行解码
  • new String(byte[],字符编码方式 ) 或new String(byte[], int, int,字符编码方式):解码,按照指定的编码方式进行解码

代码示例

正则匹配相关

当需要进行表单校验时候,如果进行复杂的校验,比如邮箱,使用普通方式实现特别麻烦,那就可以使用正则匹配化复杂为简单。简单点说正则匹配就是一组实现起来较简单的验证数据的规则。

  • boolean matchs(正则表达式):判断当前字符串是否匹配某个正则表达式

常用正则表达式:

字符类

  • [abc]:a、b 或 c(简单类)
  • [^abc]:任何字符,除了 a、b 或 c(否定)
  • [a-zA-Z]:a 到 z 或 A 到 Z,两头的字母包括在内(范围)

预定义字符类

  • .:任何字符(与行结束符可能匹配也可能不匹配)
  • \\d:数字:[0-9]
  • \\D:非数字: [^0-9]
  • \\s:空白字符:[ \\t\\n\\x0B\\f\\r]
  • \\S:非空白字符:[^\\s]
  • \\w:单词字符:[a-zA-Z_0-9]
  • \\W:非单词字符:[^\\w]

边界匹配器

  • ^:行的开头
  • $:行的结尾

Greedy 数量词

  • X?:X,一次或一次也没有
  • X*:X,零次或多次
  • X+:X,一次或多次
  • X{n}:X,恰好 n 次
  • X{n,}:X,至少 n 次
  • X{n,m}:X,至少 n 次,但是不超过 m 次

Logical 运算符

  • XY:X 后跟 Y
  • X|Y:X 或 Y
  • (X):X,作为捕获组

代码示例

替换相关

  • String replace(xx,xx):不支持正则
  • String replaceFirst(正则,value):替换第一个匹配部分
  • String repalceAll(正则, value):替换所有匹配部分

拆分相关

  • String[] split(正则):按照某种规则进行拆分

其他

  • boolean isEmpty():字符串是否为空
  • int length():返回字符串的长度
  • String concat(xx):拼接,等价于+
  • oolean equals(Object obj):比较字符串是否相等,区分大小写
  • boolean equalsIgnoreCase(Object obj):比较字符串是否相等,区分大小写
  • int compareTo(String other):比较字符串大小,区分大小写,按照Unicode编码值比较大小
  • int compareToIgnoreCase(String other):比较字符串大小,不区分大小写
  • String toLowerCase():将字符串中大写字母转为小写
  • String toUpperCase():将字符串中小写字母转为大写
  • String trim():去掉字符串前后空白符

代码示例

前面说到String字符串是不适合于大量改动的场景的,但是这种场景确实存在,针对这种问题,Java做了专门的类来应对,即java.lang包提供了可变字符序列StringBuilder和StringBuffer类型。

  • StringBuffer:老的,线程安全的(因为它的方法有synchronized修饰(线程看后面的文章))
  • StringBuilder:线程不安全的

StringBuilder、StringBuffer的常用的方法是完全一致的

其常用的方法介绍如下:

  • append(xx):拼接,追加
  • nsert(int index, xx):插入
  • delete(int start, int end):删除
  • deleteCharAt(int index):删除指定位置
  • reverse() : 反转

代码示例

获取和利用时间是Java中必不可少的东西,毕竟我们无时无刻不在与时间打交道。根据JDK的不同,时间方法有些区别,这里以JDK1.8为界,分为JDK1.8之前,JDK1.8之后。

在JDK1.8之前,Java自身提供的时间日期类并没有达到很好的效果,虽然日期常用,但是其开发人员大多使用第三方类库( Joda-Time)。不过,我们还是要介绍下,因为JDK1.8之后就好用了,这也是为了完整性。

java.util 包提供了 Date 类来封装当前的日期和时间。其常用方法如下:

  • long getTime( ) 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
  • void setTime(long time) 用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。
  • String toString( )把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。

代码示例

java.util.Calendar

Calendar 类能设置和获取日期数据的特定部分,比如说小时,日,或者分钟? 又可以在日期的这些部分加上或者减去值。Calendar类是一个抽象类,其功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。

Calendar类对象的创建

在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。

Calendar类对象字段类型

  • Calendar.YEAR 年份
  • Calendar.MONTH 月份
  • Calendar.DATE 日期
  • Calendar.DAY_OF_MONTH 日期,和上面的字段意义完全相同
  • Calendar.HOUR 12小时制的小时
  • Calendar.HOUR_OF_DAY 24小时制的小时
  • Calendar.MINUTE 分钟
  • Calendar.SECOND 秒
  • Calendar.DAY_OF_WEEK 星期几

GregorianCalendar类

Calendar类实现了公历日历,GregorianCalendar是Calendar类的一个具体实现。Calendar 的getInstance()方法返回一个默认用当前的语言环境和时区初始化的GregorianCalendar对象。GregorianCalendar定义了两个字段:AD和BC。这是代表公历定义的两个时代。GregorianCalendar 类常用方法介绍如下:

  • int get(int field) 获取指定字段的时间值
  • Date getGregorianChange() 获得格里高利历的更改日期。
  • Date getTime() 获取日历当前时间。
  • long getTimeInMillis() 获取用长整型表示的日历的当前时间
  • void set(int year, int month, int date) 设置年、月、日的值。
  • void setGregorianChange(Date date) 设置 GregorianCalendar 的更改日期。
  • void setTime(Date date)用给定的日期设置Calendar的当前时间。
  • String toString() 返回代表日历的字符串。

代码示例

JDK1.8是日期的极大改进,这之后其变得更好用了。其介绍如下:

LocalDate、LocalTime、LocalDateTime

  • now():获取系统日期或时间
  • of(xxx):或者指定的日期或时间
  • 运算:运算后得到新对象,需要重新接受
  • plusXxx():在当前日期或时间对象上加xx
  • minusXxx() :在当前日期或时间对象上减xx
  • getDayOfMonth()/getDayOfYear() 获得月份天数(1-31) /获得年份天数(1-366)
  • getDayOfWeek() 获得星期几(返回一个 DayOfWeek 枚举值)
  • getMonth() 获得月份, 返回一个 Month 枚举值
  • getMonthValue() / getYear() 获得月份(1-12) /获得年份
  • getHours()/getMinute()/getSecond() 获得当前对象对应的小时、分钟、秒
  • withDayOfMonth()/withDayOfYear()/withMonth()/withYear() | 将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象 |
  • isBefore()/isAfter() 比较两个 LocalDate
  • format(DateTimeFormatter t) 格式化本地日期、时间,返回一个字符串
  • parse(Charsequence text) 将指定格式的字符串解析为日期、时间

DateTimeFormatter

DateTimeFormatter是日期时间格式化。该类提供了三种格式化方法:

  • 预定义的标准格式。如:ISO_DATE_TIME;ISO_DATE
  • 本地化相关的格式。如:ofLocalizedDate(FormatStyle.MEDIUM)
  • 自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)

代码示例

@Test

public void test10(){

LocalDateTime now = LocalDateTime.now();

// DateTimeFormatter df = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);//2019年6月6日 下午04时40分03秒

DateTimeFormatter df = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);//19-6-6 下午4:40

String str = df.format(now);

System.out.println(str);

}

@Test

public void test9(){

LocalDateTime now = LocalDateTime.now();

DateTimeFormatter df = DateTimeFormatter.ISO_DATE_TIME;//2019-06-06T16:38:23.756

String str = df.format(now);

System.out.println(str);

}

@Test

public void test8(){

LocalDateTime now = LocalDateTime.now();

DateTimeFormatter df = DateTimeFormatter.ofPattern(\”yyyy年MM月dd日 HH时mm分ss秒 SSS毫秒 E 是这一年的D天\”);

String str = df.format(now);

System.out.println(str);

}

@Test

public void test7(){

LocalDate now = LocalDate.now();

LocalDate before = now.minusDays(100);

System.out.println(before);//2019-02-26

}

@Test

public void test06(){

LocalDate lai = LocalDate.of(2019, 5, 13);

LocalDate go = lai.plusDays(160);

System.out.println(go);//2019-10-20

}

@Test

public void test05(){

LocalDate lai = LocalDate.of(2019, 5, 13);

System.out.println(lai.getDayOfYear());

}

@Test

public void test04(){

LocalDate lai = LocalDate.of(2019, 5, 13);

System.out.println(lai);

}

@Test

public void test03(){

LocalDateTime now = LocalDateTime.now();

System.out.println(now);

}

@Test

public void test02(){

LocalTime now = LocalTime.now();

System.out.println(now);

}

@Test

public void test01(){

LocalDate now = LocalDate.now();

System.out.println(now);

}

Java中的类、方法、属性的命名规则

在面向对象编程中,对于类,对象,方法,变量等方面的命名是非常有技巧的。比如,大小写的区分,使用不同字母开头等等。但究其本,追其源,在为一个资源其名称的时候,应该本着描述性以及唯一性这两大特征来命名,才能保证资源之间不冲突,并且每一个都便于记忆。 包的命名  

  Java包的名字都是由小写单词组成。但是由于Java面向对象编程的特性,每一名Java程序员都可以编写属于自己的Java包,为了保障每个Java包命名的唯一性,在最新的Java编程规范中,要求程序员在自己定义的包的名称之前加上唯一的前缀。由于互联网上的域名称是不会重复的,所以程序员一般采用自己在互联网上的域名称作为自己程序包的唯一前缀。   例如: net.frontfree.javagroup

类的命名

   类的名字必须由大写字母开头而单词中的其他字母均为小写;如果类名称由多个单词组成,则每个单词的首字母均应为大写例如TestPage;如果类名称中包含单词缩写,则这个所写词的每个字母均应大写,如:XMLExample,还有一点命名技巧就是由于类是设计用来代表对象的,所以在命名类时应尽量选择名词。      例如: Circle

方法的命名

  方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头。   例如: sendMessge

常量的命名

  常量的名字应该都使用大写字母,并且指出该常量完整含义。如果一个常量名称由多个单词组成,则应该用下划线来分割这些单词。   例如: MAX_VALUE

参数的命名

  参数的命名规范和方法的命名规范相同,而且为了避免阅读程序时造成迷惑,请在尽量保证参数名称为一个单词的情况下使参数的命名尽可能明确。

Javadoc注释

  Java除了可以采用我们常见的注释方式之外,Java语言规范还定义了一种特殊的注释,也就是我们所说的Javadoc注释,它是用来记录我们代码中的API的。Javadoc注释是一种多行注释,以/**开头,而以*/结束,注释可以包含一些HTML标记符和专门的关键词。使用Javadoc注释的好处是编写的注释可以被自动转为在线文档,省去了单独编写程序文档的麻烦。   例如: /** * This is an example of * Javadoc * * @author lee* @version 0.1, 10/11/2020*/   在每个程序的最开始部分,一般都用Javadoc注释对程序的总体描述以及版权信息,之后在主程序中可以为每个类、接口、方法、字段添加Javadoc注释,每个注释的开头部分先用一句话概括该类、接口、方法、字段所完成的功能,这句话应单独占据一行以突出其概括作用,在这句话后面可以跟随更加详细的描述段落。在描述性段落之后还可以跟随一些以Javadoc注释标签开头的特殊段落,例如上面例子中的@auther和@version,这些段落将在生成文档中以特定方式显示。   虽然为一个设计低劣的程序添加注释不会使其变成好的程序,但是如果按照编程规范编写程序并且为程序添加良好的注释却可以帮助你编写出设计完美,运行效率高且易于理解的程序,尤其是在多人合作完成同一项目时编程规范就变得更加重要。俗话说“磨刀不误砍柴工”,花费一点时间去适应一下Java编程规范是有好处的。

Java常用类,这一次帮你总结好

  1. 内部类
  2. Object类
  3. 包装类
  4. 数学类
  5. 时间类
  6. 字符串
  7. String Builder和StringBuffer
  8. DecimalFormat

概念:在一个类内部再定义一个完整的类。

一般情况下类与类之间是相互独立的,内部类的意思就是打破这种独立思想,让一个类成为另一个类的内部信息,和成员变量、成员方法同等级别。

把一个类写在外面和写在里面最终达到的结果都一样,那我们为什么还要使用内部类,岂不是多此一举吗?

【参考代码】

输出结果:

这是外部类方法!

null

这是内部类方法!

Inner Class

局部内部类:基本的内部类还可以在一个方法体中定义。

静态内部类的构造不需要依赖于外部类对象,类中的静态组件都不需要依赖于任何对象,可以直接通过 类本身 进行构造。

输出结果:

这是外部类方法!

null

这是静态内部类方法!

Inner Class

匿名内部类:没有名字的内部类。

匿名内部类 主要应用与接口的实现!

接口:

实现类:

匿名内部类的使用:

我们定义接口之后, 它的实现类不需要去单独创建一个文件去写它的实现 ,我们可以把这个实现类的操作写到我们调用的地方就可以了!写起来更加简洁、方便。

耦合度太高了!

jdk中文在线文档: Java 8 中文版 – 在线API中文手册 – 码工具 (matools.com)

==是一个比较运算符

  1. ==: 既可以判断基本类型,又可以判断引用类型
  2. ==: 如果判断的是 基本类型判断的是值是否相等 。//==: 如果判断的是基本类型,判断的是 值 是否相等 int x1 = 10; int x2 = 10; double x3 = 10.0; System.out.println(x1 == x2);//true System.out.println(x1 == x3);//true
  3. ==: 如果判断的是 引用类型判断的是地址是否相等,即判断是不是同一个对象package Equals; public class Test01 { public static void main(String[] args) { //==: 如果判断的是引用类型,判断的是地址是否相等,即判断是不是同一个对象 A a = new A(); A b = a; A c = b; System.out.println(a==c);// ? true System.out.println(b==c);// true B obj = a; System.out.println(obj==c);// true } } class B{} class A extends B{}
  1. equals方法是Object类中的方法, 只能判断引用类型

idea查看Jdk原码:鼠标光标放在要查看的方法上,直接输入 ctrl + b

查看某个类所有方法: ctrl + F12

  1. 默认判断的是地址是否相等, 子类(Object类是所有类的父类)往往重写该方法,用于判断内容是否相等 。

在看个例子

【小练习】

写出输出结果:

输出结果:

false

true

false

true

false

小结:(可以当作地址来看但它本质上不是地址)

  1. 提高具有哈希结构的容器的效率
  2. 两个引用,如果指向的是同一个对象,则哈希值肯定一样
  3. 两个引用,如果指向的是不同对象,则哈希值是不一样的
  4. 哈希值主要根据地址号来!不能将哈希值完全等价于地址
  5. 在后面的集合中hashCode如果需要的话,也会重写

基本介绍:

默认返回:全类名 + @ + 哈希值的十六进制

当我们输出一个对象时,toString()方法会被默认调用

finzlize方法:当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象。

  1. 当对象被回收时,系统自动调用该对象的finzlize方法。子类可以重写该方法,做一些释放资源的操作
  2. 什么时候被回收:当某个对象没有任何引用时,则jvm就认为这个对象是一个垃圾对象,就会时候垃圾回收机制来销毁该对象,在销毁该对象前,会先调用finzlize方法。
  1. 垃圾回收机制的调用,是由系统来决定(即有自己的GC算法),也可以通过System.gc()主动触发垃圾回收机制。

注:在实际开发中,几乎不会用finzlize方法,更多的是为了应付面试

byte -> Byte

short -> Short

int -> Integer

long -> Long

float -> Float

double -> Double

char -> Character

boolean -> Boolean

这些类都在java.lang包

  1. 让基本数据类型有面向对象的特征
  2. 封装了字符串转化成基本数据类型的方法(重点)
  1. Integer.parseInt()
  2. Long.paseLong()
  3. Double.parseDouble()

【参考代码】

数学类的方法都是静态方法,可以直接引用——Math.方法();

  1. abs():获取绝对值
  2. max():求最大值
  3. min():求最小值
  4. pow():求次幂
  5. round():四舍五入
  6. sqrt():求平方根
  1. Date 日期类
  2. Calendar 日历类
  3. SimpleDateFormat 格式化时间类

【1】new Date() 可以获取到系统时间

【2】getTime() 能获取到时间的long形式,可以用来计算时间差

getTime()——获取计算机底层存储的数字,返回一个数字用来表示时间,这个数字的类型long,单位为毫秒。

【参考代码】

【1】get() 获取到时间的某一部分

【2】set() 设置时间 – -> 计算时间:系统已经帮我们设置好了,不用担心二月有多少天等问题,计算时间十分方便

注:Calendar 日历类是抽象类,因此不可以去new对象。虽然抽象类不能创建对象,但是jdk官方提供了一个实例对象的操作:

Calendar rightNow = Calendar.getInstance();

我们通过这条代码就是直接造了一个Calender的对象

【参考代码】:get() 获取到时间的某一部分:

【参考代码】:set() 设置时间 – -> 计算时间:

注:cal.setTime(d); 把Date转化成Calendar

Date,Calendar通过引用也可以进行时间的格式化,但比较繁琐,而SimpleDateFormat类是专门帮我们格式化时间的工具类,它在java.text包中。

【时间格式】:yyyy-MM-dd HH:mm:ss

SimpleDateFormat类有两大常用方法:

【1】format(Date):

format(Date) 帮我们把时间转成字符串,字符串的格式为SimpleDateFormat类定义对象时设置的时间格式

【参考代码】

【2】parse(String):

parse(String) 帮我们把字符串转化成时间

【参考代码】

注:由于用户输入的字符串不一定是我们要求的格式,可能是任何东西,想把它们转成时间是不可能的,你不可能把一个人转成时间 对吧,因此存在着很大的风险未处理(异常: java.text.ParseException),为此我们需要处理异常。

计算思路:

  1. 格式化时间
  2. 先将字符串转化成long类型时间
  3. 计算毫秒级别时间差,取绝对值
  4. 毫秒级别时间差转成秒级别
  5. 秒级别时间差转成分钟级别
  6. 分钟级别时间差转化显示成xx小时xx分钟

【参考代码】

【示例代码】

String 是一个不可变的数据类型,每每拼接都会产生一个新的字符串,那么内存迟早会被这些拼接的字符串塞满。

StringBuilder和StringBuffer: 可变的字符串,不产生新对象,比较省内存 ,当进行大量的字符串拼接时建议使用StringBuffer和StringBuilder,但它们两个一些方法的实现几乎跟String一样。

【相似点】

两者用法一模一样,可以认为是一个类

【区别】

  1. StringBuffer线程安全,StringBuilder非线程安全。
  2. StringBuilder相比于StringBuffer有速度优势, 多数情况下建议使用StringBuilder类,但当被要求线程安全时必须使用StringBuilder类

字符串拼接方法:append()方法

StringBuffer和StringBuilder 转成String类 :

【参考代码】

DecimalFormat:对小数进行格式化,保留几位小数。与格式化时间联想记。

【参考代码】

转眼这个学期又快要结束了,在繁忙的课业之余,经过了好久好久,终于将学习的各个小知识点整合起来啦!希望对在前进道路上学习的你有些许帮助!

注:如果文章有任何错误或不足,请各位大佬尽情指出,评论留言留下您宝贵的建议!如果这篇文章对你有些许帮助,希望可爱亲切的您点个赞推荐一手,非常感谢啦!

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。