一些常用类

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值