Java常用类库

来源:互联网 发布:梵高传 知乎 编辑:程序博客网 时间:2024/06/08 06:00

1.StringBuffer类

(1)String与StringBuffer的区别
①StringBuffer是使用缓冲区的,本身也是操作字符串的,但是与String类不同,String类的内容一旦声明之后不可改变,改变的只是其内存地址的指向,而StringBuffer中的内容是可以改变的。
②当实例化String时,可以利用构造函数(String s1=new String(“world”))的方式对其进行初始化,也可以用赋值(String s=”hello”)的方式进行初始化;而StringBuffer只能使用构造函数(StringBuffer s=new StringBuffer(“hello”))的方式进行初始化。

(2)String类中可以通过”+”进行字符串的连接,而StringBuffer中却只能使用append()方法进行字符串的连接。

(3)StringBuffer常用方法
StringBuffer类中定义的大部分方法名称与String是一样的。
①字符串连接操作
使用append()方法可以进行字符串的连接,而且此方法返回了一个StringBuffer类的实例,这样就可以采用代码代码链的形式一直调用append()方法。
②在任意位置处为StringBuffer添加内容
直接使用insert()方法在指定的位置上为StringBuffer添加内容。
③字符串反转操作
使用reverse()方法将所有的内容以逆序的方式输出。
④替换指定范围的内容
存在replace()方法对指定范围的内容进行替换。
注:在String中使用的是replaceAll()方法。
⑤字符串截取
通过substring()方法从StringBuffer的指定范围中截取出内容
⑥删除指定范围的字符串
通过delete()方法删除指定范围的内容。
⑦查找指定的内容是否存在
通过indexOf()方法可以查找指定的内容,如果查找到了,则返回内容的位置,如果没有查找到则返回-1。

(4)对于频繁修改字符串内容的地方,最好使用StringBuffer类完成。

2.Runtime类

(1)Runtime类简介
在Java中Runtime类表示运行时操作类,是一个封装了JVM进程的类,每一个JVM都对应着一个Runtime类的实例,此实例由JVM运行时为其实例化。
在JDK文档中不会发现有关Runtime类中构造方法的定义,因为Runtime类本身的构造方法是私有化的(单例设计),如果要想取得一个Runtime实例,只能通过以下方式:

Runtime run=Runtime.getRuntime();

在Runtime类中提供了一个静态的getRuntime()方法,此类可以取得Runtime类的实例。

(2)常用方法
这里写图片描述

(3)Runtime类与Process类
除了观察内存使用量外,还可以使用Runtime类运行本机的可执行程序。
使用run.exec(“wps.exe”);发现会打开wps,此方法的返回值是Process,表示的是一个操作系统的进程类。
直接控制Process可以进行系统进程的控制,

3.国际化程序

国际化操作就是指一个程序可以同时适应多门语言。
要想实现国际化程序需要Locale类,属性文件(后缀为.properties,文件中的内容保存结构为”key=value”形式)和ResourceBundle类的支持。

(1)实现Java程序的国际化操作必须通过以下3个类完成:
java.util.Locale:用于表示一个国家语言类;
java.util.ResourceBundle:用于访问资源文件;
java.util.MessageFormat:格式化资源文件的占位符。
通过Locale类所指定的区域码,然后ResourceBundle根据Locale类所指定的区域码找到相应的资源文件,如果资源文件中存在动态文本,则使用MessageFormat进行格式化。

(2)Locale类
Locale表示的是本地,实际上使用的是一个ISO编码的封装类。对于各个国家来说都存在一个唯一的编码,那么这种编码就称为ISO编码,使用Locale就可以指定好一个具体的国家编码。
中国的编码:zh-CN;英语-美国的编码:en-US;法语的编码为fr-FR。

(3)ResourceBundle类
ResourceBundle类主要作用是读取属性文件,读取属性文件时可以直接指定属性文件的名称(指定名称时不需要文件的后缀),也可以根据Locale所指定的区域码来选取指定的资源文件。

4.System类(★★★)

(1)System类是一些与系统相关的属性和方法的集合,而且在System类中所有的属性和方法都是静态的,要想引用这些属性和方法,直接调用System类即可。

常用方法:
这里写图片描述

(2)垃圾对象的回收
一个对象如果不使用,则肯定要等待进行垃圾收集,垃圾收集可以自动调用也可以手工调用,手工调用的时候就是调用System.gc()或者Runtime.gerRuntime().gc()。但是如果一个对象在回首之前需要一些收尾的工作,则必须覆写Object类中的finalize()方法。
定义:protected void finalize() throws Throwable
在对象回收之前进行调用,以处理对象回收前的若干操作,例如释放资源等等。
在对象释放空间时默认调用此方法。
注:finalize()方法抛出的异常并非是Exception,而是Throwable,所以在调用此方法时不一定只会在程序中产生错误,也有可能产生JVM错误。

(3)对象的生命周期
这里写图片描述

一个类加载后进行初始化,然后就可以进行对象的实例化,对象实例化时会调用构造方法完成,当一个对象不再使用时就要等待被垃圾收集,然后对象终结,最终被程序卸载。

5.日期操作类(★★★)

主要使用java.util包中的Date、Calendar以及java.text包中的SimpleDateFormat。
(1)Date类
在java.util包中定义了Date类,Date类本身使用非常简单,直接输出其实例化对象即可。(Date date=new Date();)

但是Date显示的日期格式并不符合用户的要求,必须要使用格式化的方式将一个日起格式按照用户所需要的方式进行显示。

(2)Calendar类
Calendar类可以直接将日起精确到毫秒。但是这个类是一个抽象类,如果要使用一个抽象类,则必须依靠对象的多态性,通过子类进行父类的实例化操作。Calendat类的子类是GregorianCalendar类。
虽然Calendar类可以实现,但是代码会比较复杂。

(3)DateFormat类(指定已经实现的固定格式)(并不常用)
在java.util.Date类中实际上取得的时间是一个非常正确的时间,但是输出格式不理想。
Format类主要实现格式化操作,其子类有:MessageFormat、DateFormat、NumberFormat
DateFormat类是一个抽象类,无法直接实例化,但是在此类中提供了一个静态方法,可以取得本类的实例。
此类是一个日期的格式化类,专门格式化日期的操作,因为java,util.Date类本身就已经包含了完整的日期,所以只需要将此日起按照一些好的格式格式化一下显示就好了。

●得到日期的DateFormat对象:public static final DateFormat getDateInstance()●得到日期时间的DateFormat对象:public static final DateFormat getDateTimeInstance()

直接使用DateFormat类完成Date类的转换功能:

●pulic final String format(Date date)

虽然DateFormat类可以让日期时间格式化,格式是其默认的时间显示格式,但是如果现在想要得到用户自己需要的日期显示格式,则必须通过DateFormat的子类SimpleDateFormat类完成。

(4)SimpleDateFormate类(转换成自定义的格式)(常用)
要想实现转换,则必须首先准备好一个模板,通过此模板进行日期数字的提取工作。
这里写图片描述
在SimpleDateFormat类使用的时候,必须注意的是在构造对象时要传入匹配的模板。

●构造方法:public SimpleDateFormat(String pattern)●转换:public Date parse(String source) throws ParseException

注:此时取的是全部的时间数。

●格式化:public final String format(Date date)

注:将时间重新格式化成字符串显示。

6.Math类

Math类是数学操作类,提供了一系列的数学操作方法,包括求绝对值、三角函数等,在Math类中提供的一切方法都是静态方法,所以直接由类名称调用即可。

注:Math类中的round()方法的主要作用是进行四舍五入操作,但是此方法在操作时将小数点后面的全部数字都忽略掉,如果想精确到小数点后的准备位数,则必须使用BigDecimal类完成。

7.Random类

Random类的随机数产生类,可以指定一个随机数的范围,然后任意产生在此范围中的数字。
Random类是定义在java.util包中的类。

8.NumberFormat类

(1)NumberFomat类
NumberFormat表示数字的格式化类,即可以按照本地的风格习惯进行数字的显示。
定义:public abstract class NumberFormat extends Format
NumberFormat是一个抽象类,直接使用NumberFormat类中提供的静态方法为其实例化。
常用方法:
这里写图片描述

MessageFormat、DateFormat、NumberFormat是Format三个常用的子类,如果要想进一步完成一个好的国际化程序,则肯定需要同时使用这样三个类完成,根据不同的国家显示日期,或者显示货币的形式。
此类在java.text包中,直接导入此包即可。

(2)DecimalFormat类(可自定义,更加方便)
DecimalFormat类也是NumberFormat类的一个子类,主要作用的格式化数字。比使用NumberFormat更加方便,因为可以直接指定按用户自定义的格式进行格式化操作。
如果要想进行自定义格式化操作,则必须指定格式化操作的模板。
格式化模板:
这里写图片描述

NumberFormat完成的功能只是根据区域不同固定的数字显示格式。
DecimalFormat是可以由用户自己指定其显示的形式,所以比较好用。

9.BigInteger类(操作大整数)

一个数字非常大时,无法用基本类型接收,此时可以使用BigInteger类。定义在java.math包中。
常用方法:
这里写图片描述

10.BigDecimal类(指定小数的保留位数)

不需要准确计算精度的数字可以直接使用float或double,但是如果需要精确计算结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作。
这里写图片描述

11.对象克隆技术

对象克隆:对象的复制,完整的复制一个对象。
如果要想完成对象克隆的话,则肯定依靠Object()类的clone()方法。
protected Object clone() throws CloneNotSupportedException
以上方法是受保护的类型,所以在子类中必须覆写此方法,而且覆写之后应该扩大访问权限,这样才能被外部调用,但是具体的克隆方法的实现还是在Object中,所以在覆写的方法中只需要调用Object类中的clone()方法即可完成操作,而且在对象所在的类中必须实现Cloneable接口才能完成对象的克隆操作。
Cloneable是一个标识接口,此接口中没有任何的操作方法,它表示的是一种能力,表示对象可以被克隆。
注:只有实现了此接口对象才可以被克隆,否则无法克隆。

12.Arrays类

Array类是数组的操作类,定义在java.util包中,主要功能是实现数组元素的查找、数组内容的填充、排序等。
常用方法:
这里写图片描述

13.Comparable接口

(1)比较器的应用
在Arrays类中存在sort()方法,此方法可以直接对对象数组进行排序。
可以直接使用java.util.Arrays类进行数组的排序操作,但对象所在的类必须实现Comparable接口,用于指定排序接口。
定义:

public interface Comparable{
public int compareTo(T o);
}
此方法返回一个int类型的数据,但是此int的值只能是1(表示大于)、-1(表示小于)、0(表示相等)三种。

(2)比较器的原理
通过二叉树进行排序,之后利用中序便利的方式把内容依次读取出来。
二叉树排序的基本原理就是,将第一个内容作为根节点保存,之后如果后面的值比根节点的值小,则放在根节点的左子树,如果后面的值比根节点的值大,则放在根节点的右子树。

14.另一种比较器Comparator

如果一个类已经开发完成,但是在此类建立得初期并没有实现Comparable接口,此时肯定是无法进行对象排序操作的。而Comparator接口就是来实现这个的。
此接口定义在java.util包中,定义如下:

public interface Comparator<T>{public int compare(T o1,T o2);boolean equals(Object obj);}

这个中存在compare()方法,此方法要接收两个对象,其返回值是0、-1、1.
此接口与使用之前不同的是,需要单独指定好一个比较器的比较规则类才可以完成数组排序。

注:只要对象排序,则在java中永远是Comparable接口为准的。

15.观察者设计模式

如果要想实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口。
Observer接口定义

public interface Observer{void update(Observable o,Object arg);}

此接口中只定义了一个update()方法,第1个参数表示被观察者实例,第2个参数表示修改的内容。
注:此模式是一种Java本身的机制,不使用Observer和Obserable也是可以实现的,只是比较复杂而已。

16.正则表达式

(1)正则表达式认识
正则表达式可以方便的对数据进行匹配,可以执行更加复杂的字符串验证、拆分、替换功能。
具体的正则表达式操作类是需要通过Pattern和Matcher两个雷完成操作。

(2)Pattern、Matcher类
这两个类是正则的核心操作类,这两个类都定义在java.util.regex包中。
Pattern类的主要作用是进行正则规范的编写;
Matcher类主要是执行规范,验证一个字符串是否符合其规范。
常用正则规范:
这里写图片描述

以上的正则,如果要想驱动起来,则必须依靠Pattern类和Matcher类。
Pattern类的常用方法:
这里写图片描述
在Pattern类如果要想取得Pattern类实例,则必须调用compile()方法。
本类中没有明确的构造方法可以给供用户使用,那么则肯定此类的构造方法被私有化了,则可以直接从Pattern类中取得本类的实例。

●操作好指定的正则:public static Pattern compile(String regex)●可以为Matcher类实例化:public Matcher(CharSequenceinput)●拆分:public String[] split(CharSequence input)

Matcher类的常用方法:
这里写图片描述

(3)String类对正则的支持
在String类中有以下三个方法是支持正则操作的:
这里写图片描述
在正则操作中,如果一个字符串无法按照指定的字符拆分的话,则需要使用”\”转义,转义的时候”\”表示一个”\”。
在开发中一般都会直接使用String类中提供好的正则支持,而往往很少直接使用Pattern类或Matcher类。

17.定时调度

(1)Timer类
定时调度:每当一到时间,程序会自动执行。
如果要使用定时调用,则必须保证程序始终运行着才可以,也就是说相当于定时调度是在程序之外又启动了一个新的线程。
Timer类是一种线程设施,可以用来实现在某一个时间或某一段时间后安排某一个任务执行一次货定期重复执行。该功能需要TimeTask配合使用。TimerTask类用来实现由Timer安排的一次货重复执行的某一个任务。
每一个Timer对象对应的是一个线程,因此计时器所执行的任务应该迅速完成,否则可能会延迟后续任务的执行,而这些后续的任务就有可能堆在一起,等到该任务完成后才能快速连续执行。
Timer类中的常用方法:
这里写图片描述
schedule()与scheduleAtFixedRate()方法的区别:
两者的区别在于重复执行任务时,对于时间间隔出现延迟的情况处理:
①shcedule()方法的执行时间间隔永远是固定的,如果之前出现了延迟的情况,之后也会继续按照设定好的间隔时间来执行;
②shceduleAtFixedRate()方法可以根据出现的延迟时间自动调整下一次间隔的执行时间。

(2)TimeTask类
要想执行具体的任务,则必须使用TimerTask类。TimerTask类是一个抽象类,如果要使用该类,需要自己建立一个类来继承此类,并实现其中的抽象方法。
这里写图片描述

此方式一般在web开发中比较有用,因为要维护一个容器不关闭才可以一直定时操作下去。

0 0
原创粉丝点击