存储类的仓库——Java常用类库

存储类的仓库——Java常用类库
Java类库就是Java API(应用程序接口),是系统提供的已实现的标准类的集合,使用Java类库可以完成涉及字符串处理、图形、网络等多方面的操作。

API概念
API就是应用程序编程接口。

String类和StringBuffer类
String类用于比较两个字符串,查找和抽取字符串中的字符或子串,进行字符串与其他类型之间的相互转换等。String类对象一旦被初始化就布恩那个再被改变。
StringBuffer类用于内容可以改变的字符串,可以将其他各种类型的数据增加、插入到字符串中,也可以转置字符串中原来的内容。一旦通过StringBuffer生成了最终想要的字符串,就应该使用StringBufffer.toString()方法将其转换成String类,随后就可以使用String的各种方法操纵这个字符串了。
Java为字符串提供了特别的操作符号(+),可以将其他类型的数据转换成字符串,并前后链接成新的字符串。链接操作符(+)的功能是通过StringBuffer类和它的append()方法实现的。如:String x = “a”+4+”c”;
编译时等于: String x = StringBuffer().append(“a”).append(4).append(“c”).toString();
在开发中,若需要频繁的改变字符串的内容,就需要考虑使用StringBuffer类实现,因为其内容可以改变,所以执行性能比String更高。

基本数据类型的包装类
基本数据类型不具有对象的特性,Java中很多方法的参数都是Object,即这些方法的接收参数都是对象,同时,又需要用到这些方法来处理基本数据类型的数据,这时就用到包装类
在这里插入图片描述
System类和Runtime类
Java不知全局全量和方法,所以将一些重要的方法和变量手机到统一的System类中。其中所有的成员都是静态的,可直接使用System类名作为前缀引用这些变量和方法。如下:
exit(int status)方法,提前终止虚拟机的运行。对于发生异常情况而终止虚拟机的运行,传递一个非零值作为参数。若在用户正常操作下终止虚拟机的运行,则传递零值作为参数。
CurrentTimeMillis方法,返回自1970年1月1日0点0分0秒起至今的以毫秒为单位的时间,这是一个long类型的大数值。在计算机内部只有数值,没有真正的日期类型及其他各种类型,也就是说,平时用到的日期实质上就是一个数值,但通过这个数值,能够推算出其对应的具体日期时间。
getProperties方法获取当前虚拟机的环境属性,每一个属性都是变量与值以成对的形式出现。

{
	Properties sp = System.getProperties();	
	Enumberation e = sp.propertyNames();		//返回一个Enumberation类型的数据。
	while(e.hasMoreElements)	//如果还有下个一个元素。
	{
		String key = (String)e.nextElement();	//取出下一个元素。
		System.out.println(key+=+sp.getProperty(key));
	}
}

Enumeration(枚举)接口的作用和Iterator类似,只提供了遍历Vector和HashTable类型集合元素的功能,不支持元素的移除操作。
Vector和ArrayList有一些相似,其内部都是通过一个容量能够动态增长的数组来实现的。不同点是Vector是线程安全的。因为其内部有很多同步代码快来保证线程安全。
迭代器简介(Iterator):迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。
Hashtable同样是基于哈希表实现的,同样每个元素是一个key-value对,其内部也是通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中。

Runtime类
Runtime类封装了Java命令本身的运行进程,不能直接创建Runtime实例,但可以通过静态方法Runtime.getRuntime获得正在运行的Runtime对象的引用。
Java命令运行后,本身是多任务操作系统上的一个进程,在这这个进程中启动一个新的进程,即执行其他程序时使用exec方法。exec方法返回一个代表子进程的Process类对象,通过这个对象,Java进程可以与子进程交互。

{
	Runtime run = Runtime.getRuntime();
	try
	{
		run.exec(“notepad.exe”);
	}
		catch(Exception e){e.printStackTrace();}
	}

Date与Calendar、DateFormat类
Date类用于表示日期和时间,最简单的构造方法是Date(),它以当前的日期和时间初始化一个Date对象。但是Date并未考虑到国际化,所以需要其他两个类。
Calendar类是一个抽象基类,主要完成日期字段之间相互操作的功能。如Calendar.add方法实现在某一日期的基础上增加时间(年、月、日、小时等)。Calendar.set用于修改日期对象中的年月日等。Calendar.getInstance方法用于返回一个Calendar类型(更准确的说是它的某个子类)的对象实例,返回的就是预设了当前时间的GregorianCalendar类对象。

{
	Calendar c1 = Calendar.getInstance();
	c1.get(c1.YEAR);	//获取年数
	c1.add(c1.DAY_OF_YEAR,230);	//增加天数为230
}

DateFormat是一个具体类,具有把Date对象格式化为本地字符串,或者通过语言分析把日期或者时间字符串转换为Date对象的功能。

{
	SimpleDateFormat sp1 = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
	SimpleDateFormat sp2 = new SimpleDateFormat(“yyyy年MM月dd日 hh时mm分ss秒”);
	try
	{
		Date d = sp1.parse(2005-8-11 18:30:23);	//利用sp1转换为Date,将数值导入
		System.out,println(sp2.format(d));		//利用sp2转换格式,将数值导出
	}
		catch(ParseException e)
	{
		e.printStackTrace();
	}
}

Math与Random类
Math类包含了所有用于几何和三角的浮点运算方法,这些方法都是静态的。
Random类是随机数产生器:

{
	Random r = new Random();
	for(int i=0;i<5;i++)
	{
		r.nextInt(100);		//随机种子一样,则随机数也是一样的
	}
}

若我们不传入随机种子,则系统会使用当前系统的时间作为随机种子。

hashCode()方法

Object类中的hashCode()方法也可以考虑覆写,
{
	HashMap hm = new HashMap();
	hm,put(new Person(“张三”,20),”张三”);
	System.out.println(hm.get(new Person(“张三”,20)));
}
	这是输出是为空的,我们需要加如以下代码:
public int hashCode()
{
	return 10;	//赋予对象散列码
}

这样就会输出:”张三”
hashCode()的含义在于用于存储散列表的时候使用,需要保证不同的对象有不同的散列表。

对象克隆
实际上就是指将对象重新复制一遍,所有具有clone功能的类都有一个特性,那就是它直接或间接的实现了Cloneable接口,否则,在尝试调用clone()方法时,将会触发CloneNotSupportedException异常。为什么要改写Object类中的clone()方法呢?因为clone()方法的权限是protected,所以对用户是不可见的,所以需要用户修改为public。
使用 clone() 方法来拷贝一个对象即复杂又有风险,它会抛出异常,并且还需要类型转换。

{
	try
	{
		e2 = (Employee)e1.clone();
	}catch(CloneNotSupportedException e){
		e.printStackTrace();
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章