JAVA常用类学习总结(一) -- 类库介绍及Object类

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
 * 
 */

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值