Java编程那些事儿74——java.lang包先容
副标题#e#
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要领。
#p#副标题#e#
下面以一个简朴的类为示例,编写一个简朴的equals要领,源代码如下:
/**
* equals要领编写示例
*/
public class MyEquals {
/**工具成员变量*/
String name;
/**根基数据范例成员变量*/
int n;
/**
* 判定工具内容是否沟通
* @param obj 需要较量的工具
*/
public boolean equals(Object obj){
//假如较量的内容是自身
if(obj == this){
return true;
}
//工具范例差异
if(!(obj instanceof MyEquals)){
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要领
#p#分页标题#e#
toString要领是显示工具内容时会被系统自动挪用的要领,当输出一个工具的内容时,系统会自动挪用该类的toString要领,譬喻输出Object范例的工具obj,则以下两组代码的成果是一样的:
System.out.println(obj);
System.out.println(obj.toString());
而Object类中的toString类实现较量简朴,其源代码为:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
假如需要本身的类的工具凭据必然的名目举办输出,则可以在本身设计的类内部包围toString要领,然后设计需要的输格外式即可。
至于Object类中的其它要领,下面做一个根基的先容:
l clone要领:复制工具。也就是建设一个和该工具的内容完全一样的工具,新的工具拥有独立的内存空间。
l 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文档。