(74)java.lang包介绍1

最后更新于:2022-04-01 11:00:08

## Java编程那些事儿74——java.lang包介绍1 陈跃峰 出自:[http://blog.csdn.net/mailbomb](http://blog.csdn.net/mailbomb) ### 9.4 JDK API包名综述 在整个JDK API中,大约包含1、200个包,总体来看,包名第一个名称主要有三种:java、javax和org。其中以java开头的包名是JDK的基础语言包,以javax开头的属于JDK扩展包(其中x是extend的简写),而以org开头的则是第三方组织提供的功能包(org是organization的简写)。而在JDK API中还包含了一些以com.sun开头的包名,这些是SUN公司提供的一些功能包,由于这些包中的类随着JDK版本的更改变化很大,不具备兼容性,所以未在标准的JDK API文档中进行公开。 在本章接下来的内容中,首先介绍常用的类的功能以及基本使用,这些介绍主要涵盖java.lang包和java.util包中的内容。 ### 9.5 java.lang包 java.lang包是Java基础语言包(其中lang是language(语言)的简写),该包中包含Java语言所需要的基本的功能类、接口等信息,是进行Java语言编程的基础。 由于在进行Java语言编程时,该包的使用特别频繁,所以在Java语言中,该包是被默认引入的。 下面就介绍一下该包中常见类的功能以及相关使用。 ### 9.5.1 Object Object类Java语言的灵魂,因为所有的类(除了Object类),都是该类的子类,即使不书写继承,系统也会自动继承该类,所以Object是整个Java语言继承树的唯一一个根,这就是Java语言特色的单根继承体系。包括数组也实现了该类中的方法。 由于Java语言的这种单根继承体系,所以整个Java语言的结构中很方便的实现了很多复杂的特性,例如多线程等控制,也可以很方便的对于整个Java语言体系进行更新。 由于Object类是Java语言中所有类的父类,所以Object类中的方法将出现在每个类的内部,熟悉该类中的常见方法中的使用,是每个程序员学习的基础。 1、equals方法 equals方法实现的功能是判断两个对象的内容是否相同。Object类中该方法的实现很简单,Object类中equals方法实现的代码如下(说明:该代码可以从JDK安装目录下的src.zip中找到): ~~~                             public boolean equals(Object obj) {                                      return (this ==obj);                        } ~~~ 在Object类中方法的实现比较简单,如果真正需要在项目中进行比较时,这个equals方法的作用是无法达到实际的要求的。所以如果在项目中涉及的类需要比较该类型的对象时,则必须覆盖equals方法。 下面以一个简单的类为示例,编写一个简单的equals方法,源代码如下: ~~~                             /**  * equals方法编写示例  */ public class MyEquals {                                      /**对象成员变量*/                                      String name;                                      /**基本数据类型成员变量*/                                      int n;                                               /**                                       * 判断对象内容是否相同                                       * @param obj 需要比较的对象                                       */                                      public boolean equals(Object obj){                                                //如果比较的内容是自身                                                if(obj == this){                                                         return true;                                                }                                                                   //对象类型不同                                                if(!(obj instanceofMyEquals)){                                                         return false;                                                }                                                //转换成当前类类型                                                MyEquals m = (MyEquals)obj;                                                                            /*依次比较对象中每个变量*/                                                //name属性不同                                                if(!name.equals(m.name)){                                                         return false;                                                }                                                //n属性不同                                                if(!(n == m.n)){                                                         return false;                                                }                                                                   //如果都相同,则返回true                                                return true;                                      } } ~~~                    在实际比较时,首先判断是否是自身,然后再判断对象的类型是否符合要求,可以使用instanceof关键字进行判断,该运算符的语法格式为: 对象名 instanceof 类名 如果对象名是后续类名类型的对象,则结果为true,否则为false。 如果类型符合要求,然后就可以依次比较对象中每个属性的值是否相同了,如果有一个属性的值不相同则不相等。 2、finalize方法 finalize方法的作用和前面介绍的构造方法的概念刚好相反,构造方法的作用是初始化一个对象,而finalize方法的作用是释放一个对象占用的内存空间时,会被JVM自动调用的方法。 说明:finalize方法的作用和C++中析构函数的作用一样。 如果在对象被释放时,需要执行一些操作的话,则可以在该类中覆盖finalize方法,然后在方法内部书写需要执行的代码即可。 3、hashcode方法 hashcode方法的作用是获得一个数值,该数值一般被称作散列码,使用这个数值可以快速判断两个对象是否不相同,主要应用于集合框架中类的快速判断。 两个内容相同的对象,其hashcode方法的返回值必须相同,而两个不相同的对象其hashcode的值可能相同。 如果自己编写的类需要存储到集合类中,则覆盖该方法可以提高集合类的执行效率。 4、toString方法 toString方法是显示对象内容时会被系统自动调用的方法,当输出一个对象的内容时,系统会自动调用该类的toString方法,例如输出Object类型的对象obj,则以下两组代码的功能是一样的: ~~~                             System.out.println(obj);                             System.out.println(obj.toString()); ~~~                    而Object类中的toString类实现比较简单,其源代码为: ~~~                             publicString toString() {                                      returngetClass().getName() + "@" + Integer.toHexString(hashCode());                        } ~~~ 如果需要自己的类的对象按照一定的格式进行输出,则可以在自己设计的类内部覆盖toString方法,然后设计需要的输出格式即可。 至于Object类中的其它方法,下面做一个基本的介绍: 1.  clone方法:复制对象。也就是创建一个和该对象的内容完全一样的对象,新的对象拥有独立的内存空间。 2.  getClass方法:主要获得对象的类型,该方法主要用于反射技术的实现。 另外的wait、notify和notifyAll等方法在是为了实现多线程的需要而实现的,将在后续的多线程技术中进行详细的介绍。 ### 9.5.2 Math Math类是一个数学工具类,在Java语言中,常用的数学常数和数学方法都在该类内部,而且无论是常数还是方法都是static类型的,方便程序员进行实际的使用。 下面示例代码是调用Math类中的abs方法实现求数字的绝对值的实现代码: ~~~                    /**  * Math类基本使用  */ public class MathDemo {                             public static void main(String[] args){                                       int m = -10;                                       int n = Math.abs(m);                                       System.out.println("绝对值是:" + n);                             } } ~~~ 由于Math类的方法作用比较简单,这里就不一一举例了,具体的方法请参阅JDK API文档。
';