(一)Java API概述
Java API(Java Application Programming Interface,Java应用程序接口),是Java语言提供的组织成包结构的许多类和接
口的集合。Java API为用户编写应用程序提供了极大的便利。Java API包含在JDK中,因此用户只要安装了JDK运行环境就可以
使用该API(在Java中的API就是JDK中提供的各种功能)
Java语言在不断发展,表现在JDK运行环境的版本在不断提高(目前为JDK10,因此读者学习时,可能Java API中又包含了
新的包或某,些包中又增加了新的子包,打开JDK的帮助文档,可以看到Java API的详细说明文档)
Java API包含的内容很多,主要讨论其中两个最基本的包中的主要类:语言包(java.lang)和实用包(java.util)
Java API按照内容分别组织和存放在不同的包中,Java API中的包及其主要功能按字母顺序说明如下:
java.accessibility 接口组件和助手技术的类和接口
java.applet Applet所需的类和接口
java.awt 图形用户界面所需的类和接口
java.beans Java bean所需的类和接口
java.io 系统输入/输出所需的类和接口
java.lang Java语言编程的基础类和接口
java.math 支持任意精度整数和任意精度小数的类和接口
java.naming 访问命名服务的类和接口
java.net 网络应用的类和接口
java.rmi 远程调用(RMI)的类和接口
java.security 用于安全框架的类和接口
java.sql 访问和处理数据源中数据的类和接口
java.text 支持按与语言无关方式处理文本、数据、数字和消息的类和接口
java.util 集合框架、事件模型、日期和时间机制、国际化等的类和接口
javax.rmi 支持RMI-IIOP的类和接口
javax.serverlet 支持serverlet编程的类和接口
javax.sound 支持音频设备数字接口(MIDI)的类和接口
javax.swing 扩充和增强基本图形用户界面功能的类和接口
javax.transaction 包含有几个关于事务上下文异常的类
org.omg.CORBA 支持OMG CORBA API到Java语言映射的类和接口
(二)语言包(java.lang)
java.lang包是Java语言的核心类库,包含了Java语言必不可少的系统类定义,如Object类、基本数据类型包装类、Math数
学类、Comparable接口、String和StringBuffered类、System和Runtime类、Class类操作类、Error错误类和Exception异常类、
Thread线程类和Runnable接口
java.lang包是Java语言编程使用最频繁的包(包含Java程序设计语言最基础的类),为了简化编程,系统固定地默认
导入了java.lang包,使用java.lang包中的时可以不用import语句导入
1、Object类
Object类是Java中所有类的根,所有其他的类都是由Object类派生出来的,因此根据继承的特点,在Object类中定义的成
员变量和方法,在其他类中都可以使用,部分方法声明如下:
public class Object{ //提供类的基本方法
public Object() //构造方法
public String toString() //返回当前对象的信息字符串( 把对象转换为字符串)
public boolean equals(Object obj) //比较当前对象与obj是否相等
public void finalize() throws Throwable //析构方法
public fina Clas<?> getClass() //返回当前对象所属的类的Class对象(获取对象的运行时类)
}
PS:equals(Object obj)方法与Java运算符"=="的含义相同,但用法不同。当两个值比较、对象或变量与值比较、两个变
量比较时,使用运算符"==";当比较两个对象时,使用equals()方法,该方法调用返回true时表示两个对象相等(或称相同),返
回false时表示两个对象不相等
public static void main(String[] args) {
// TODO Auto-generated method stub
char ch = 'A';
if ((ch == 'A') || (ch == 'a'))// 变量与值比较
System.out.println("true");
String str1 = "abc", str2 = null;
if (str1 != null) {// 对象与值比较
System.out.println(str1.equals(str2));// 两个对象比较
}
}
2、Math数学类
Math类包含了一组基本的数学运算的方法和常数,如求绝对值的abs()方法,计算三角函数的sin()方法和cos()方法,求两
个数中的较小值和较大值的min()方法和max()方法,求随机数的random()方法等
Math类是最终类(final),不能从Math类中派生其他的新类,不能被继承,其中方法都是静态最终方法,通过类名调
用,如Math.abs(),另外Math类还把E和PI定义为类的静态成员变量,其中E和PI代表数学上的相应常数
Math类的几个常用方法如下:
public final class Math extends Object //数学类,最终类
{
public static final double E=2.7182818; //静态常量e
public static final double PI=3.1415926; //静态常量π
public static double abs(double a); //返回a的绝对值,有重载方法
public static double random(); //返回一个0.0~1.0之间的随机数
public static doule sin(double a); //返回a的正弦值
}
(1)abs()方法有4个(重载方法),包括了4种基本的数值类型(double,float,int,long),其他方法类同
(2)random()方法是非常有用的方法,把random()的返回值乘上一个整数,可以得到任意区间的、double类型的随机
数;把random()的返回值乘上一个整数再转换成int类型,可以得到任意区间的、int类型的随机数
public static void main(String[] args) {
// TODO Auto-generated method stub
int i;
int[] a = new int[10];
for (i = 0; i < a.length; i++) {
a[i] = (int) (Math.random() * 100);// 产生随机数并赋值
}
for (i = 0; i < a.length; i++)
System.out.print(" " + a[i]);// 输出一维数组
int min = a[0];
for (i = 1; i < a.length; i++)
if (a[i] < min)
min = a[i]; // 寻找最小数
System.out.println("\n最小数为:" + min);
}
}
3、Comparable可比较接口(内比较器)
Java通过Comparable接口的compareTo方法约定两个对象比较大小的规则,Comparable接口声明如下:
public interface Comparable<T>{
public abstract int compareTo(T obj);
}
4、基本数据类型包装类
Java为每种数据类型声明了一个对应的类,称为基本数据类型的包装类,Java语言中的8种基本数据类型是:byte、
short、int、long、float、double、char和boolean,对应的8个数据类型包装类是:Byte、 Short、Integer、Long、Float、
Double、Character和Boolean
(1)Integer整数类
Integer是in类型的包装类,声明如下,使用的是一个私有最终变量存储int整数值
public final class Integer extends Number implements Comparable<Integer>
{
public static final int MIN_VALUE=0x8000000; //最小值常量
public static final double PI=0x7ffffffff; //最大值常量
public Integer(int value){ //构造方法
this.value=value;
}
public int intValue(); // 返回对象的int数据类型的数值,小数部分丢掉
public static int parseInt(String s) throws NumberFormatException //将串s按十进制转换为整数
public int compareTo(Integer iobj) //比较两个对象值大侠你,返回-1、0或1
}
注意:Integer类的静态方法parseInt()和实例方法intValue()都可以将一个字符串转化为int值,调用语句如下:
int i=Integer.parseInt("123");
int j=new Integer("123").intValue();
(2)Double浮点数类(和Integer相似)
public final class Double extends Number implements Comparable<Double>
{
public Double(double value) //构造方法
public Double(String s) throws NumberFormatException
public static double parseDouble(String s) throws NumberFormatException //将串s转换为浮点数
public double doubleValue(); //返回当前对象中浮点数的值
}
5、String字符串类
定义字符串变量所使用的String不是一个基本数据类型,而是Java API中提供的类,String是常量字符串类,String对象存
储常量字符串,实例一旦创建,就不能再修改(代表不可变的字符串序列)
public final class String implements java.io.Serializable,Comparable<String>
{
public String() //构造方法
public boolean isEmpty() //判断是否为空串
public String toLowerCase() //返回小写字符串
public Stirng toUpperCase() //返回大写字符串
public int length() //获取字符串的长度
public String substring(int beginIndex) 返回当前字符串的由beginIndex开始到结尾的子串(求字串)
public String substring(int beginIndex,int endIndex) 返回当前字符串的由beginIndex开始到endIndex结尾的子串
}
public static void main(String[] args) {
//连接、求字串等String运算将创建另一个String实例(具有线程访问的安全特性)
System.out.println("abc");
String cde = "cde";
System.out.println("abc" + cde);// 字符串的连接
String d = cde.substring(1, 2);// 求字串
System.out.println(d);
}
}
charAt(int index)
返回在index位置出的字符
endsWith(
String suffix)
判断字符串是否是以该字符串结束
startsWith(
String prefix)
判断该字符串是否是以该字符串开始
equalsIgnoreCase(
String anotherString)
将此 String
与另一个 String
比较,不考虑大小写。
indexOf(int ch, int fromIndex)
返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
replace(char oldChar, char newChar)
返回一个新的字符串,它是通过用 newChar
替换此字符串中出现的所有 oldChar
得到的。
substring(int beginIndex)
返回一个新的字符串,它是此字符串的一个子字符串。
trim()
返回字符串的副本,忽略前导空白和尾部空白。
toLowerCase(
Locale locale)
使用给定 Locale
的规则将此 String
中的所有字符都转换为小写。
toUpperCase()
使用默认语言环境的规则将此 String
中的所有字符都转换为大写。
split(
String regex)
根据给定正则表达式的匹配拆分此字符串
6、StringBuffered字符串缓冲区类
StringBuffered字符串缓冲区类采用缓冲区存储可变长的字符串,可以改变字符串对象中的指定字符,可以插入或删除
字串,当缓冲区容量不能满足要求时,将自动扩充容量适用于经常可变的一个字符序列,效率比String高,允许字符串追加在后
面也允许删除某个字符串(代表可变的字符串序列)
public static void main(String[] args) {
// 允许字符串追加在后面也允许删除某个字符串
StringBuffer str = new StringBuffer("hello");
str.append("hzx");
System.out.println(str);
}
}
7、StringBuilder类
8、Class类操作类
Class类提供一组方法获得当前类信息,包括类名、父类及类所在包等,以及对类操作的通用方法,Class类的实例代表
一个正在运行的Java应用程序的类或接口,Java的基本数据类型(boolean,byte,char,shart,int,long,float,double)以
及数组和关键字void都是由Class对象来表达,Class类没有公共的构造方法,Class对象由Java虚拟机自动构造
Class类常用方法:
String static getName() //返回对象的类名
class static forName(String ClassName) //使用ClassName指定的、与类或接口相联系的class对象
class static forName(String name,boolean initialize,ClassLoader loader) // 使用loader指定的类装载器Class类
的forName()方法可用于安装驱动序,Class.forName("sun.jdbc.odbc.JdbcOdcDriver");
public static void main(String args[]) {
// 对象名.getClass()
Person p = new Person("zhangsan", 50);
Class<?> class1 = p.getClass();// 类型的实例class1(通过类的对象调用getCLass方法)
System.out.println(class1.getName());// 输出类名
System.out.println(class1.getSuperclass().getName());// 输出超类名
// 类名.class
Class<?> class2 = Person.class;// 创建一个 Class 类型的实例class2(通过类名.class)
System.out.println(class2.getName());
System.out.println(class2.getSuperclass().getName());
// 使用Class.forName();
try {
Class<?> class3 = Class.forName("classtype.Person");// //创建一个 Class
// 类型的实例class3(通过Class调用静态方法forName())
System.out.println(class3.getName());
System.out.println(class3.getSuperclass().getName());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
9、System系统类
System类提供标准输入输出常量和访问系统资源的方法,其中声明3个标准输入/输出常量:in、out、和err,方法都是静态的,System类部分声明如下:
public final class System extends Object
{
public static final int InputStream in=nullInputStream; //标准输入常量
public static final int OutputStream out=nullOutputStream; //标准输出常量
public static final int PrintStream err=nullPrintStream; //标准错误输出常量
public static void exit(int status) //结束当前程序运行(中断当前运行的Java虚拟机,status为状态码,非0的状态码表示不正常中断)
public static long currentTimeMills() //获得当前日期和时间
public static Properties getProperties() //获得当前系统全部属性
public static String getProperty(String key) //获得指定系统属性
public static String setProperty(Properties props) //设置props指定的属性
public static void load(String fileName) //加载本地文件系统中由文件名fileName指定的动态库
}
其中Properties是java语言包中定义的一个类,该类定义了系统属性集合,每个属性用字符串表示,其常用的几个属性值以及含义如下:
public static void main(String args[]) {
// java运行时环境版本
String str1 = System.getProperty("java.version");
System.out.println(str1);
// java虚拟机实现的版本
String str2 = System.getProperty("java.vm.version");
System.out.println(str2);
// java类的路径
String str3 = System.getProperty("java.class.path");
System.out.println(str3);
// 操作系统版本
String str4 = System.getProperty("os.version");
System.out.println(str4);
// 用户名
String str5 = System.getProperty("user.name");
System.out.println(str5);
// 用户路径
String str6 = System.getProperty("user.dir");
System.out.println(str6);
// 用户HOME路径
String str7 = System.getProperty("user.home");
System.out.println(str7);
10、Runtime运行类
每一个Java应用程序都有一个Runtime类的实例,从而允许应用程序与其运行的环境进行交互,利用Runtime类直接访问运行时环境资源
public class Runtime extends Objec0t
{
public static Runtime getRuntime() //返回与当前程序相联系的Runtime实例
public long totalMemory() //返回系统内存空间总量
public long freeMemory //返回系统内存剩余空间大小
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Runtime rtime = Runtime.getRuntime();
long totalMemory = rtime.totalMemory() / 1024;
long freeMemory = rtime.freeMemory() / 1024;
System.out.println("totalMemory: " + totalMemory + "k");
System.out.println("freeMemory: " + freeMemory + "k");
}
三、实用包(java.util)
java.util实用包提供了实现各种功能的类,主要包含日期类(日期和时间机制)、数组类、集合类(集合框架)、事件
模型、国际化等的类和接口
1、日期类(Data 类和Calendar类 )
1)Data 类提供了获取当前精确到毫秒时间的方法,并提供了许多方法截取当前时间的年、月、日等数值。
Data 类的构造方法有:
Data () //构造方法,获得系统当前日期和时间
Data (long date) //以长整数创建一个可精确到毫秒的参数date指定时间的对象,date表示从GMT(格林威治)时
间1970-1-1 00:00:00开始至某时刻的毫秒数
public static void main(String[] args) {
// TODO Auto-generated method stub
Date date=new Date();
// long dL = 12345678l;
// Date date = new Date(dL);
System.out.println(date);
}
2)Calendar类定义了许多如YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、DAY_OF_WEEK等成员变量,Calendar类的get()方法可以获取这些成员变量的数值
public static void main(String[] args) {
// 分项输出显示当前时间
Calendar now = Calendar.getInstance(); // 获得当前时间
int year = now.get(Calendar.YEAR); // 年份
int month = now.get(Calendar.MONTH) + 1; // 月份
int day = now.get(Calendar.DATE); // 日期
System.out.print(year + "年" + month + "月" + day + "日 ");
int hour = now.get(Calendar.HOUR); // 时
int minute = now.get(Calendar.MINUTE); // 分
int second = now.get(Calendar.SECOND); // 秒
System.out.print(hour + "时" + minute + "分" + second + "秒 ");
int week = now.get(Calendar.DAY_OF_WEEK); // 星期1~7
String str = "日一二三四五六";
int i = 2 * (week - 1); // 对应中文的下标
System.out.println("星期" + str.substring(i, i + 2));
}
}
2、Comparator比较器接口(外比较器)
java.lang.Comparable接口约定两个对象比较大小的规则, 一个类如果还需要其他比较对象大小的规则,可使用
java.util.Comparator比较器接口,Comparator接口声明如下:
public interface Comparator<T>{
public abstract boolean equals(Object obj);
public abstract int compare(T cobj1,T cobj2);
}
PS:有两种情况可以使用实现Comparator接口的方式:
(1)一个对象不支持自己和自己比较(没有实现Comparable接口),但是又想对两个对象进行比较
(2)一个对象实现了Comparable接口,但是开发者认为compareTo方法中的比较方式并不是自己想要的那种比较方式
3、Array数组类
Arrays类中包含有数组操作的一些常用方法(填充、比较、排序和查找),所有方法都是静态方法,大大简化程序设计人员的设计过程
1)排序
static void sort(byte[] a) :把byte类型的数组a中的元素按升序排序
static void sort(byte[] a,int fromIndex,int toIndex) :把byte类型的数组a中的、从fromIndex到toIndex的元素按升序排序
static void sort(int[] a) : 把int类型的数组a中的元素按升序排序
static void sort(int[] a,int fromIndex,int toIndex) :把int类型的数组a中的、从fromIndex到toIndex的元素按升序排序
static void sort(double[] a) :把double类型的数组a中的元素按升序排序
static void sort(double[] a,int fromIndex,int toIndex):把double类型的数组a中的、从fromIndex到toIndex的元素按升序排序
2)二分法查找
static int binarySearch(byte[] a,byte key) :在byte类型的数组a 中、使用折半查找算法查找指定元素key是否存在,若存在返回该元素的数组下标;若不存在返回-1
static int binarySearch(int[] a,int key) :在int类型的数组a 中、使用折半查找算法查找指定元素key是否存在,若存在返回该元素的数组下标;若不存在返回-1
static int binarySearch(double[] a,double key) :在double类型的数组a 中、使用折半查找算法查找指定元素key是否存在,若存在返回该元素的数组下标;若不存在返回-1
4、Enumeration接口
Enumeration接口主要用于集合类对象的序列化。一个集合类对象中包含有许多元素,所谓对象是序列化的,就是说可以依次取出该对象中的元素。
Enumeration接口定义如下:
public interface Enumeration
{
Object nextElement(); //返回后续元素
boolean hasMoreElements(); //判断是否还有后续元素
}
任何一个类,只要实现了Enumeration接口,其对象就是序列化的。所谓对象是序列化的,就是说若连续调用nextElement()方法,每次将返回该集合对象当前元素的后续元素。
例如,Vector类是一个集合类,Vector类就实现了Enumeration接口。因此,若要输出一个Vector类的对象v中的所有元素,就可以编写如下代码:
Enumeration e = v.elements();
while (e.hasMoreElements())
{
System.out.println(e.nextElement());
}
四、Java API总结
1、生成随机数的方法
1)Math类
Math.random() ,返回带正号的double值,该值大于等于0.0且小于1.0(懂得灵活转换成获取其他数字的函数)
2) java.util.Random包下
New Random.nextInt(int n),返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包
括)之间均匀分布的int值
2、String、StringBuffer和StringBuilder的比较
1)String 字符串常量(对象不可变,线程安全) private final char value[];
2) StringBuffer 字符串变量(线程安全)
3)StringBuilder 字符串变量(非线程安全)char[] value;
如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer,在大部分情况下 StringBuilder > StringBuffer> String
3、Comparator 和 Comparable 的区别
相同点:都是java的一个接口,并且是用来对自定义的class比较大小的;
不同点:
(1)Comparable:Comparable 定义在 Person类的内部
public class Persion implements Comparable {..比较Person的大小..},
因为已经实现了比较器,那么我们的Person现在是一个可以比较大小的对象,它的比较功能和String完全一样,可以随时
随地的拿来比较大小,因为Person现在自身就是有大小之分的。Collections.sort(personList)可以得到正确的结果。
(2)Comparator:Comparator 是定义在Person的外部的,此时我们的Person类的结构不需要有任何变化,如
public class Person{ String name; int age }
然后我们另外定义一个比较器:
public PersonComparator implements Comparator() {..比较Person的大小..},
在PersonComparator里面实现了怎么比较两个Person的大小,所以用这种方法,当我们要对一个 personList进行
序的时候, 我们除了了要传递personList过去,还需要把PersonComparator传递过去,因为怎么比较Person的大小是在
PersonComparator里面实现的, 如Collections.sort( personList , new PersonComparator() ).