1. JAVA类库
JAVA程序设计就是类的设计过程,分为两种:
系统类:即Java类库中的类,这部分是设计好的,直接用就可以。
用户类:这部分由开发人员自定义。
Java给出了一套标准的类库,这些类为执行大部分的编程任务提供了方法和接口。类库被组成许多的包,每个包又包含一些子包及多个类。形成树形结构的类层次,其中包含核心包java,拓展包javax和org
- 1. java.lang : 这个包包含了一些形成语言核心的类,提供了类似于Character,Integer这样的封装类。还有系统的标准类,如String,StringBuffer。Java编辑器会自动装载这个包,因此使用这个包下面的类时,不用显式 import java.lang.*;
- 2. java.applet : 这个包里面了提供了创建Java applet 方法。Java applet运行在web浏览器下,通常通过Internet加载。
- 3. java.awt : 有许多组成Java的抽象视窗工具(awt)的类所组成的包。它提供了基于类的图形用户界面,可以为Java applet 和应用程序变成提供视图,按钮,对话框及其他控件。
- 4. java.net : 这个包提供了网络,套接字处理器和Internet实用工具类。
- 5. java.io : 这个包中的类提供了输入输出服务,用于读入和输出文件数据,访问键盘输入和打印输出。
- 6. java.util : 这个包包含为一些实用程序类和集合框架类,还提供了Collection接口和其实现类,如List,Set,Map。
- 7. java.rmil : 远程方法启用包,在这个包中的类提供了通过远程接口控制的分布式代码支持。通过该报中的类,可以创建Java应用程序,使它的不同部分在不同的系统中一起运行。
- 8. java.sql : 这个包中提供了结构化查询语言数据库字段类型和方法的实现。根据系统的不同,这个包的类可能会通过一个特定的数据库系统实现,或者缺省时通过ODBC(开放式数据库连接)标准的直接映射实现。
2. java.lang.Object类
2.1 Object介绍
Object类是类层次的根,Java中所有的类都继承自这个类。Object类是Java中唯一没有父类的类。
2.2 类中的方法
/*
这个方法比较特殊:
首先,使用这个方法的类必须实现 java.lang.Cloneable 接口,否则会抛出CloneNotSupportedException 异常。
Cloneable 接口中不包含任何方法,所以实现它时只要在类声明中加上 implements 语句即可。
第二个比较特殊的地方在于这个方法是 protected 修饰的,覆写 clone()方法的时候需要写成 public,才能让类外部的代码调用。
*/
// Creates and returns a copy of this object.
protected native Object clone() throws CloneNotSupportedException;
/*
Object 类中的 equals()方法定义如下:
public boolean equals(Object obj){
return (this == obj);
}
“==”运算符判断两个引用是否指向同一个对象。
对于 Object 类的 equals()方法来说,它判断调用 equals()方法的引用(方法调用者)与传进来的引 用(方法参数)是否一致,即这两个引用是否指向的是同一个对象。
只有当继承 Object 的类覆写(override)了 equals()方法之后,继承类实现了用 equals()方法比较 两个对象是否相等,才可以说 equals()方法与==的不同。
覆写 equals()方法时需要注意应使其具有如下特点:
(1)自反性(reflexive):任何非空引用 x,x.equals(x)返回为 true。
(2)对称性(symmetric):任何非空引用 x 和 y,x.equals(y)返回 true 当且仅当 y.equals(x)返回 true。
(3)传递性(transitive):任何非空引用 x 和 y,如果 x.equals(y)返回 true,并且 y.equals(z)返回 true,那么 x.equals(z)返回 true。
(4)一致性(consistent):两个非空引用 x 和 y,x.equals(y)的多次调用应该保持一致的结果,(前提条件是在多次比较之间没有修改 x 和 y 用于比较的相关信息)。
(5)约定:对于任何非空引用 x,x.equals(null)应该返回为 false。
(6)覆写 equals()方法时,应该同时覆写 hashCode()方法,反之亦然。
*/
// Indicates whether some other object is "equal to" this one.
public boolean equals(Object obj);
/*
这个方法返回一个整型值(hash code value),如果两个对象被 equals()方法判断为相等,那么它们就应该拥有同样的 hash code。
Object 类的 hashCode()方法为不同的对象返回不同的值,Object 类的 hashCode 值表示的是对象的地址。
覆写 hashCode()方法时需要注意应使其具有如下特点:
(1) 在 Java 应用的一次执行过程中,如果对象用于 equals 比较的信息没有被修改,那么同一个对象多次调用 hashCode()方法应该返回同一个整型值。
应用的多次执行中,这个值不需要保持一致, 即每次执行都是保持着各自不同的值。
(2) 如果 equals()判断两个对象相等,那么它们的 hashCode()方法应该返回同样的值。
(3) 并没有强制要求如果 equals()判断两个对象不相等,那么它们的 hashCode()方法就应该返回不同的值。
即,两个对象用 equals()方法比较返回 false,它们的 hashCode 可以相同也可以不同。但是,应该意识到,为两个不相等的对象产生两个不同的 hashCode 可以改善哈希表的性能。
*/
// Returns a hash code value for the object.
public native int hashCode();
/*
Object 类中的 toString()方法定义如下:
public String toString(){
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
当打印引用,如调用 System.out.println()时,会自动调用对象的 toString()方法,
打印出引用所指的对象的toString()方法的返回值,
因为每个类都直接或间接地继承自Object,因此每个类都有toString() 方法。
*/
// Returns a string representation of the object.
public String toString();
/*
Object类中的getClass()方法是用来获取当前对 象所属类的信息的,其返回一个Class对象
在java语言中,基础类库提供了Class类,这个类 封装了对象或接口运行时的状态。
当类被加载的 时候,Class类的对象会被自动创建。
值得注意的是,编程人员不能通过使用语句 new Class()来创建Class类对象。
在编程过程中,我们可以通过Class类的 getName()方法获取类或接口的全名;
也可以通过静态方法forName()获取给定全名Class类的对象;
还可以通过方法newInstance()来创建一个与调用对象内容相同的新的实例;
最后我们获取一个类的父类Class对象是通过调用 getSuperclass()方法来完成的。
*/
// Returns the runtime class of this {@code Object}.
public final native Class<?> getClass();
/*
Called by the garbage collector on an object when garbage collection
determines that there are no more references to the object.
*/
protected void finalize() throws Throwable { }
/**
* getClass()测试类
* getClass()返回的是调用者的类信息 (class com.hpe.article.stringdemo.TestGetClass)
* getName()返回的是调用者相关的:包名.类名(com.hpe.article.stringdemo.TestGetClass)
* getSuperclass()返回的是父类的信息(class java.lang.Object)
* @author destiny
*
*/
public class TestGetClass {
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
TestGetClass t1 = new TestGetClass();
System.out.println(t1.getClass());
System.out.println(t1.getClass().getName() + "内存位 置是" + t1);
TestGetClass t2 = t1.getClass().newInstance();
System.out.println(t2.getClass().getName() + "内存位 置是" + t2);
System.out.println("父类为 " + t1.getClass().getSuperclass());
}
}
/* 输出结果:
* class com.hpe.article.stringdemo.TestGetClass
* com.hpe.article.stringdemo.TestGetClass内存位 置是com.hpe.article.stringdemo.TestGetClass@7852e922
* com.hpe.article.stringdemo.TestGetClass内存位 置是com.hpe.article.stringdemo.TestGetClass@4e25154f
* 父类为 class java.lang.Object
*
*/