一些常用类

String类:

1、String声明为final,表示不可被继承;

2、String实现了Serializable接口,表示可以被序列化;实现了Comparable接口,表示可以相互比较大小。

3String内部定义了final byte[] values属性来存储字符串数据(jdk1.8及以前String使用的是char数组,jdk1.9及以后使用的是byte数组);

4、通过字面量的方式新建字符串,变量直接指向字符串常量池。字符串数据存储在常量池中,且常量池中不会存在相同的字符串数据,即相同字符串数据相同的两个变量地址相同,可以用“==”比较。

     通过new的方式新建字符串,变量地址指向堆空间中,但是堆空间中对象的values属性的指向看构造参数:

1、如果构造参数为byte[]或char[],则指向堆中。

2、如果构造参数为String,则value还是指向字符串常量池

 

    

 

 

字符串拼接:

 

如果其中有一个是变量,但被定义为final,那么拼接后的数据还是存储在常量池中。

 

总结:常+=池;常+=堆;常+final=池。

 

5、String有不可变性:对字符串重新赋值,或对现有字符串进行拼接,或用String类的replace()方法对现有字符串进行修改替换时,都不会对原有字符串数据改动,都会重新开辟常量池的新空间。

 

6、String类的常用方法:

 

 

 

7、String类的转换

String和包装类、基本数据类型的转换:见面向对象

String和 char[]的转换:

String→char[]:调用String的toCharArray()方法。

char[]→String:直接new String(char[])

String和 byte[]的转换:

String→byte[]:调用String的getBytes()方法。

byte[]→String:直接new String(byte[])

注意:从字符串→字节数组是编码(从能看懂的到看不懂的),从字节数组→字符串是解码。编码和解码要基于同一种字符集(UTF-8GBK等等)。

 

StringStringBufferStringBuilder

String(JDK1.0出现):不可变字符序列、底层使用byte[]存储。

StringBuffer(JDK1.0出现):效率低、线程安全、可变字符序列、底层使用byte[]存储、不能用字面量创建

StringBuilder(JDK 5.0出现):效率高、线程不安全、可变字符序列、底层使用byte[]存储、不能用字面量创建

▲使用效率:StringBuilder>StringBuffer>String

注意:String具有不可变性,任何对变量的操作不会改变原有字符串的值;但是StringBufferStringBuilder会改变原有字符串的值。

 

StringBuffer/StringBuilder的构造器:

StringBuffer/StringBuilder():在底层初始化byte[],其初始长度为16byte

StringBuffer/StringBuilder(CharSequence seq):在底层初始化byte[],它包含与指定的 CharSequence相同的字符。

StringBuffer/StringBuilder(int capacity):在底层初始化byte[]为具有指定初始长度的数组。

StringBuffer/StringBuilder(String str):构造一个StringBuffer对象,并将其内容初始化为指定的字符串内容。在底层初始化byte[]当前byte长度+16

 

StringBuffer对象增加字符串,底层byte[]容量不够时启用扩容机制

在JDK1.8及以前,扩容是将value长度先乘以2再加2;

 

StringBuffer/StringBuilder的常用方法:

上述这些方法支持方法链操作,因为append()方法返回调用这些方法的StringBuffer的本身对象。

注意append(null)等价于append("null")

public String toString():返回一个内容相同的字符串。

 

 

日期时间相关类:

System类:

方法:public static long currentTimeMillis():返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。

Date类:

构造器:1、new Date():创建一个对应于当前时间的对象;2、new Date(long date):创建一个对应于指定毫秒数的对象

方法:1、getTime():返回自1970 年1 月1 日00:00:00 GMT以来距离此Date 对象表示的毫数。

2、toString():把此Date对象转换为标准形式(年月日时分秒)的String。

SimpleDateFormat类:

构造器:1、new SimpleDateFormat(String类型的自定格式,通常用:"yyyy-MM-dd hh-mm-ss")

方法:1、格式化:public String format(Date date):格式化Date对象date。

2、解析:public Date parse(String source):从给定字符串的开始解析文本,以生成一个日期。

▲注意:格式化和解析的格式应该满足构造器形参自定格式。

Calendar(日历类)类:

它是一个抽象类,不能直接造对象。

创建实例的方法:1、使用public static Calendar getInstance()方法;2、调用它的子类GregorianCalendar的构造器。

方法:

1、public int get(int field):获取相关字段天数的值;

2、public void set(int field,int value):设置相关字段天数的值,在原有对象上改

3、public void add(int field,int amount):添加相关字段天数的值,在原有对象上改

4、public final Date getTime():将上述操作过的Calendar对象返回成Date类;

5、public final void setTime(Date date):将一个Date类对象返回成Calendar类。

▲Calendar类具有可变性。

 

新时间日期API

LocalDateLocalTimeLocalDateTime类:

以LocalDateTime 类为例,其构造器是private,不能通过构造器新建对象,只能调用now或of方法新建对象。

方法:

1、public static LocalDateTime now():创建当前日期和时间的对象。

2、public static LocalDateTime of(int year,int month,int dayOfMonth,int hour,int minute,int second):创建指定年月日时分秒的对象。

3、public int getXxxxx():返回对象的日期或时间相关信息。

4public LocalDateTime withXxxxx(参数):将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象。

5public LocalDateTime plusXxxxx(参数):向当前对象添加几天、几周、几个月、几年、几小时等等并返回新的对象。

6public LocalDateTime minusXxxxx(参数):向当前对象减去几天、几周、几个月、几年、几小时等等并返回新的对象。

▲LocalDateLocalTimeLocalDateTime类具有不可变性。

Instant类:

其构造器是private,不能通过构造器新建对象,只能调用方法新建对象

方法:

1public static Instant now():创建当前UTC时区的日期和时间对象。

2、public static Instant ofEpochMilli(long epochMilli):静态方法,返回在1970-01-0100:00:00基础上加上指定毫秒数之后的Instant类的对象。

3、public long toEpochMilli():返回自1970 年1 月1 日00:00:00 GMT以来距离此Instant对象表示的毫秒数。

DateTimeFormatter类:

实例化:1、调用静态初始化器:如ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME

格式化:public String format(TemporalAccessor temporal),此处TemporalAccessor 类形参要和初始化器类型一致。

解析:public TemporalAccessor parse(CharSequence text),此处的形参格式要和格式化后的一致。

实例化:2、调用静态方法本地化相关格式:如ofLocalizedDateTime(FormatStyle.LONG/SHORT/MEDIUM);ofLocalizedDate(FormatStyle.LONG/SHORT/MEDIUM/FULL);ofLocalizedTime(FormatStyle.LONG/SHORT/MEDIUM/FULL)

格式化:public String format(TemporalAccessor temporal),此处TemporalAccessor 类形参要和上面静态方法相一致(一般都用LocalDateTime类形参就行)。

解析:public TemporalAccessor parse(CharSequence text),此处的形参格式要和格式化后的一致。

实例化:3、调用静态方法自定义格式:如ofPattern("yyyy-MM-dd hh-mm-ss")

格式化:public String format(TemporalAccessor temporal),此处TemporalAccessor 类形参要看上面自定义格式有没有日期或者时间(一般都用LocalDateTime类形参就行)。

解析:public TemporalAccessor parse(CharSequence text),此处的形参格式要和格式化后的一致。

 

Java比较器接口:

可以使用ComparableComparator来直接比较两个对象大小,但是不能对比较的引用类型对象进行排序,要想排序,要用到把他们放在数组中或集合中,然后调用Arrays.sort(数组形参)Collections.sort(集合形参)或者Arrays.sort(数组形参,comparator)Collections.sort(集合形参,comparator)

 

Arrays.sort(数组参数)和Collections.sort(集合形参)默认使用的是自然排序;

Arrays.sort(数组形参,Comparator)和Collections.sort(集合形参,Comparator)使用的才是定制排序。

 

sort方法默认使用的是从小到大的排序方式,sort方法认为的大是返回1时的第一个元素和返回-1的第二个元素;若要使用从大到小的排序,只用将-11调换即可。

 

自然排序:Comparable接口:

1、对常用的String类、包装类等已经重写过compareTo(Obj)方法,并且按照从小到大排序。

2、对自定义类,如果需要比较某个属性或者按照某个属性排序,可以先让该类实现Comparable接口,再重写compareTo(Obj)方法。比较时可直接调用compareTo方法,如果对数组或集合元素排序,还可以用Arrays.sort(数组形参)Collections.sort(集合形参)

▲重写compareTo(Obj)方法的规则(默认为从小到大,若从大到小则需要返回值相反):

 

举例:

 

定制排序:Comparator接口:

当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那么可以考虑使用Comparator接口的实现类强行对多个对象进行整体排序的比较,使用时需要让实现类(而不是需要比较的类,使用comparator不用让比较类重写)重写其中的Compare(Obj,Obj)方法。

 

▲Compare(Obj,Obj)方法重写规则和comparableTo方法相同。

 

Comparator一般用在Arrays.sort(数组形参,Comparator)Collections.sort(集合形参,Comparator)这两种sort重载方法中,并且以匿名类对象的方式使用。

举例:

 

 

两种方式的比较:

都可以使用泛型。

Comparable方式必须将比较类实现Comparable接口,实现类的对象可以随时使用compareTo(Obj)方法进行排序。

Comparator方式只是一个临时性的,不用将比较类实现Comparator接口,但还是需要一个实现类以传入,通常都是用它实现类匿名类的匿名对象,使用时才new,要想下次使用还得重新new。

 

 

System类:

由于该类的构造器是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便的进行调用。

属性:in:标准输入流(键盘输入),out:标准输出流(显示器)和err:标准错误输出流(显示器)。

方法:

1、long currentTimeMillis()

2、void exit(int status):该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表异常退出。

3、void gc():该方法的作用是请求系统进行垃圾回收。

 

Math

数学相关的工具类。

 

BigIntegerBigDecimal类:

BigInteger可以表示不可变的任意精度的整数。

BigInteger a = BigInteger.valueOf(100);

相关方法:

Biglnteger add(Biglnteger other)

Biglnteger subtract(Biglnteger other)

Biglnteger multipiy(Biginteger other)

Biglnteger divide(Biglnteger other)

Biglnteger mod(Biglnteger other)

static Biglnteger valueOf(long x)

 

BigDecimal表示不可变的任意位数的小数。

BigDecimala = BigDecimal.valueOf(99.99);

相关方法:

BigDecimal add(BigDecimal other)

BigDecimal subtract(BigDecimal other)

BigDecimal multipiy(BigDecimal other)

BigDecimal divide(BigDecimal other ,RoundingMode mode(舍入方式))

static BigDecimal valueOf(long x)

static BigDecimal valueOf(Double x)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值