API总笔记.docx
《API总笔记.docx》由会员分享,可在线阅读,更多相关《API总笔记.docx(37页珍藏版)》请在冰豆网上搜索。
API总笔记
JavaAPI
●理解API辅助开放工具的使用
●String类与StringBuffer类
●基本数据类型的对象包装类
●集合类
●Hastable与Properties类
●System类与Runtime类
●Date、Calendar与DateFormat类
●Timer与TimerTask类
●Math与Random类
●学习API的方法
API的概念
API(ApplicationProgrammingInterface):
应用程序的接口。
01-03
String类和StringBuffer类
●位于java.lang包中。
●String类对象中的内容一旦被初始化就不能再改变。
●StringBuffer类用于封装内容可以改变的字符串。
用toString方法转换成String类型
Sringx=”a”+4+”c”,编译时等效于:
Stringx=neStringBuffer().append(“a”).append(4).append(“c”);
●字符串常量(如”hello”)实际上是一种特殊的匿名String对象。
比较下面两种情况的差异:
Strings1=”hello”;Strings2=”hello”;
Strings1=newString(“hello”);Strings2=newString(“hello”);
编程实例:
逐行读取键盘输入,直到输入内容为”bye”时,结束程序。
当Strings1=”hello”,Strings2=”hello”;那么s1==s2成立;他们都是应用同一个内存空间,以节省内存资源,这是由String类的特殊性来决定的。
当Strings1=newString(“hello”);Strings2=newString(“hello”);的时候,因为他们已经各自创建了一个自己的内存空间,所以s1≠s2的,内存地址不一样!
String类的常用成员方法
●构造方法:
String(byte[]bytes,intoffset,intlength)
●equalslgnorgCase方法
●indexOf(intch)方法
●substring(intbeginIndex)方法
substring(intbeginIndex,intendIndex)
publicString(byte[] bytes,
int offset,
int length)
通过使用平台的默认字符集解码指定的byte子数组,构造一个新的String。
新String的长度是字符集的函数,因此可能不等于该子数组的长度。
当给定byte在给定字符集中无效的情况下,此构造方法的行为没有指定。
如果需要对解码过程进行更多控制,则应该使用CharsetDecoder类。
参数:
bytes-要解码为字符的byte
offset-要解码的第一个byte的索引
length-要解码的byte数
抛出:
IndexOutOfBoundsException-如果offset和length参数索引字符超出bytes数组的范围
将字节数组的的内容转换成字符串,从字节数组中的第offset个元素节开始,到length个数的元素的内容作为新的字符串对象。
例子:
classReadLine{
publicstaticvoidmain(Stringargs[])
{
//定义一个不能超过1024个字节的内容的数组,此数组来吸收字符。
byte[]buf=newbyte[1024];
//字符串对象
StringstrInfo=null;
intpos=0;
intch=0;
System.out.println("请输入内容:
");
while(true)
{
try{
//读取一个字节的数据(ch为什么是int类型?
)
/*这里的System.in.read()方式是运用了java.io.InputStream类中的read()方法。
read()方法从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。
以整数形式返回实际读取的字节数。
在输入数据可用、检测到文件末尾或者抛出异常前,
此方法一直阻塞。
如果b的长度为0,则不读取任何字节并返回0;否则,尝试读取至少一个字节。
如果因为流位于文件末尾而没有可用的字节,则返回值-1;否则,至少读取一个字节
并将其存储在b中。
将读取的第一个字节存储在元素b[0]中,下一个存储在b[1]中,依次类推。
读取的字节数
最多等于b的长度。
设k为实际读取的字节数;这些字节将存储在b[0]到b[k-1]的元素中,
不影响b[k]到b[b.length-1]的元素。
类InputStream的read(b)方法的效果等同于:
read(b,0,b.length)
参数:
b-存储读入数据的缓冲区。
返回:
读入缓冲区的总字节数;如果因为已经到达流末尾而不再有数据可用,则返回-1。
抛出:
IOException-如果不是因为流位于文件末尾而无法读取第一个字节;如果输入流已关闭;
如果发生其他I/O错误。
NullPointerException-如果b为null。
*/
ch=System.in.read();
}
catch(Exceptione)
{
e.printStackTrace();
}
switch(ch)
{
case'\r':
//当回车的时候,\r表示回车
break;
case'\n':
//\n表示换行;
/*这个字符串是从字符数组内容中读取来的,下句的意思是:
将字符数组buf中
从第0个位置开始读取,到pos这个位置的字符为止的字符转换为字符串。
*/
strInfo=newString(buf,0,pos);
/*String类型的字符串要与别的字符串的内容对比,
*必须用到equalsIgnorCase方法来对比,如果是
*等号来对比,则对比的是字符串内存~!
内存是不相等的所以切记!
!
!
equalsIgnoreCase()方法是将此String与另一个String比较,不考虑大小写。
如果两个字符串的长度相同,并且其中的相应字符都相等(忽略大小写),
则认为这两个字符串是相等的。
*/
if(strInfo.equals("bye"))
{
return;
}
else
{
System.out.println(strInfo);
pos=0;//当打印完一个字符串之后,字符串的位置要回到0这个位置!
以便下一行输入!
break;
}
default:
buf[pos++]=(byte)ch;
}
}
//System.out.println("hello".indexOf('o'));
}
}
equalsIgnoreCase
publicbooleanequalsIgnoreCase(String anotherString)
将此String与另一个String比较,不考虑大小写。
如果两个字符串的长度相同,并且其中的相应字符都相等(忽略大小写),则认为这两个字符串是相等的。
在忽略大小写的情况下,如果下列至少一项为true,则认为c1和c2这两个字符相同。
∙这两个字符相同(使用==运算符进行比较)。
∙对每个字符应用方法Character.toUpperCase(char)生成相同的结果。
∙对每个字符应用方法Character.toLowerCase(char)生成相同的结果。
参数:
anotherString-与此String进行比较的String。
返回:
如果参数不为null,且这两个String相等(忽略大小写),则返回true;否则返回false。
indexOf
publicintindexOf(int ch)
返回指定字符在此字符串中第一次出现处的索引。
如果在此String对象表示的字符序列中出现值为ch的字符,则返回第一次出现该字符的索引(以Unicode代码单元表示)。
对于0到0xFFFF(包括0和0xFFFF)范围内的ch的值,返回值是
this.charAt(k)==ch
为true的最小k值。
对于其他ch值,返回值是
this.codePointAt(k)==ch
为true最小k值。
无论哪种情况,如果此字符串中没有这样的字符,则返回-1。
参数:
ch-一个字符(Unicode代码点)。
返回:
在此对象表示的字符序列中第一次出现该字符的索引;如果未出现该字符,则返回-1。
substring
publicStringsubstring(int beginIndex)
返回一个新的字符串,它是此字符串的一个子字符串。
该子字符串从指定索引处的字符开始,直到此字符串末尾。
示例:
"unhappy".substring
(2)returns"happy"
"Harbison".substring(3)returns"bison"
"emptiness".substring(9)returns""(anemptystring)
参数:
beginIndex-起始索引(包括)。
返回:
指定的子字符串。
抛出:
IndexOutOfBoundsException-如果beginIndex为负或大于此String对象的长度。
substring
publicStringsubstring(int beginIndex,
int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。
该子字符串从指定的beginIndex处开始,直到索引endIndex-1处的字符。
因此,该子字符串的长度为endIndex-beginIndex。
示例:
"hamburger".substring(4,8)returns"urge"
"smiles".substring(1,5)returns"mile"
参数:
beginIndex-起始索引(包括)。
endIndex-结束索引(不包括)。
返回:
指定的子字符串。
抛出:
IndexOutOfBoundsException-如果beginIndex为负,或endIndex大于此String对象的长度,或beginIndex大于endIndex。
01_04
因为API接口中很多引用的参数都是(object类型)对象!
所以我们要用到包装类把基本数据类型转换成对象!
前面的代码在每次运行的时候,会先将sb转换成stringBuffer对象,然后加上后面的星号,然后生成一个新的sb对象,然后如此循环不断生成新的对象浪费资源。
而后边的那个就不会,只创建一个sb对象,然后就不断的在sb对象后面追加星号。
publicclassTestInteger{
publicstaticvoidmain(String[]args){
/*以下三种办法都是将字符串转换成整数的三种办法!
*/
//intintValue()以int类型返回该Integer的值。
intw=newInteger(args[0]).intValue();
/*staticintparseInt(Strings)
*将字符串参数作为有符号的十进制整数进行解析。
*/
inth=Integer.parseInt(args[1]);
/*staticIntegervalueOf(Strings)
返回保存指定的String的值的Integer对象。
下面那句因为
返回的是Integer对象,所以要用intValue()方法转换成int类型的*/
//inth=Integer.valueOf(args[1]).intValue();
for(inti=0;i{
StringBuffersb=newStringBuffer();
for(intj=0;j{
sb.append("*");
}
System.out.println(sb.toString());
}
}
}
01-05
Vector使用的时候有考虑到线程同步的问题,即使有一个线程,它也会有监视器去监视,所以会出现大的开销!
ArrayList使用时是没有考虑到线程同步的问题的,所以编写程序时要使用这个类就要考虑是否有线程同步的问题了!
就因为这个类没有线程同步问题考虑,所以运行时的效率快些。
Collection接口是Set和List这两个接口的父类。
importjava.io.IOException;
importjava.util.*;
//要使用到Vector和Enumeratrion类,这两个类都在java.until.*的包里
publicclassTestVector{
publicstaticvoidmain(String[]args){
//System.out.println("pleaseenternumber:
");
intb=0;
/*Vector类可以实现可增长的对象数组。
与数组一样,
*它包含可以使用整数索引进行访问的组件。
*但是,Vector的大小可以根据需要增大或缩小,
*以适应创建Vector后进行添加或移除项的操作。
即创建了一个可伸缩的空间!
*/
Vectorv=newVector();
System.out.println("pleaseenternumber:
");
while(true)
{
try{
b=System.in.read();
}catch(IOExceptione){
e.printStackTrace();
}
if(b=='\r'||b=='\n')
break;
else
{
//注意:
输入的数据都是ASICII码表中对应的数字!
所以要减字符0
intnum=b-'0';
/*addElement方法是将指定的组件添加到此向量的末尾,将其大小增加1。
*如果向量的大小比容量大,则增大其容量。
此方法的功能与add(E)
*方法的功能完全相同(后者是List接口的一个方法)因为传入的是组件,
*所以num必须要转换成Integer对象类型!
*/
v.addElement(newInteger(num));
}
}
intsum=0;
/*Enumeration是一个接口,elements()方法是返回此向量的组件的枚举。
*返回的Enumeration对象将生成此向量中的所有项。
*生成的第一项为索引0处的项,然后是索引1处的项,依此类推。
*/
Enumeratione=v.elements();
/*booleanhasMoreElements()测试此枚举是否包含更多的元素。
*测试此枚举是否包含更多的元素。
返回:
当且仅当此枚举对象至少还包含一个可提供的元素时,才返回true;否则返回false。
*/
while(e.hasMoreElements())
{
/*nextElement
EnextElement()如果此枚举对象至少还有一个可提供的元素,则返回此枚举的
下一个元素。
返回:
此枚举的下一个元素。
抛出:
NoSuchElementException-如果没有更多的元素存在。
*/
IntegerintObj=(Integer)e.nextElement();
//intValue():
将传入的对象以int类型的方式传入
sum+=intObj.intValue();
}
System.out.println("sum="+sum);
}
}
importjava.util.*;
publicclassTestSort
{
publicstaticvoidmain(Stringargs[])
/*ArrayList()构造一个初始容量为10的空列表。
*/
ArrayListal=newArrayList();
al.add(newInteger
(1));
al.add(newInteger(4));
al.add(newInteger(3));
/*publicStringtoString()返回此collection的字符串表示形式。
*该字符串表示形式由collection元素的列表组成,
*这些元素按其迭代器返回的顺序排列,并用方括号("[]")括起来。
*相邻元素由字符","(逗号加空格)分隔。
通过String.valueOf(Object)
*可以将元素转换成字符串。
覆盖:
类Object中的toString
返回:
此collection的字符串表示形式*/
System.out.println(al.toString());
/*Collections类中的方法都是静态的
sort(Listlist,Comparator
superT>c)
根据指定比较器产生的顺序对指定列表进行排序。
可以用来排序,但是返回的类型是静态的!
*/
Collections.sort(al);
System.out.println(al.toString());
}
}
上段程序运行结果是:
[1,4,3]
[1,3,4]
01_06
Hashtable类可以起到搜索的作用!
publicclassMyKey
{
privateStringname=null;
privateintage=0;
privateStringsex=null;
publicMyKey(Stringname,intage,Stringsex)//构造函数没有返回类型
{
this.name=name;
this.age=age;
this.sex=sex;
}
publicStringtoString()
{
returnname+","+sex+","+age;
}
/*Object类中的equals(Objectobj)方法
*publicbooleanequals(Objectobj)
指示其他某个对象是否与此对象“相等”。
*/
publicbooleanequals(Objectobj)
{
//instanceof用于比较两个对象是否相同,这里面用的是对象的比较~
if(objinstanceofMyKey)
{
MyKeyobjTem=(MyKey)obj;
if(name.equals(objTem.name)&&age==objTem.age&&sex.equals(objTem.sex))
{
returntrue;
}
else
{
returnfalse;
}
}
else
{
returnfalse;
}
}
}
importjava.util.*;
publicclassHashtableTest{
publicstaticvoidmain(String[]args)
{
Hashtablenumbers=newHashtable();
/*publicVput(Kkey,Vvalue)将指定key映射到此哈希表中的指定value。
键和值都不可以为null。
通过使用与原来的键相同的键调用get方法,可以获取相应的值。
参数:
key-哈希表的键
value-值
返回:
此哈希表中指定键的以前的值;如果不存在该值,则返回null
抛出:
NullPointerException-如果键或值为null*/
numbers.put(newMyKey("zhangsan",18,"boy"),newInteger
(1));
numbers.put(newMyKey("lisi",18,"boy"),newInteger
(2));
numbers.put(newMyKey("wangwu",15,"girl"),newInteger(3));
numbers.put(newMyKey("zhangsan",17,"boy"),newInteger(4));
/*HashTable类中的keys方法
publicEnumerationkeys()返回此哈希表中的键的枚举。
返回:
此哈希表中的键的枚举。
*/
Enumeratione=numbers.keys();
/*Enumeration接口中的hasMoreElements抽象方法
booleanhasMoreElements()测试此枚举是否包含更多的元素。
返回:
当且仅当此枚举对象至少还包含一个可提供的元素时,才返回true;否则返回false。
*/
while(e.hasMoreElements())
{
/*Enumeration接口的nextElement()方