Java类库以及它的基本组织结构

Java 类库概念: Java 的应用程序编程接口 (API  (Application Programming Interface) )以包的形式来组织,每个包提供了大量的相关类、接口和异常处理类,这些包的集合就是 Java 的类库

例如我编写了一个类,可以获取计算机的各种硬件信息,它很强大很稳定,如果你的项目也需要这样一个功能,那么你就无需再自己编写代码,将我的类拿来直接用就可以。但是,我的类代码很复杂,让你读完这些代码不太现实,而且我也不希望你看到我的代码(你也没必要也不希望读懂这些晦涩的代码),我要保护我的版权,怎么办呢?

 我可以先将我的类编译,并附带一个文档,告诉你我的类怎么使用,有哪些方法和属性,你只需要按照文档的说明来调用就完全没问题,既节省了你阅读代码的时间,也保护了我的版权。

例如,获取CPU信息的方法:getCpuInfo(int cpuType);这就是一个API。也就是说,该文档中描述的类的使用方法,就叫做API。

我也可以开发一个软件,用来清理计算机中的垃圾文件,我比较有公益心,希望让更多的开发人员使用我的软件,我就会在发布软件的同时附带一个说明文档,告诉你怎样在自己的程序中调用,这也叫做API。

看API方式

  1. 先看包名
  2. 再看类(j继承关系,类声明)
  3. 看类中方法(方法名,参数,返回类型,修饰符)

目录结构

Java类库中有很多包:

·以 java.* 开头的是Java的核心包,所有程序都会使用这些包中的类;

·以javax.* 开头的是扩展包,x 是 extension 的意思,也就是扩展。虽然 javax.* 是对java.* 的优化和扩展,但是由于 javax.* 使用的越来越多,很多程序都依赖于 javax.*,所以 javax.* 也是核心的一部分了,也随JDK 一起发布。

·以 org.* 开头的是各个机构或组织发布的包,因为这些组织很有影响力,它们的代码质量很高,所以也将它们开发的部分常用的类随JDK一起发布。

在包的命名方面,为了防止重名,有一个惯例:大家都以自己域名的倒写形式作为开头来为自己开发的包命名,例如百度发布的包会以com.baidu.* 开头,w3c组织发布的包会以org.w3c.* 开头,微学苑发布的包会以 net.weixueyuan.* 开头……

组织机构的域名后缀一般为org,公司的域名后缀一般为 com,可以认为org.* 开头的包为非盈利组织机构发布的包,它们一般是开源的,可以免费使用在自己的产品中,不用考虑侵权问题,而以com.* 开头的包往往由盈利性的公司发布,可能会有版权问题,使用时要注意。

java中常用的几个包介绍:

包名 说明
java.lang 该包提供了Java编程的基础类,例如Object、Math、String、StringBuffer、System、Thread等,不使用该包就很难编写Java代码了。
 java.applet Applet 是一种 Java 程序。它一般运行在支持 Java 的 Web 浏览器内。因为它有完整的 Java API支持,所以Applet 是一个全功能的 Java 应用程序。
java.util 该包提供了包含集合框架、遗留的集合类、事件模型、日期和时间实施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。
java.io 该包通过文件系统、数据流和序列化提供系统的输入与输出。
java.net 该包提供实现网络应用与开发的类。
java.sql 该包提供了使用Java语言访问并处理存储在数据源(通常是一个关系型数据库)中的数据API。
java.awt 这两个包提供了GUI设计与开发的类。java.awt包提供了创建界面和绘制图形图像的所有类,而javax.swing包提供了一组“轻量级”的组件,尽量让这些组件在所有平台上的工作方式相同。 
javax.swing
java.text 提供了与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。

 其他还有

10.   java.beans     开发 Java Beans 需要的所有类

11.   java.math      简明的整数算术以及十进制算术的基本函数

12.   java.rmi       与远程方法调用相关的所有类

13.   java.security    设计网络安全方案需要的一些类

常用的 Java 扩展包 (Java Extension Package)

1.  javax.accessibility  定义了用户界面组件之间相互访问的一种机制

2.  javax.naming.*     为命名服务提供了一系列类和接口

3.  javax.swing.*       提供了一系列轻量级的用户界面组件,是目前 Java 用户界面常用的包

注 1:在使用 Java 时,除了 java.lang 外,其他的包都需要 import 语句引入之后才能使用。

重点讲解内容:java.lang和java.util。

java.lang 包

这个包称为 java 语言包,是由编译器自动引入的。程序中不必用 import 语句就可以使用。它所包含的类和接口对所有实际的 Java 程序都是必要的。

1.       object 类

2.       数学类 (Math)

3.       数据类型类

4.       线程类

5.       字符串类 (String 类和 StringBuffer 类 )

6.       系统及运行类 (System 类和 Runtime 类 )

7.       错误和异常处理类 (Throwable 、 Exception 、 Error)

8.       过程类 (process)

java.util 包

1. 日期类、日历类( Data 、 Calendar 、 GregorianCalendar )

2. 随机数类( Random )

3. 位运算类( BitSet )

4. 矢量类( Vector )

5. 数据结构类( Stack )

6. 散列表类( Hashtable )

7. StringTokenizer类

 

下面简单说明一下java.lang包下的Object类和Math类。

Object类:

Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。

下面说明Object类的几种常用方法:

示例1:

toString

  public String toString()

返回:
该对象的字符串表示形式。

equals

public boolean equals(Object obj)

返回:

指示其他某个对象是否与此对象“相等”(内容)。
package com.company;

public class test {
        /**
         * 类库练习
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            String str1,str2,str3,str4;
            str1 = new String("ABC");
            str2 = new String("ABC");
            str3 = "ABC";
            str4 = "ABC";
            System.out.println(str1.toString());//用于返回该对象的信息
            System.out.println(str1.equals(str2));
            //判断内容是不是相等
            System.out.println(str1.equals(str3));
            System.out.println("+++++++++++++++++");
            System.out.println(str1==str2);
            //判断是不是相同
            System.out.println(str1==str3);
            System.out.println(str4==str3);

    }

}

运行结果

ABC
true
true
+++++++++++++++++
false
false
true

Math类:

Math类中包含多种对数字数据处理的工具方法。

1.sqrt

public static double sqrt(double a)

返回正确舍入的 double 值的正平方根。

2.cbrt

public static double cbrt(double a)

返回 double 值的立方根。

3.pow

public static double pow(double a,double b)

返回第一个参数的第二个参数次幂的值。

4.round

public static long round(double a)

返回最接近参数的 long。结果将舍入为整数:加上 1/2,对结果调用 floor 并将所得结果强制转换为 long 类型。换句话说,结果等于以下表达式的值:
(long)Math.floor(a + 0.5d)

示例2:

package com.company;

public class test01 {

        /**
         * 类库练习
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            //有一三角形土地,有两边本别长为400,500米,夹角70度,求土地面积。
            //利用公式S=1/2*a*b*sinAB
            double a = 400,b = 500;
            double c=Math.PI*70/180;   //用弧度制表示
            System.out.println(a*b*(Math.sin(c))/2);
            System.out.println("+++++++++++++++++");
            //求平方根,立方根,n次幂,四舍五入,绝对值
            System.out.println("10的平方根:"+Math.sqrt(10));
            System.out.println("10的立方根:"+Math.cbrt(10));
            System.out.println("25的4次方:"+Math.pow(25,4));
            System.out.println("对3.5四舍五入:"+Math.round(3.5));
            System.out.println("对-3.5四舍五入:"+Math.round(-3.5));
            System.out.println("求两数-12和34的差"+Math.abs((-12)-34));
            System.out.println("+++++++++++++++++");
            //求两个数之中的大数、小数
            double inter1,inter2;
            inter1 = -123.45;
            inter2 = 67.89;
            System.out.println(Math.min(inter1, inter2));
            System.out.println(Math.max(inter1, inter2));
            System.out.println("+++++++++++++++++");
            //随机数,每次运行产生的数是不一样的
            int i,sum=0;
            int array[] = new int [10];
            for(i=0;i<=9;i++)
            {
                array[i]=(int)(Math.random()*900+100);
                sum+=array[i];
            }
            System.out.println("随机数的平均值是:"+sum/10.0);
            System.out.println("随机数分别是:");
            for(i=0;i<=9;i++)
            {
                System.out.println(array[i]);
            }
        }

    }

 

运行结果

93969.26207859084
+++++++++++++++++
10的平方根:3.1622776601683795
10的立方根:2.154434690031884
25的4次方:390625.0
对3.5四舍五入:4-3.5四舍五入:-3
求两数-12和34的差46
+++++++++++++++++
-123.45
67.89
+++++++++++++++++
随机数的平均值是:564.5
随机数分别是:
578
301
546
713
745
256
199
638
716
953

Process finished with exit code 0

 

 

 

 

原文地址:https://www.cnblogs.com/songhuiqiang/p/10671958.html