Java API(常用类)

(一)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{

                         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是int类型的包装类,声明如下,使用的是一个私有最终变量存储int整数值

                     public final class Integer extends Number implements Comparable  

                      {

                            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  

                      {

                            public Double(double value)      //构造方法

                            public Double(String s) throws NumberFormatException

                            public static double parseDouble(String s) throws  NumberFormatException    //将串s转换为浮点数

                            public double doubleValue();  //返回当前对象中浮点数的值

                        }    

     (3)基本类型和字符串之间的转换:

          1、基本类型转换为字符串: (1)使用包装类的 toString() 方法、(2)使用String类的 valueOf() 方法、(3)用一个空

字符串加上基本类型,得到的就是基本类型数据对应的字符串

          2、字符串转换为基本类型:(1)调用包装类的 parseXxx 静态方法、(2)调用包装类的 valueOf() 方法转换为基本类型

的包装类,会自动拆箱

 

5、String字符串类

            定义字符串变量所使用的String不是一个基本数据类型,而是Java API中提供的类,String是常量字符串类,String对象存

储常量字符串,实例一旦创建,就不能再修改(代表不可变的字符串序列

            (1)字符串 str 中字符的索引从0开始,范围为 0 到 str.length()-1

            (2)用 indexOf 进行字符或字符串查找时,如果匹配返回位置索引;如果没有匹配结果,返回 -1

            (3)使用 substring(beginIndex , endIndex) 进行字符串截取时,包括 beginIndex 位置的字符,不包括 endIndex 位置的字符

                 public final class String  implements java.io.Serializable,Comparable  

                      {

                            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结尾的子串

                        }    

           Java API(常用类)_第1张图片

public static void main(String[] args) {
        // Java文件名
		String fileName = "HelloWorld.java";
		// 邮箱
		String email = "[email protected]";

		// 判断.java文件名是否正确:合法的文件名应该以.java
		// 获取文件名中最后一次出现"."号的位置
		int index = fileName.indexOf(".");
		System.out.println(index);
		// 获取文件的后缀
		String prefix = fileName.substring(index + 1);
		System.out.println(prefix);

		// 判断必须包含"."号,且不能出现在首位,同时后缀名为"java"
		if (index != 0 && index != -1 && prefix.equals("java")) {
			System.out.println("Java文件名正确");
		} else {
			System.out.println("Java文件名无效");
		}

}

PS:

         (1)length属性:用于获取数组长度。

         (2)length():方法用于获取字符串长度。

         (3)size()方法:用于获取泛型集合有多少个元素。

6、StringBuffere字符串缓冲区类

           StringBuffere字符串缓冲区类采用缓冲区存储可变长的字符串,可以改变字符串对象中的指定字符,可以插入或删除

字串,当缓冲区容量不能满足要求时,将自动扩充容量适用于经常可变的一个字符序列,效率比String高,允许字符串追加在后

面也允许删除某个字符串(代表可变的字符串序列    

public static void main(String[] args) {

        // 允许字符串追加在后面也允许删除某个字符串

        StringBuffer str = new StringBuffer("hello");
        str.append("hzx");
        System.out.println(str);

    }
}

7、StringBuilder类(线程不安全,用法和StringBuffer一样)

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、日期类(Date 类和Calendar类 )

        1)Date 类提供了获取当前精确到毫秒时间的方法,并提供了许多方法截取当前时间的年、月、日等数值。

              Date 类的构造方法有:

                    Date ()    //构造方法,获得系统当前日期和时间(显示并不友好,需通过SimpleDateFormat规范显示

                    Date (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对象
	Calendar c = Calendar.getInstance();
        
	// 将Calendar对象转换为Date对象
	Date date = c.getTime();
        
	// 创建SimpleDateFormat对象,指定目标格式
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        
	// 将日期转换为指定格式的字符串
	String now = sdf.format(date);
      System.out.println("当前时间:" + now);

}

2、Comparator比较器接口(外比较器

             java.lang.Comparable接口约定两个对象比较大小的规则 一个类如果还需要其他比较对象大小的规则,可使用

java.util.Comparator比较器接口,Comparator接口声明如下:

                  public interface Comparator{

                          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;

           PS:如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer,在大部分情况下 StringBuilder >

StringBuffer> String

      3、Comparator 和 Comparable 的区别

           相同点:都是java的一个接口,并且是用来对自定义的class比较大小的

           不同点:

          (1)ComparableComparable 定义在 Person类的内部

                            public class Persion implements Comparable {..比较Person的大小..},

            因为已经实现了比较器,那么我们的Person现在是一个可以比较大小的对象,它的比较功能和String完全一样,可以随时

随地的拿来比较大小,因为Person现在自身就是有大小之分的。Collections.sort(personList)可以得到正确的结果。

            (2)ComparatorComparator 是定义在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() ).

 

你可能感兴趣的:(Java)