1、Java API 介绍
Java API (Java Application Programming Interface)即Java应用程序编程接口,它是运行库的集合,预先定义了一些接口和类,程序员可以直接使用这些已经被打包的接口和类来做具体的应用,节约了程序员大量的时间和精力。API 除了有“应用程序编程接口”的意思外,还特指API 的说明文档,也称帮助文档。
Java语言的强大之处在于他提供了多种多样的类库,从而大大提高了程序编程效率和质量。
Java API 提供了如下常用的包:
java.lang:编写Java程序时最广泛使用的包,自动导入到所有的程序中,包含了Java程序的基础类和接口。包装类、Math类、String类等常用的类都包含在此包中,java.lang包还提供了用于管理类的动态加载、外部进程创建、主机环境查询和安全策略实施等“系统操作”的类。
java.util:包含一系列辅助类,特别是Collection、List和Map等集合类。
java.io:包含了与输入,输出有关的类,如文件操作等类。
java.net :包含了与网络有关的类,如Socket,ServerSocket等类。
java.sql:包含了与数据库相关的类,如Connection、Statement等类。
2、枚举
从 Java5.0 开始,Java程序设计语言引入了一种新的类型--枚举(Enum)。
枚举是由一组固定的常量组成的类型。使用关键字enum定义。
枚举的定义语法:
[Modifier] enum enumName(){
enumContantName1[, enumContantName2 ]
//[ field,method ]
}
// Modifier是访问修饰符,如public
// enum是关键字
// enumContantName1[, enumContantName2 ] 表示枚举常量列表,枚举常量之间以逗号隔开。
// [ field,method ] 表示其他的成员,包括构造方法,置于枚举常量的后面。
// 在枚举中,如果除了定义全局常量,还定义了其他成员,则枚举常量列表必须以分号(;)结尾。
例:
public class EnumTest {
public static void main(String[] args) {
new EnumTest().doWhat(Week.SUN);
}
public enum Week {
MON, TUE, WED, THU, FRI, SAT, SUN
}
public void doWhat(Week day) {
switch (day) {
case MON:
case TUE:
case WED:
case THU:
case FRI:
System.out.println("工作日:工作!");
break;
case SAT:
System.out.println("周六:休息!");
break;
case SUN:
System.out.println("周日:陪女朋友逛街!");
break;
default:
System.out.println("错误!");
}
}
}
上述代码中,switch结构传入的变量day是Week类型,即枚举类型,case后面的常量类型要与之对应,必须是Week中定义的枚举常量。
a、枚举可以使代码更易于维护,有助 于确保为变量指定合法的。期望的值。
b、枚举更易于输入,使用枚举赋值,只需要输入枚举名,然后输入一个点(.),就能将所有的值显示出来。
c、枚举使代码更清晰,允许描述性的名称表示数据,使用时直观方便。
3、包装类
Java语言是面向对象的,但是Java中的基本数据类型却不是面向对象的,这在实际开发中,存在很多的不方便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类,称为包装类。
包装类均位于java.lang包中,包装类和基本数据类型的对应关系如下:
基本数据类型 | 包装类 |
byte | Byte |
boolean | Boolean |
char | Character |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
包装类的用途:
a、包装类作为和基本数据类型对应的类类型存在,方便对象的操作。
b、包装类包含每种基本数据类型的相关属性,如最大值,最小值等,以及相关的操作方法。
①基本数据类型——>>包装类
a、使用包装类的构造方法
public Type (Value)
public Type (String Value)
其中Type表示包装类,参数Value为基本数据类型。
Integer i=new Integer(611);
Integer i2=new Integer("611");
注意:不能使用第二种形式的构造方法创建Character类型的包装类对象。
只能是Character charValue=new Character(‘Z’);这种形式。
b、使用包装类的valueOf()方法
包装类中一般包含静态的重载的valueOf()方法,它可以接受基本数据类型的数据和字符串作为参数并返回包装类的对象。
以Integer包装类为例,valueOf()方法定义如下:
返回值 | 方法 | 说明 |
Integer | valueOf(int i) | 返回一个表示指定的int值的Integer对象 |
Integer | valueOf(String s) | 返回保存指定的String的值的Integer对象 |
Integer | valueOf(String s,int radix) | 返回一个Integer对象,该对象中保存了用第二个参数提供的基数进行解析时从指定的注意string中提取的值。 |
注意:Character类的valueOf()方法只有一个版本的定义,即valueOf(char c),它返回一个表示指定char值的Character对象。
②包装类——>>基本数据类型
public Type typeValue();
其中Type指的是基本数据类型。
如byteValue(),charValue()等,相应的返回值则为byte,char。
③基本数据类型和包装类的自动转换
在Java SE5.0版本之后,程序员不需要编码实现基本数据类型和包装类之间的转换,,编译器会自动完成。
Integer i3=8;//基本数据类型转换为包装类
int value=i3;//包装类转换为基本数据类型
虽然Java平台提供了基本数据类型和包装类的自动转换功能,程序员在程序中也不能只使用对象,而抛弃了基本数据类型。
例如以下代码:
Double a,b,c;
a=3.0;
b=4.0;
c=Math.sqrt(a*a+b*b);
在语法上是没有错误的,但是,基本数据类型和包装类对象之间相互转换会增加系统的额外负担。
包装类对象只有在基本数据类型需要用对象表示时才使用,并不是用来取代基本数据类型的!
4、String
Java中,字符串被作为String类型的对象来处理。java.lang.String
常用方法:
字符串.length();返回字符串的长度
字符串.equals();比较两个字符串的值是否相同
字符串.equalsIgnoreCase();忽略大小写比较两个字符串的值是否相同
字符串.toLowerCase();转换字符串转换的英文字符为小写(先转换再比较(equals())同样可以做到忽略大小写比较)
字符串.toUpperCase();转换字符串转换的英文字符为小写
字符串.concat(字符串2);连接两个字符串
常用提取和搜索字符串方法:
public int indexOf(int ch);搜索第一个出现的字符
public int indexOf(String value);搜索第一个出现的字符串
public int lastIndexOf(int ch);搜索最后一个出现的字符
public int lastIndexOf(String value);搜索最后一个出现的字符串
public String substring(int index);提取从index索引位置开始到末尾的字符串
public String substring(int beginIndex,int endIndex);提取从beginIndex索引位置开始到endIndex索引处结束的字符串(不包含beginIndex位置包含endIndex位置)
public String trim();返回一个前后不含空格的字符串
字符串拆分方法:
字符串名.split(String separator,int limit);
separator表示可选项,标志拆分字符串采用一个或者多个字符。如果不选择该项,则返回包含该字符串所有单个字符的元素数组。(对于分割的多个字符,需要用英文状态下的中括号[]包含)
limit可选项,该值用来限制返回数组中的元素个数。
String str = "123,456,789 123.456。789";
// 以逗号作为分隔符
String[] str2 = str.split(",");
for (String string : str2) {
System.out.println(string);
}
System.out.println();
// 以逗号,英文句号,句号作为分隔符
String[] str3 = str.split("[,.。]");
for (String string : str3) {
System.out.println(string);
}
System.out.println();
// 以逗号,英文句号,空格,句号作为分隔符
String[] str4 = str.split("[,. 。]");
for (String string : str4) {
System.out.println(string);
}
输出结果:
123
456
789 123.456。789
123
456
789 123
456
789
123
456
789
123
456
789
链接:字符串相关类
5、StringBuffer类StringBuilder类
除了使用String类存储字符串之外,还可以使用StringBuffer类来存储字符串。StringBuffer类也是Java提供的用来处理字符串的一个类,而且它是比String类更高效地存储字符串的一种引用类型。特别是对字符串进行连接操作时。使用StringBuffer类可以大大提高程序的执行效率。
a、使用StringBuffer
StringBuffer str = new StringBuffer("I love you!");
b、常用方法:
字符串.toString();转换为String类型
字符串.append(字符串2);将字符串2连接到字符串之后
△△△与String类的concat()方法类似,不同的是,String类中的方法是在后面加String类型的字符串,而StringBuffer中的方法可以在后面加任何类型的数据。
字符串.insert(int index,参数);将参数插入指定位置后并返回。参数可以是包括String的任何类型。
StringBuffer | delete(int start, int end) 移除此序列的子字符串中的字符。 |
StringBuffer |
|
void | setCharAt(int index, char ch) 将给定索引处的字符设置为 ch 。 |
习题:1234567890————>>> 1,234,567,890
使用StringBuilder是JDK 5.0 版本新增的类,它是一个可变的字符序列。在大多实现中,它比StringBuffer要快。使用StringBuilder类处理字符串的方法与StringBuffer类基本一样。
String类,StringBuffer类及StringBuilder类对比:
a、String类:字符串常量
String是不可变的对象,在每次对String类型进行改变的时候其实都等同于生成了一个新的String对象,然后指向新的String对象,所以经常改变内容的字符串最好不要用String类型,因为每次生成对象都会对系统性能产生影响。
b、StringBuffer类:字符串变量
StringBuffer是可变的字符串,在每次对StringBuffer对象进行改变时,会对StringBuffer对象本身进行操作,而不是生成新的对象,再改变对象引用。所以,在字符串对象经常改变的情况下推荐使用StringBuffer类。
字符串连接操作中,StringBuffer类的效率要比String高,例如:
public class Test {
public static void main(String[] args) {
String str="Welcome to ";
str+="China";
System.out.println(str);
}
}
使用String类型操作字符串时,其处理步骤实际上是通过建立一个StringBuffer,让它调用append()方法,最后再转化为String,这样的话,String的连接操作比StringBuffer多出了一些附加操作,当然效率要低。并且由于String对象的不可变也会影响性能。
c、StringBuilder:字符串变量
JDK 5.0 版本以后提供了StringBuilder类,它和StringBuffer类同阶,区别在于StringBuffer类是线程安全的,StringBuilder类是单线程的,不提供同步,理论上效率更高。
6、日期时间类
java.util包也是Java内置的一个工具包,它包含了集合框架,日期和时间,随机函数生成器等各种实用工具类。java.util包不会默认导入,如果要使用该包中的类,则必须在程序的开始部分进行导入。
java.util包中提供的和日期时间有关的类:Date类,Calendar类,SimpleDateFormat类等。
Date类对象用来表示日期和时间,该类提供了一系列操作日期和时间各组成部分的方法。Date类使用最多的是获取系统当前的日期和时间,如:Date date = new Date();这句代码是使用系统当前时间创建日期对象。
Calendar类也是用来操作日期和时间的类,它可以看作是Date类的一个增强版。Calendar类提供了一组方法,允许把一个以毫秒为单位的时间转换成年月日时分秒。可以把Calendar当做是一个万年历,默认显示的是当前的时间,当然也可以查看其它时间。
Calendar类是抽象类,可以通过静态方法getInstance() 获得Calendar的对象,其实这个获得的对象是它的子类的对象。
另外常用的还有格式化日期时间的类——DateFormat类,它在java.text包下,是一个抽象类,提供了多种格式化和解析时间的方法。格式化是将日期转换成文本,解析是指文本转换成日期格式。使用比较多的是它的子类SimpleDateFormat,SimpleDateFormat类是一个以与环境有关的方式来格式化和解析日期的具体类,如:“yyyy-MM-dd HH:mm:ss”就是指定的一种日期和时间模式。